【问题标题】:JPanel not showing inside JFrame in JavaJPanel 未在 Java 中的 JFrame 中显示
【发布时间】:2020-05-21 04:26:25
【问题描述】:

我知道这个问题被问了很多,我已经完成了我的研究,但仍然找不到任何东西。以下是在任何人不高兴之前的证明:

我找到了这个链接: https://coderanch.com/t/563764/java/Blank-Frame-Panel

还有这个: Adding panels to frame, but not showing when app is run

还有这个: Why shouldn't I call setVisible(true) before adding components?

还有这个: JPanel not showing in JFrame?

但第一个问题说使用重绘,我尝试过没有修复,倒数第二个和倒数第三个问题谈到在我添加的组件之后放置 setVisible

最后一个谈到让用户JPanelArt 成为JPanel 的扩展(这样做)而不是JFrame,并且不要在框架构造函数中创建框架(也没有这样做)

当我运行它时,我只会得到一个空白框架,就好像从未添加过面板一样。

如果我错过了这些链接中的某些内容,我深表歉意。反正下面是我的课:

GUI.java(扩展 JFrame)

package javaapplication2;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GUI extends JFrame{

public GUI(String name) {
    super(name);

    getContentPane().setLayout(null);

    JPanel myPanel1 = new GUIPanel();
    myPanel1.setLocation(20, 20);
    getContentPane().add(myPanel1);

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setResizable(true);
}

public static void main(String[] args) {
    JFrame frame = new GUI("Game");
    frame.setVisible(true);
}
}

GUIPanel.java(扩展 JPanel)

package javaapplication2;

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


public class GUIPanel extends JPanel {

JButton start;
JButton inspect1;
JButton inspect2;
JButton inspect3;
JButton suspect;

public GUIPanel() {
    setLayout(new BorderLayout());

    start = new JButton("Start Game");
    inspect1 = new JButton("Inspect 1");
    inspect2 = new JButton("Inspect 2");
    inspect3 = new JButton("Inspect 3");
    suspect = new JButton("Choose Suspect");

    add(start, BorderLayout.WEST);
    add(inspect1, BorderLayout.WEST);
    add(inspect2, BorderLayout.WEST);
    add(inspect3, BorderLayout.WEST);
    add(suspect, BorderLayout.WEST);

}
}

我知道这很简单,但那是因为我正在按照我的讲师的教程来掌握事情的窍门,因为我之前使用了一个 GUI 构建器,这个社区中的某个人向我指出这不是一个好的开始(非常正确!)

【问题讨论】:

  • 你为什么将 GUIPanel 声明为超类的一个实例,而不是它实际上是什么? JPanel myPanel1 = new GUIPanel();
  • 这就是我们在我大学的教程中的做法。只做 GUIPanel myPanel1 = new GUIPanel() 会更好吗?我最初是这样做的,但最终因为我看到了教程而改变了它。

标签: java swing user-interface jframe jpanel


【解决方案1】:

当您调用 getContentPane().setLayout(null) 时,问题在于您的 GUI 类。由于此方法调用,您的 JFrame 没有显示任何内容。如果您删除它,您的元素应该会显示出来。

我还注意到您将每个 JButton 设置为具有BorderLayout.WEST 的约束。这很可能会将您的 JButton 叠放在一起,并且只渲染其中一个。

【讨论】:

  • 我看到你是一个新的贡献者,所以首先感谢你帮助社区!这解决了我的问题,谢谢你。同样,是的,它们看起来像是堆叠在一起的。我该如何改变?我假设为每个按钮设置一个大小?
  • @ExileVoid 没问题 :) 要解决您的按钮问题,您将不得不研究如何为 GUI 组件使用不同的布局管理器。 JavaDocs 有一个所有这些的列表以及如何使用它们的示例代码以及它的结果。通常,您只想选择最适合您的 GUI 布局方式的一种。
猜你喜欢
  • 1970-01-01
  • 2011-07-18
  • 2014-03-16
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 2021-01-29
相关资源
最近更新 更多