为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

湖上湖 2021-09-12 20:11:58
我正在努力学习Java Swing。现在,我正在制作一个简单的程序,我需要制作一个按钮。我有两个班级:司机和秋千。我创建了按钮并导入javax.swing.JButton并添加了按钮。最后,按钮添加到面板,但我不知道为什么我只得到面板?任何人都可以帮助我吗?这是我的代码: 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");    }}
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

好吧,让我们开始吧……


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布局


查看完整回答
反对 回复 2021-09-12
?
阿晨1998

TA贡献2037条经验 获得超6个赞

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

删除该行:

JFrame f = new JFrame(title);

并调用方法this而不是f.


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信