【发布时间】:2019-06-06 18:26:29
【问题描述】:
我将JLabel 和我自己的Panels 类添加到JFrame。顺便说一句,我创建的 Panels 类继承自 JPanel。
我的代码只显示了两个组件之一,JLabel 或 JPanel 继承类。当我添加 setLayout() 行时,JLabel 会显示,而当我不添加 JPanel 继承类时会显示。这是怎么回事?
public class TetisFrame extends JFrame{
private final static int FRAME_WIDTH = 400;
private final static int FRAME_HEIGHT = 720;
private static Panels panels;
public TetisFrame(){
setTitle("Tetis");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(FRAME_WIDTH + 200, FRAME_HEIGHT + 50);
setResizable(false);
setLocationRelativeTo(null);
JLabel points = new JLabel("Score: ");
points.setBounds(450, 360, 100, 30);
add(points);
panels=new Panels();
add(panels);
addKeyListener(panels);
setLayout(null);
setVisible(true);
}
public static void main(String[] args) {
new TetisFrame();
}
}
【问题讨论】:
-
1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2) Java GUI 必须在不同的语言环境中使用不同的 PLAF 在不同的操作系统、屏幕尺寸、屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或 combinations of them 以及 white space 的布局填充和边框。
-
“这是怎么回事?” 默认情况下,
JFrame具有BorderLayout。边框布局在每个布局约束中只能容纳一个组件。
标签: java swing jframe jpanel jlabel