Hello其他程序员!我正在尝试将两个JLabel添加到JFrame,但添加标签的第二个添加方法似乎覆盖了我的第一个添加方法。我尝试使用2个不同的标签变量并使用setLocation方法为每个标签提供不同的坐标点来解决此问题。但我似乎无法解决它。为什么我不能在程序中添加两个标签?顺便说一下,我没有收到任何错误。似乎更像是一个我似乎无法解决的逻辑错误。
这是我目前的代码:
import javax.swing.*;
public class test {
private static JLabel label;
private static JLabel label1;
public static void main(String[] args){
initializeLabel();
initializeImage();
initializeFrame();
}
private static void initializeLabel(){
label = new JLabel();
label.setText("hi");
label.setLocation(54,338);
}
private static void initializeImage(){
label1 = new JLabel();
label1.setText("sss");
label1.setLocation(55, 340);
}
private static void initializeFrame(){
JFrame frame = new JFrame();
frame.add(label1);
frame.add(label);
frame.setVisible(true);
}
}// class
答案 0 :(得分:7)
按照以下方式更改您的代码。
private static void initializeFrame(){
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout()); // <-- you need this for now
frame.add(label1);
frame.add(label);
frame.setVisible(true);
// optional, but nice to have.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
}
请在此处详细了解秋千布局:A Visual Guide to Layout Managers
答案 1 :(得分:4)
阅读Layout Managers。框架的默认布局管理器是BorderLayout。您的代码将两个标签添加到布局的CENTER中。这是不可能的。 BorderLayout上的每个位置只能包含一个组件(它可以是带有其他组件的JPanel)。
您需要使用其他布局管理器。在不知道您的确切要求的情况下,很难建议使用哪个布局管理器。
此外,摆脱所有这些静态方法。 Swing教程有很多例子可以帮助您更好地了解如何构建程序。
答案 2 :(得分:3)
JFrame
的默认布局为BorderLayout
,默认位置为BorderLayout.CENTER
。
为方便起见,
BorderLayout
解释缺少字符串规范与常量CENTER
相同。
实际上,第二个标签取代了第一个标签。
答案 3 :(得分:0)
在构建框架后添加frame.setLayout(new FlowLayout());
。