在java中添加更多标签
各位程序员好!我试图向JFrame添加两个JLabel,但是添加标签的第二个add方法似乎覆盖了我的第一个add方法。我尝试通过使用2个不同的标签变量和使用setLocation方法来解决这个问题,为每个标签提供不同的坐标点。但我似乎无法解决它。为什么我不能在程序中添加两个标签?顺便说一下,我没有收到任何错误。似乎更像是我无法解决的逻辑错误 以下是我当前的代码:在java中添加更多标签,java,swing,label,jframe,jlabel,Java,Swing,Label,Jframe,Jlabel,各位程序员好!我试图向JFrame添加两个JLabel,但是添加标签的第二个add方法似乎覆盖了我的第一个add方法。我尝试通过使用2个不同的标签变量和使用setLocation方法来解决这个问题,为每个标签提供不同的坐标点。但我似乎无法解决它。为什么我不能在程序中添加两个标签?顺便说一下,我没有收到任何错误。似乎更像是我无法解决的逻辑错误 以下是我当前的代码: import javax.swing.*; public class test { private static JLa
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
的默认布局为,默认位置为BorderLayout.CENTER
为方便起见,BorderLayout
将不存在字符串规范解释为常量CENTER
实际上,第二个标签取代了第一个。请仔细阅读。框架的默认布局管理器是BorderLayout。您的代码正在将两个标签添加到布局的中心。这是不可能的。BorderLayout上的每个位置只能包含一个组件(可以是包含其他组件的JPanel)
您需要使用不同的布局管理器。如果不知道您的确切要求,就很难建议使用哪个布局管理器
另外,去掉所有这些静态方法。Swing教程中有很多示例,可以让您更好地了解如何构造程序。按照下面的方法更改代码
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();
}
private static void initializeFrame(){
JFrame=新JFrame();
frame.setLayout(新的FlowLayout());//Addframe.setLayout(新的FlowLayout())构建框架后。
。考虑使用布局,Luke。我试图决定是否对建议将布局更改为FlowLayout
的帖子进行投票。我用代码注释“暂时”和教程的两个链接决定了你的帖子+1@AndrewThompson:感谢您的反馈。已给出代码示例都是用静态方法编写的。它显示了询问者的不成熟,他正在努力学习java和swing。我的想法是,与其解释所有的细节,不如第一次向他展示如何使事情正确。因为他能够走到这一步,所以肯定能够通过下一个障碍。他只需要一些指导。这就是我给出答案时所想的。仅此而已…@AndrewThompson我也注意到了他之前关于NPE的问题,所以我相信他是一个很好的学习者,只需要正确的指导。他也能找到他的解决方案。为什么人们认为他们的代码示例比Swing教程示例更好?这不是使用Flo的好方法wLayout。您很少会将内容窗格布局设置为FlowLayout。如果您遵循教程示例,您会发现它会创建一个带有FlowLayout的单独面板,然后将面板添加到框架中,从而保留BorderLayout,以便您可以添加其他组件。此外,该示例使用InvokeLayout(…).因此,让这些教程教给人们正确的编码方法(如果有示例的话),而不是试图创建自己的不完整的编码方法。