为什么不用jframe显示按钮?

时间:2013-09-22 16:21:41

标签: java swing jframe frame

public class Benim extends JFrame {
    Container contentArea = getContentPane ();

public Benim(){
    JFrame frame=new JFrame("Concentration");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack(); 
     setSize(800, 800);

    JButton start=new JButton("Start");
    JPanel pane=new JPanel();
    pane.add(start);

    setVisible(true);
    frame.add(start);
    frame.add(pane);
    /* setContentPane(Container)


     JRootPane createRootPane()*/


}

public static void main (String []args){

            new Benim();

}
}

我的代码就是这样。我尝试首先添加到面板然后添加面板到框架,直接添加到框架。添加rootpane但仍然没有我的按钮。我想学习2天,但我仍然在同一时间。

2 个答案:

答案 0 :(得分:2)

显示的JFrame实例未添加JButton

直接在setVisible上直接调用JFrame

您几乎不想扩展JFrame,因为没有添加任何新功能

其他注意事项

  • 添加组件后致电setVisible
  • setSize是不必要的 - 让pack确定容器大小<​​/ li>

这是结果

public class Benim extends JFrame {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame("Concentration");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JButton start = new JButton("Start");
                JPanel pane = new JPanel();
                pane.add(start);


                pane.add(start);
                frame.add(pane);
                frame.pack();
                frame.setVisible(true);             
            }
        });
    }
}

答案 1 :(得分:0)

为什么另一个JFrame实例?您正在扩展它,所以只需致电super()

public class Benim extends JFrame {
  Container contentArea = getContentPane ();

  public Benim(){
    super("Concentration");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setSize(800, 800);

    JButton start=new JButton("Start");
    JPanel pane=new JPanel();
    pane.add(start);
    add(pane);

    setVisible(true);
  }

  public static void main (String []args){
    new Benim();
  }
}

Reimeus还明确指出,如果您不打算扩展功能,则无需扩展JFrame。请参阅他的示例以了解替代实现。