我使用以下代码在JPanel中放置标签,但JPanel没有出现(相反,只显示空白的JFrame)。
以下是创建JFrame实例的类。
import java.awt.FlowLayout;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args){
WindowContents window = new WindowContents();
window.setSize(600, 400);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
以下是设置JFrame内容的类。
import javax.swing.*;
import java.awt.*;
public class WindowContents extends JFrame {
JLabel label1;
JLabel label2;
JLabel label3;
JPanel panel1;
public WindowContents(){
super("Label Display 2.0");
panel1 = new JPanel();
panel1.setLayout(new FlowLayout(FlowLayout.CENTER, 40, 40));
panel1.setVisible(true);
label1 = new JLabel("Label1");
panel1.add(label1);
label2 = new JLabel("Label2");
panel1.add(label2);
label3 = new JLabel("Label3");
panel1.add(label3);
}
}
有没有想法如何让JPanel内容出现?谢谢。
答案 0 :(得分:4)
如何显示JPanel内容?
在框架中添加面板。
public WindowContents(){
super("Label Display 2.0");
panel1 = new JPanel();
...
add(panel1);
}
注意:
根据组件的首选尺寸,使用符合组件的frame.pack()
代替frame.setSize()
。
无需致电panel1.setVisible(true);
添加完所有组件后,最后只需致电frame.setVisible(true)
。
Favor Composition over inheritance。而不是将JFrame
扩展为WindowContents
类的成员。
使用SwingUtilities.invokeLater()或EventQueue.invokeLater()确保EDT已正确初始化。
答案 1 :(得分:0)
您尚未将面板添加到框架中,以下是您的类WindowsContents结束的方式:
class WindowContents extends JFrame {
JLabel label1;
JLabel label2;
JLabel label3;
JPanel panel1;
public WindowContents(){
super("Label Display 2.0");
panel1 = new JPanel(new FlowLayout(FlowLayout.CENTER, 40, 40));
label1 = new JLabel("Label1");
panel1.add(label1);
label2 = new JLabel("Label2");
panel1.add(label2);
label3 = new JLabel("Label3");
panel1.add(label3);
add(panel1);
}
}
干杯