私はScala-swingフロントエンドでアプリケーションを開発しています。私は大量に読み込まれているMainFrameを持っています。私はあまりにもうまくいくダイアログを持っています。しかし、ダイアログから親フレームにアクセスすると、フレームの内容がクリアされます。 MemuBarはまだそこにあります。Scala-Swingダイアログが親、親コンテンツにアクセスするときに
フレーム上にダイアログの中心を合わせるだけで、私はポイントを渡しただけです。私はちょうどそれを行うためにフレームにアクセスすることはできませんダイアログで作成された位置ポイントを設定することができます。そして、私は実際には得られません。私はフレーム内のポイントを作成し、それをダイアログに送信しますが、これは問題ありませんが、ダイアログの位置を設定するとフレームがクリアされます。
私は "org.scala-lang.modules" を使用しています%、 "スカラ座-swing_2.11" % "1.0.2"
いずれも、任意のアイデアがありますか?
ありがとうございます!
一方、このデモのコードは正常に動作し、それは簡単ではありませんので
package hack
import scala.swing.{Action, BorderPanel, Button, Dialog, Dimension, FlowPanel, Frame, MainFrame, Menu, MenuBar, MenuItem, SimpleSwingApplication, TabbedPane}
/**
* Created by bday on 3/31/16.<br>
* <br>
* FrameClearingDialog will do something useful I'm sure
*/
class FrameClearingDialog (parent: Frame) {
val dialog = new Dialog
dialog.contents = new FlowPanel() {
preferredSize = new Dimension(500,500)
}
dialog.open()
dialog.setLocationRelativeTo(parent)
}
class Parent extends SimpleSwingApplication {
override def top: Frame = new MainFrame {
title = "Hack "
preferredSize = new Dimension(1000,1000)
menuBar = new MenuBar() {
contents += new Menu("Menu") {
contents += new MenuItem(Action("Show Dialog") {
createAndShowDialog
})
}
}
val panel = new BorderPanel() {
layout(new Button() {text="button"}) = BorderPanel.Position.North
layout(new Button() {text="button"}) = BorderPanel.Position.Center
layout(new Button() {text="button"}) = BorderPanel.Position.South
}
contents = new TabbedPane() {
pages += new TabbedPane.Page("Page", panel)
}
}
def createAndShowDialog = {
new FrameClearingDialog(top)
}
}
object Starter extends App {
val demo = new Parent
demo.main(args)
}
私は私の問題を解決し、それはまだ問題がある理由を私は理解していません。私がタブ付きペインでページを呼び出せるように、私はページコンテンツであるパネルを使って地図を作った。私はこれをループし、ページにコンテンツをロードしました。これは動作しますが、ダイアログにアクセスするとコンテンツが失われます。 valに同じメソッドを使ってコンテンツを作成してからページとマップに入れるのはOKですが、マップはvarのままにしておきます。私はこの例を更新しましたが、やはりまだ動作しています。だから私はまだ本当の問題を見つけていない。 – Bday
私はMainWindowでclose()してから、やっとopen()すると同じ問題が発生します。残念なことに、あなた自身の答えで示したように、唯一の回避策は、MainFrameコンストラクタ内のすべてのコンテンツを作成することです。 – Core
MainFrameコンストラクタで見知らぬ人がいます...再オープン時に2回呼び出されます。 – Core