JLabel 不会显示在 JFrame 中
JLabel will not Display in JFrame
如果 JLabel 只是一个字符串,该程序将完美运行并打印出 JLabel,但如果我尝试使用 ImageIcon,则不会显示任何内容。
这里是邪恶的class:
public class Window extends JFrame{
JPanel panel;
ImageIcon imgIcon;
JLabel label;
public Window(String name){
super(name);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationByPlatform(true);
//addKeyListener(new KeyboardInput());
panel = new JPanel();
panel.setLayout(null);
imgIcon = new ImageIcon("rorschach.jpg");
label = new JLabel();
label.setIcon(imgIcon);
label.setLocation(0,0);
label.setSize(label.getPreferredSize());
panel.add(label);
add(panel);
setVisible(true);
}
public static void main(String[] args){
Window window = new Window("test");
}
}
我也尝试过将其更改为:
label = new JLabel(imgIcon);
但这也没有用
换句话说,"setLocationByPlatform" 行的作用是什么?
是的,它与您上一个问题重复。您看到了 3 个使用空布局并动态更改图像位置的工作示例。
如果删除行:
JButton left = addMotionSupport( component );
从前两个示例中的任何一个,您就得到了您想要的,一个带有面板的框架使用空布局,在位置 (100, 100) 处有一个标签。
在这些示例中,只有包含布局的面板使用了空布局。然后代码在标签上使用了setSize()和setLocation()方法。
在此处的代码中,您为包含标签的面板设置了空布局,但您也将框架设置为使用空布局,这导致了问题。
不仅如此,在您设置大小和位置后,您可以使用 setBounds() 方法覆盖这些值,并且框架的 width/height 将为 (0, 0),因此标签的大小将是 (0, 0) 所以没有什么可画的。
同样,这在 3 个示例中没有完成。遵循示例中的代码。示例中的代码还在 EDT 上创建了 GUI 组件,这就是所有 GUIS 的创建方式。
如果 JLabel 只是一个字符串,该程序将完美运行并打印出 JLabel,但如果我尝试使用 ImageIcon,则不会显示任何内容。
这里是邪恶的class:
public class Window extends JFrame{
JPanel panel;
ImageIcon imgIcon;
JLabel label;
public Window(String name){
super(name);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationByPlatform(true);
//addKeyListener(new KeyboardInput());
panel = new JPanel();
panel.setLayout(null);
imgIcon = new ImageIcon("rorschach.jpg");
label = new JLabel();
label.setIcon(imgIcon);
label.setLocation(0,0);
label.setSize(label.getPreferredSize());
panel.add(label);
add(panel);
setVisible(true);
}
public static void main(String[] args){
Window window = new Window("test");
}
}
我也尝试过将其更改为:
label = new JLabel(imgIcon);
但这也没有用
换句话说,"setLocationByPlatform" 行的作用是什么?
是的,它与您上一个问题重复。您看到了 3 个使用空布局并动态更改图像位置的工作示例。
如果删除行:
JButton left = addMotionSupport( component );
从前两个示例中的任何一个,您就得到了您想要的,一个带有面板的框架使用空布局,在位置 (100, 100) 处有一个标签。
在这些示例中,只有包含布局的面板使用了空布局。然后代码在标签上使用了setSize()和setLocation()方法。
在此处的代码中,您为包含标签的面板设置了空布局,但您也将框架设置为使用空布局,这导致了问题。
不仅如此,在您设置大小和位置后,您可以使用 setBounds() 方法覆盖这些值,并且框架的 width/height 将为 (0, 0),因此标签的大小将是 (0, 0) 所以没有什么可画的。
同样,这在 3 个示例中没有完成。遵循示例中的代码。示例中的代码还在 EDT 上创建了 GUI 组件,这就是所有 GUIS 的创建方式。