繁体   English   中英

Java-为什么我的按钮没有显示在面板中?

[英]Java - Why doesn't my buttons show in the panel?

我正在尝试学习Java Swing 现在,我正在编写一个简单的程序,需要创建一个按钮。 我有两堂课:车手和挥杆。 我创建按钮并导入javax.swing.JButton并添加了按钮。 最后,将按钮添加到面板上,但是Idk为什么我只得到面板? 有人可以帮我吗? 这是我的代码:

 import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;

public class Swing extends JFrame {

    private JFrame f;
    private JButton button;
    private JLabel label;
    private JPanel panel; 

    public Swing() {
    }

    public Swing(String titleName) {
        creatButton();
        creatFrame(titleName);
    }

    public void creatButton() {
        JButton btn = new JButton("click me");
        JPanel panel = new JPanel();
        panel.add(btn);
        btn.setBounds(50, 100, 95, 30);
        add(panel);

    }

    private void creatFrame(String title) {
        JFrame f = new JFrame(title);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        f.setSize(400, 500);
        f.setLayout(null);

    }

}
public class Driver {
    public static void main (String [] args) {
        new Swing ("calculator");
    }

}

好吧,让我们从...开始

JButton btn = new JButton("click me");
JPanel panel = new JPanel();
panel.add(btn);
btn.setBounds(50, 100, 95, 30);
add(panel);

您:

  • 创建一个按钮
  • 创建一个面板
  • 您将按钮添加到面板
  • 您将面板添加到框架

接着...

JFrame f = new JFrame("calculator");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new 
f.setVisible(true);

您创建了一个全新的JFrame实例并显示了它,但是它没有任何作用? 😱!

相反,您应避免从JFrame扩展,而应改用JPanel ,类似...

public class Swing extends JPanel {

    private JButton button;
    private JLabel label;

    public Swing() {
        creatButton();
        add(button);
    }

    public void creatButton() {
        JButton btn = new JButton("click me");
    }
}

然后,您可以创建一个窗口(或其他容器)并将其添加到其中

JFrame f = new JFrame(title);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new Swing());
f.pack(); 
f.setLocationRelativeTo(null);
f.setVisible(true);

通常, JFrame是一个非常差的扩展点,它是一个复杂的复合组件,将您锁定在单个用例中。 JPanel开始,通常是一个更好的主意,它为您提供了更大的灵活性和更少的复杂性,并且易于重用。

您确实非常需要避免使用null布局

creatFrame正在创建一个与框架本身不同的新JFrame(您的Swing类扩展了JFrame)。

删除行:

JFrame f = new JFrame(title);

并通过this而不是f调用方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM