我有一个包含我的程序将显示的主GUI窗口的类
/**
* GUI program to run a coffee/bagel shoppe
* @author Nick Gilbert
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CoffeeShop extends JPanel {
private final int WINDOW_WIDTH = 400; // Window width
private final int WINDOW_HEIGHT = 300; // Window height
private JFrame mainFrame;
public CoffeeShop()
{
//Setting up mainframe configurations
mainFrame = new JFrame();
mainFrame.setTitle("Order Entry Screen!");
mainFrame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLayout(new BorderLayout());
//Piecing together GUI window
mainFrame.add(new TitleRegister(), BorderLayout.NORTH);
mainFrame.setVisible(true);
}
public static void main(String[] args) {
new CoffeeShop();
}
}
正如您所看到的,我尝试添加mainFrame
JPanel
实际上是我写的一个扩展JPanel
/**
* Sets title at top of register
* @author Nick Gilbert
*/
import javax.swing.*;
import java.awt.*;
import java.awt.Event.*;
public class TitleRegister extends JPanel {
private JPanel titlePanel;
private JLabel titleLabel;
public TitleRegister() {
titlePanel = new JPanel();
titleLabel = new JLabel("Order Entry Screen", SwingConstants.CENTER);
titlePanel.add(titleLabel);
titlePanel.setVisible(true);
}
}
然而,当我这样做时,TitleRegister
的实例没有显示出来。我将setVisible
设置为true,因此它应该显示出来。
答案 0 :(得分:2)
您实际上没有在TitleRegister
窗格中添加任何内容...
如果不了解更多信息,您可以随心所欲地停留......
public class TitleRegister extends JPanel {
private JLabel titleLabel;
public TitleRegister() {
titleLabel = new JLabel("Order Entry Screen", SwingConstants.CENTER);
add(titleLabel);
}
}
事实上,您可以简单地将JLabel
添加到mainFrame
。
备注:强>
没有必要CoffeeShop
扩展JPanel
,你没有添加任何东西,你的构造函数构建了一个JFrame
并添加了UI。 ..
依靠pack
而不是setSize
,它会产生更可靠的输出,确保内容区域具有正确显示所需的空间。
确保仅从事件调度线程的上下文创建和修改UI。有关详细信息,请参阅Initial Threads