【问题标题】:How to include JPanel from other class to the main如何将 JPanel 从其他类包含到主类中
【发布时间】:2014-09-22 21:18:18
【问题描述】:

我有这个 Other 类,我在里面做了面板。我如何在主类中添加这个面板(当我这样运行时,我得到空白窗口)。

public class Other extends JFrame {

    JTextField input = new JTextField(4);

    public JPanel panel () {
        //JPanel for all
        JPanel totalGUI = new JPanel();
        totalGUI.setLayout(null);

        //Input panel
        JPanel inputPanel = new JPanel();
        inputPanel.setLayout(null);
        inputPanel.setLocation(50,50);
        inputPanel.setSize(250, 30);
        totalGUI.add(inputPanel);

        input.setSize(100,30);
        input.setLocation(150,30);
        inputPanel.add(input);

        totalGUI.setOpaque(true);
        return totalGUI;
    }

    public Other () {
        super("Guess The Number");
    }
}

这是我的主要课程:

public class Main {

    public static void main (String[] args) {

        Other obj = new Other();
        obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        obj.setSize(300,300);
        obj.setVisible(true);
    }
}

【问题讨论】:

  • 1.不要为此目的使用主类,2. 在构造函数(其他)中创建所有内容,3. 使用 JFrame 的局部变量而不是扩展 JFrame
  • @mKorbel 为什么 OP 不应该扩展 JFrame
  • 我会记住这一点的。 :D
  • @msrd0 让我们想象一下我们有最复杂的 GUI,你想如何从另一个类中更改 JFrames.whatever(),是的 SwingUtilities 或 Window[] 中有方法返回...的数组,但是你必须为JFrame创建一个临时变量,如果你愿意,创建一个局部变量并不容易
  • @msrd0 搜索继承 vs.组成:-)

标签: java swing jpanel


【解决方案1】:

您根本不应该从Main 类访问面板,不需要它。要将您的面板添加到整个框架中,请将其写入Other 构造函数:

setContentPane(panel());

如果您想保留面板并仅添加面板,请改为:

getContentPane().add(panel());

您也可以使用这一行,但它仍然存在于 AWT 中,不应在 Swing 应用程序中使用:

add(panel());

【讨论】:

    【解决方案2】:

    只需将JPanel 添加到您的JFrame 的构造函数中即可:

    public Other(){
        super("Guess The Number");
        add(panel());
    }
    

    【讨论】:

      【解决方案3】:

      您应该调用 JFrame 对象的 add 函数并将 JPanel 添加到它。 在您的主函数中,在初始化其他对象后执行此操作:

      obj.add(obj.panel());
      

      【讨论】:

      • 你为什么在Main类中这样做?
      • 我看到了,我正在使用你和@Nicolas Albert 的方式:D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 2021-12-22
      相关资源
      最近更新 更多