2011-12-15 4 views
2

스칼라 스윙 프레임을 닫는 데 문제가 있습니다.스칼라 스윙 프레임 닫기

def closer(){ 
    top.close 
} 

톱 메인 프레임입니다 : 여기에 가까울 기능으로 정의 내 종료 버튼

val buttonExit = new Button { 
    text = "Exit" 
    action = Action("Exit") { 
    WorldActor.run(false) 
    closer 
    } 
} 

코드입니다. 닫으려고 할 때마다 응답이 중지되고 중지됩니다.

+0

'WorldActor'는 'Actor'라는 스칼라인가요? –

답변

5

는 것 같습니다.

disposescala.swing.Window에 구현되어 있으므로 프레임 및 대화 상자에 적용됩니다.

호출 dispose 마지막 프레임에서 호출 된 경우 추가 프레임을 닫고 응용 프로그램을 종료합니다 (복구 할 수있는 방법으로 packvisible = true을 다시 사용하여 닫음).

System.exit을 호출하기 전에 제공된 종료 코드를 호출하는 모든 프레임 호출 quit()에서 응용 프로그램을 종료하려면 다음을 수행하십시오.

여기에 빠른 해킹 내가 scala.swing._에서 숙련 된 아니에요하지만 나는 다음과 같은 생각

import swing._ 

object SwingThing extends SimpleSwingApplication { 
    def top = new MainFrame {frame => 
    val sf = new Frame {secondFrame => 
     title = "Secondary Frame" 
     visible = true 
     contents = new FlowPanel { 
     contents += new Button(Action("Close Me") {secondFrame.dispose()}) 
     contents += new Button(Action("Exit")  {quit()}) 
     } 
    } 
    val recoverBtn = new Button(Action("Recover") {sf.pack(); sf.visible = true}) 
    val closeBtn = new Button(Action("Close Me") {frame.dispose()}) 
    val exitBtn = new Button(Action("Exit")  {quit()}) 

    contents = new FlowPanel { 
     contents += recoverBtn 
     contents += closeBtn 
     contents += exitBtn 
    } 
    } 
} 
1

저는 스칼라의 전문가는 아니지만 Java 스윙 개발을 일부 수행했습니다. 내가

WorldActor.run(false) 

프로그램을 일시 중지 생각

를 사용해보십시오, 또한 System.exit(0)를 추가하려고, 그것을 제거하려고합니다.

def closer(){ 
    exit(0) //Java's System.exit(0) ? 
} 

아니면 top.closeSystem.exit(0)을 넣어.

또한 아무 것도하지 않도록 기본 닫기 작업을 설정 했습니까? 당신이 프레임에

dispose() 

를 호출 할 수 있습니다처럼

peer.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE) 
+0

clasa에서 기본 닫기 작업을 설정하는 방법 및 위치는 무엇입니까? 아십니까? –

+0

JFrame (MainFrame?)에서 사용합니다. 생성자 코드에'setDefaultCloseOperation (EXIT_ON_CLOSE);를 입력하기 만하면됩니다. 'JFrame ._; '을 (를) 가져 왔는지 확인하십시오. 예제는 [this] (http://compsci.ca/v3/viewtopic.php?t=10491)를 참조하십시오. – ApprenticeHacker

0

을 설명하기 위해입니다 :

상단
어떻게 메인 프레임을 정의하는 메인 프레임은

?

당신과 같이 정의하면 :

def top = new MainFrame { ... } 

그리고 다음 코드를

val a = top 
val b = top 

는 두 개의 서로 다른 인스턴스를 생성합니다.

그래서 b.closea을 닫지 않습니다.
그 반대의 경우, a.closeb을 닫지 않습니다.

관련 문제