我写了一个扩展 JPanel 的类。 这是代码:
public class MedicalMonitorPanel extends JPanel{
public MedicalMonitorPanel() {
super();
initComponents();
}
public void initComponents(){
//layout settings
}
}
现在我想将我的面板添加到 jframe 中:
public class MedicalMonitorDisplay extends JFrame{
MedicalMonitorPanel panel;
public MedicalMonitorDisplay(){
panel = new MedicalMonitorPanel();
initComponents();
}
private void initComponents(){
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));
getContentPane().add(panel);
getContentPane().validate();
}
public static void main(String[] args){
EventQueue.invokeLater(new Runnable() {
public void run() {
new MedicalMonitorDisplay().setVisible(true);
}
});
}
}
但是我遇到了这个异常:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at javax.swing.JFrame.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at MedicalMonitorDisplay.initComponents(MedicalMonitorDisplay.java:53)
at MedicalMonitorDisplay.<init>(MedicalMonitorDisplay.java:40)
at MedicalMonitorDisplay$1.run(MedicalMonitorDisplay.java:63)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
报告 add() 方法有问题。怎么了?
最佳答案
这毫无意义:
add(panel, getContentPane());
删除此行并重新开始。
相反,您应该通过以下方式将面板添加到 contentPane:
getContentPane().add(panel);
如果这仍然不起作用,请告诉详细信息——如果您尝试这样做会出现什么问题?
此外,您不能在 contentPane 上调用 revalidate,除非您先将其转换为 JPanel。但是您无论如何都不需要重新验证 contentPane,因为您将在添加所有组件后调用 JFrame 上的 pack()
,这就足够了。
关于java - 如何将扩展的 jpanel 添加到 jframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11856573/