2011-07-04 4 views
6

私はscaler swingでSimpleSwingApplicationの特性を持つGUIを構築しています。 私がしたいことは、彼が文書をまだ保存していないかどうかをユーザーに(Yes、No、Cancel)尋ねる、クローズ時にメカニズムを提供することです。ユーザーがキャンセルすると、Applicationは閉じるべきではありません。しかし、これまでに試したすべてのものがMainFrame.closecloseOperationで動作しませんでした。スカラスイングでウィンドウを閉じるメカニズムを中断する方法

これはScala Swingでどのように行われますか?

私はScala 2.9を使用しています。

ありがとうございます。

答えて

5

若干異なるバリエーションは、WindowEvent.WINDOW_CLOSINGイベントがスカラーフレームによって受信されたときに何をすべきかを定義する機会が与えられる。スカラーフレームがWINDOW_CLOSINGイベントを受信すると、それはcloseOperationを呼び出して反応します。したがって、ユーザーがフレームを閉じるときにダイアログを表示するには、closeOperationをオーバーライドして、必要な動作を実装すれば十分です。このことについては何

+0

ありがとうございます。減価償却費を取り除いた後、これはトリックでした。 – man

+0

うれしかったです! –

1

私はScalaのスイングと本当に慣れていないが、私は私の古いテストプログラムの一部では、このコードを見つけました:ハワードはDO_NOTHING_ON_CLOSEあなたを使用することにより

import scala.swing._ 

object GUI extends SimpleGUIApplication { 
    def top = new Frame { 
    title="Test" 

    import javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE 
    peer.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE) 

    override def closeOperation() { showCloseDialog() } 

    private def showCloseDialog() { 
     Dialog.showConfirmation(parent = null, 
     title = "Exit", 
     message = "Are you sure you want to quit?" 
    ) match { 
     case Dialog.Result.Ok => exit(0) 
     case _ =>() 
     } 
    } 
    } 
} 

を示唆したものとは

object GUI extends SimpleGUIApplication { 
    def top = new Frame { 
    title="Test" 
    peer.setDefaultCloseOperation(0) 

    reactions += { 
     case WindowClosing(_) => { 
     println("Closing it?") 
     val r = JOptionPane.showConfirmDialog(null, "Exit?") 
     if (r == 0) sys.exit(0) 
     } 
    } 
    } 
} 
+0

私はよく分からない:この目的のために 'sys.exit(0)'は普通ですか?一見、重すぎるようですが、私は間違っているかもしれません。 – Suma

3

:これは私がやりたいん

import swing._ 
import Dialog._ 

object Test extends SimpleSwingApplication { 
    def top = new MainFrame { 
    contents = new Button("Hi") 

    override def closeOperation { 
     visible = true 
     if(showConfirmation(message = "exit?") == Result.Ok) super.closeOperation 
    } 
    } 
} 
+0

残念ながら、メインウィンドウが消えた後にのみ確認ダイアログが表示されるため、これは動作しません(少なくともMainFrameではない場合)。 – sambe

0

。 super.closeOperationを呼び出してもフレームは閉じられませんでした。私はコメントの中でそれを言っただろうが、私はまだ許されていない。

object FrameCloseStarter extends App { 
    val mainWindow = new MainWindow() 
    mainWindow.main(args) 
} 

class MainWindow extends SimpleSwingApplication { 
    def top = new MainFrame { 
    title = "MainFrame" 
    preferredSize = new Dimension(500, 500) 
    pack() 
    open() 

    def frame = new Frame { 
     title = "Frame" 
     preferredSize = new Dimension(500, 500) 
     location = new Point(500,500) 
     pack() 

     peer.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE) 

     override def closeOperation() = { 
     println("Closing") 
     if (Dialog.showConfirmation(message = "exit?") == Result.Ok) { 
      peer.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE) 
      close() 
     } 
     } 
    } 
    frame.open() 
    } 
} 
関連する問題