Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中添加更多标签_Java_Swing_Label_Jframe_Jlabel - Fatal编程技术网

在java中添加更多标签

在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

各位程序员好!我试图向JFrame添加两个JLabel,但是添加标签的第二个add方法似乎覆盖了我的第一个add方法。我尝试通过使用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
的默认布局为,默认位置为
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());//Add
frame.setLayout(新的FlowLayout())构建框架后。

考虑使用布局,Luke。我试图决定是否对建议将布局更改为
FlowLayout
的帖子进行投票。我用代码注释“暂时”和教程的两个链接决定了你的帖子+1@AndrewThompson:感谢您的反馈。已给出代码示例都是用静态方法编写的。它显示了询问者的不成熟,他正在努力学习java和swing。我的想法是,与其解释所有的细节,不如第一次向他展示如何使事情正确。因为他能够走到这一步,所以肯定能够通过下一个障碍。他只需要一些指导。这就是我给出答案时所想的。仅此而已…@AndrewThompson我也注意到了他之前关于NPE的问题,所以我相信他是一个很好的学习者,只需要正确的指导。他也能找到他的解决方案。为什么人们认为他们的代码示例比Swing教程示例更好?这不是使用Flo的好方法wLayout。您很少会将内容窗格布局设置为FlowLayout。如果您遵循教程示例,您会发现它会创建一个带有FlowLayout的单独面板,然后将面板添加到框架中,从而保留BorderLayout,以便您可以添加其他组件。此外,该示例使用InvokeLayout(…).因此,让这些教程教给人们正确的编码方法(如果有示例的话),而不是试图创建自己的不完整的编码方法。