在Swing JFrame上添加/删除JFXPanel

时间:2012-12-06 06:43:29

标签: java swing javafx-2 layout-manager event-dispatch-thread

我想在JFXPanel容器上添加和删除JFrame但不能这样做。我被困在这里,按钮点击没有正确的解决方案我想添加和删除JFXPanel控件。

此代码有什么问题?

  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= new JFXPanel();
    cp.add(fxpanel);
    fxpanel.setBounds(600,200,400,500);


   }
  if(ae.getActionCommand().equals("hide"))
   { 
    cp.remove(fxpanel);
    }
   }
    public static void main(String args[])
   {

      abc f1= new abc();
      f1.show();
    }
   }

1 个答案:

答案 0 :(得分:2)

  • 不要不必要地延长JFrame来电

  • 请勿使用null / Absolute LayoutManager

  • 为什么使用show()设置JFrame可见?你应该使用setVisible(true)

  • 不要忘记应该通过Event Dispatch Thread和JavaFX组件SwingUtilities.invokeXXX通过Platform.runLater()

  • 创建一个操纵Swing组件

除了上述问题之外,您最大的问题是在添加/删除组件后不刷新GUI /容器,因此不会显示任何更改。

revalidate()个实例上调用repaint()JFrame以反映从可见容器添加/删除组件后的更改。