-1

javaFx アプリケーションで FXPanel コントロールの表示と非表示を切り替えたい

ボタンをクリックするとFXPanelコントロールが非表示になり、他のボタンをクリックするとコントロールが再び表示され、非表示になり、再び表示されなくなります。

次のコードを使用します。

public class abc extends JFrame
{
JFXPanel fxpanel;
Container cp;
public abc()
{
cp=this.getContentPane();
cp.setLayout(null);
JButton b1= new JButton("Ok");
JButton b2= new JButton("hide");
cp.add(b1);
cp.add(b2);
b1.setBounds(20,50,50,50);
b2.setBounds(70,50,50,50);
b1.addActionListener(this);
b2.addActionListener(this);
fxpanel= new JFXPanel();
cp.add(fxpanel);
fxpanel.setBounds(600,200,400,500);
}

public void actionPerformed(ActionEvent ae)
{ 
 if(ae.getActionCommand().equals("OK"))
 {
fxpanel.setVisible(true);
 }
   if(ae.getActionCommand().equals("hide"))
 {
 fxpanel.hide();
 }

 Platform.runLater(new Runnable())
{

 public void run()
 {
  init Fx(fxpanel);
  }}
 );
 }
 private static void initFX(final JFXPanel fxpanel) 
{
  Group group = ne Group();
  Scene scene= new Scene(group);
  fxpanel.setScene(scene);
  WebView webview= new WebView();
  group.getChildren().add(webview);
  webview.setMinSize(500,500);
  webview.setMaxSize(500,500);
  eng=webview.getEngine();
  File file= new File("d:/new folder/abc.html");
  try
 {
 eng.load(file.toURI().toURL().toString());
 }
catch(Exception ex)
{
}
}
public static void main(String args[])
{
 abc f1= new abc();
 f1.show();
}
}
4

1 に答える 1

2

いくつかのタイプミスは別として、コードには複数の問題があります。

1) ActionEvent#getActionCommand を使用してクリックされたボタンを特定する場合は、最初にボタンにアクション コマンド プロパティを設定する必要があります。アクション コマンドは、ボタンのテキストと同じではありません。

2) 同じ座標で両方のボタンを追加しているため、一方は表示されません。

3) 非推奨の hide() メソッドを使用して JFXPanel を非表示にしないでください。setVisisble(false) を使用してください。

さらに、いくつかの一般的な指針:

4) 通常の UI に null レイアウトを使用しないでください。これまで。

5) Java 命名規則をよく読んでください。これは私がうるさいだけでなく、他の人のコードをよりよく理解し、他の人があなたのコードを維持するのに役立ちます。

6)クラスSwingUtilities#invokeLaterを使用したのと同じように、EDT からスイング コンポーネントを表示するコードを呼び出します。Platformあなたが行ったように、メイン スレッドから swing を呼び出すと、ほとんどの場合は機能しますが、追跡が困難なエラーが発生することがあります。

于 2012-12-04T12:07:27.800 に答える