6

私はSimpleSwingApplicationscalaswingの特性を備えたGUIを構築しています。私がやりたいのは、ユーザーにドキュメントをまだ保存していないかどうかを尋ねるメカニズム(Yes、No、Cancel)を閉じることです。ユーザーが[キャンセル]をクリックした場合、Application閉じるべきではありません。しかし、これまでに試したものはすべて機能MainFrame.closecloseOperationませんでした。

では、これはScala Swingでどのように行われるのでしょうか?

私はScala2.9を使用しています。

前もって感謝します。

4

4 に答える 4

5

ハワードが提案したものとはわずかに異なるバリエーション

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 _ => ()
      }
    }
  }
}

を使用することで、イベントが scala フレームによって受信さDO_NOTHING_ON_CLOSEれたときに何をすべきかを定義する機会が与えられます。WindowEvent.WINDOW_CLOSINGscala フレームがイベントを受け取るWINDOW_CLOSINGと、 を呼び出して反応しcloseOperationます。したがって、ユーザーがフレームを閉じようとしたときにダイアログを表示するにはcloseOperation、目的の動作をオーバーライドして実装するだけで十分です。

于 2011-07-04T19:26:05.430 に答える
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  
    }
  }
}
于 2011-07-09T03:25:38.163 に答える
1

私は scala swing にあまり詳しくありませんが、古いテスト プログラムのいくつかで次のコードを見つけました。

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)
      }
    }
  }
}
于 2011-07-04T17:13:56.147 に答える
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()
  }
}
于 2016-05-18T15:01:35.370 に答える