在Java中,JFrame中不显示JPanel。

问题描述 投票:0回答:1

我知道这个问题已经被问了很多,我也做了调查,但还是找不到什么。下面是证明,免得大家不高兴。

我找到了这个链接。https:/coderanch.comt563764javaBlank-Frame-Panel。

和这个。添加面板到框架,但不显示 当应用程序被运行

和这个。为什么我不应该在添加组件之前调用setVisible(true)?

还有这个。JPanel在JFrame中不显示?

但第一个问题说使用重绘,我试过了,但没有解决,而第二个和第三个问题到最后一个问题都说要把它放在 setVisible 组件添加后,我有。

最后一个说的是让用户 JPanelArt 延长 JPanel 而不是 JFrame 而不是在框架构造函数中做一个框架(也没有做过)。

每当我运行这个程序时,我都会得到一个空白的框架,就像从未添加过面板一样。

如果我在这些链接中错过了什么,我很抱歉。以下是我的类。

GUI.java (extends 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 (extends 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构建器,而这个社区里有人向我指出,这个GUI构建器并不好用(非常正确!)。

java swing user-interface jframe jpanel
1个回答
2
投票

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

我还注意到,你把每个JButton都设置成了一个约束条件 BorderLayout.WEST. 这很可能会把你的JButtons放在一起,只显示其中一个。

© www.soinside.com 2019 - 2024. All rights reserved.