【问题标题】:Why is it that my JButtons do not show up when put in the constructor for the JPanel?为什么我的 JButton 在放入 JPanel 的构造函数时没有显示?
【发布时间】:2019-04-02 22:03:20
【问题描述】:

我是 Java 中的 GUI 新手(我猜是一般的编码),所以我很困惑为什么我的 JPanel 上的 JButton 仅在我初始化并添加 JButton 时才显示在具有 JFrame 的类上。我要做的是在 JPanel 上创建一个带有 JBUttons 和 GridLayout 的电话键盘。

如果我在其中包含 JFrame 的类上初始化并将 JButton 添加到 JPanel。我无法在扩展 JPanel 的类中将 JButton 添加到 JPanel,然后将 JPanel 对象添加到 JFrame。

这行得通:

public static void main (String[] argv){ 
         JFrame frame = new JFrame();
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

         frame.setBackground(Color.gray);
         DialPanel keypad = new DialPanel();
         panel.setLayout(new GridLayout(3, 3));
         JButton one = new JButton("1");
     JButton two = new JButton("2");
     JButton three = new JButton("3");
     JButton four = new JButton("4");
     JButton five = new JButton("5");
     JButton six = new JButton("6");
     JButton seven = new JButton("7");
     JButton eight = new JButton("8");
     JButton nine = new JButton("9");
     keypad.add(one);
     keypad.add(two);
     keypad.add(three);
     keypad.add(four);
     keypad.add(five);
     keypad.add(six);
     keypad.add(seven);
     keypad.add(eight);
     keypad.add(nine);

         frame.getContentPane().add(keypad);
         keypad.setVisible(true);

         frame.pack();
         frame.setVisible(true);
    } 

public class DialPanel extends JPanel {

    DialPanel(){
        JPanel panel = new JPanel();
    }
}

但这不起作用,我不知道为什么:

    public static void main (String[] argv){ 
         JFrame frame = new JFrame();
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

         frame.setBackground(Color.gray);
         DialPanel keypad = new DialPanel();
         frame.getContentPane().add(keypad);
         keypad.setVisible(true);

         frame.pack();
         frame.setVisible(true);
    } 

public class DialPanel extends JPanel {

    DialPanel(){
         JPanel panel = new JPanel();
         panel.setLayout(new GridLayout(3, 3));
         panel.setBackground(Color.gray);
                 JButton one = new JButton("1");
         JButton two = new JButton("2");
         JButton three = new JButton("3");
         JButton four = new JButton("4");
         JButton five = new JButton("5");
         JButton six = new JButton("6");
         JButton seven = new JButton("7");
         JButton eight = new JButton("8");
         JButton nine = new JButton("9");
         panel.add(one);
         panel.add(two);
         panel.add(three);
         panel.add(four);
         panel.add(five);
         panel.add(six);
         panel.add(seven);
         panel.add(eight);
         panel.add(nine);
    }
}

使用第二个选项,窗口只是空白,但在 main 方法中的所有内容都按预期工作。为什么构造函数中的按钮不能工作,我怎样才能让它工作(如果我能让它像那样工作的话)?

【问题讨论】:

    标签: java swing


    【解决方案1】:

    您无需在DialPanel 内再创建一个JPanelDialPanel 构造函数中的第一行)。

    DialPanel 已经通过类定义扩展了JPanel

     public class DialPanel extends JPanel
    

    因此,您将所有按钮添加到从未添加到任何其他容器的 JPanel

    您必须将所有按钮添加到DialPanel 本身。

    正确的代码是:

    public class DialPanel extends JPanel {
        DialPanel(){
             setLayout(new GridLayout(3, 3));
             setBackground(Color.gray);
             JButton one = new JButton("1");
             JButton two = new JButton("2");
             JButton three = new JButton("3");
             JButton four = new JButton("4");
             JButton five = new JButton("5");
             JButton six = new JButton("6");
             JButton seven = new JButton("7");
             JButton eight = new JButton("8");
             JButton nine = new JButton("9");
             add(one);
             add(two);
             add(three);
             add(four);
             add(five);
             add(six);
             add(seven);
             add(eight);
             add(nine);
        }
    }
    

    【讨论】:

    • “对不起我的英语。” 感谢您使用我理解的唯一语言!您的答案非常清楚,因此肯定足以说明问题。 :)
    • “向催眠蟾蜍致敬!” ;)
    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多