【问题标题】:JPanels in Jframe not shownJframe 中的 JPanel 未显示
【发布时间】:2012-12-05 19:22:20
【问题描述】:

我正在为计算器制作一个简单的布局,实际上我是 Java 新手并正在学习基础知识。我的问题是,当我运行此代码时,仅打开一个 JFrame,并且未显示其按钮的其他面板。 PLz帮助,我哪里出错了。

    import java.awt.*;
    import javax.swing.*;

    public class Layouts extends JFrame{
        public Layouts(){
            super("Calculator");
            setLookAndFeel();
            setSize(350,350);

            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            BorderLayout border = new BorderLayout();
            setLayout(border);

            GridLayout numbers = new GridLayout(2,2);
            row2.setLayout(numbers);
            row2.add(one);
            row2.add(two);
            row2.add(three);
            row2.add(four);

            GridLayout operators = new GridLayout(2,2);
            row3.setLayout(operators);
            row3.add(plus);
            row3.add(subtract);
            row3.add(multiply);
            row3.add(equals);
            setVisible(true);
        }

        private void setLookAndFeel()
        {
            try
            {
            IManager.setLookAndFeel("com.sun.java.lang.plaf.nimbus.NimbusLookAndFeel");
            }
            catch(Exception exc)
            {
            }
        }

        //row 1
        JPanel row1 = new JPanel();
        JTextField text = new JTextField(20);

        //row 2
        JPanel row2 = new JPanel();
        JButton one = new JButton("1");
        JButton two = new JButton("2");
        JButton three = new JButton("3");
        JButton four = new JButton("4");

        //row3
        JPanel row3 = new JPanel();
        JButton plus = new JButton("+");
        JButton subtract = new JButton("-");
        JButton multiply = new JButton("*");
        JButton equals = new JButton("=");

        public static void main(String[] args)
        {
        Layouts l1 = new Layouts();
        }

   }

【问题讨论】:

  • 我看不到您在 jframe 中添加 row2 和 row3 的位置。
  • 这就是问题@dicheridoo :)
  • 尽可能避免扩展顶级容器。从长远来看,扩展 JPanel 并在其上创建 UI 要容易得多。这使它更加灵活和可重复使用,因为您可以将面板添加到您喜欢的任何容器中

标签: java swing layout jframe jpanel


【解决方案1】:

记得添加所有组件(即 row2、row3 等)

例子:

add(row2,BorderLayout.CENTER)
add(row3,BorderLayout.SOUTH)

【讨论】:

    【解决方案2】:
    BorderLayout border = new BorderLayout();
    setLayout(border);
    

    但是您没有向 border 添加任何内容!添加numbersoperators

    【讨论】:

      【解决方案3】:

      您需要将JPanels 和JButtons 添加到JFrame。在这种情况下,JFrame 是您的 Layouts 类。所以做类似的事情:

      row1.add(text);
      this.add(row1); 
      
      row2.add(one);
      row2.add(two);
      row2.add(three);
      row2.add(four);
      this.add(row2); 
      
      ...
      

      看看这个教程是不是很有用JButton, JPanel & JFrame examples

      【讨论】:

        猜你喜欢
        • 2014-03-16
        • 1970-01-01
        • 1970-01-01
        • 2014-10-02
        • 1970-01-01
        • 2022-01-12
        • 2012-10-17
        • 2021-01-29
        • 2011-05-24
        相关资源
        最近更新 更多