Java .setBounds不适用于JLabel?

Java .setBounds不适用于JLabel?,java,swing,Java,Swing,我在申请上遇到了困难。给一个JLabel带来了挫折。它适用于我之前定义的JLabel,但完全忽略了我对边界的第二个定义。我把宽度和高度都弄乱了一点,看看它是否影响了JLabel,事实并非如此。此外,我还注意到,当反向添加两个JLabel时,问候标签不再出现。这是我的代码,非常感谢您的帮助:^ import java.awt.Color; import java.awt.Font; import javax.swing.*; public class Fashion { static

我在申请上遇到了困难。给一个JLabel带来了挫折。它适用于我之前定义的JLabel,但完全忽略了我对边界的第二个定义。我把宽度和高度都弄乱了一点,看看它是否影响了JLabel,事实并非如此。此外,我还注意到,当反向添加两个JLabel时,问候标签不再出现。这是我的代码,非常感谢您的帮助:^

import java.awt.Color;
import java.awt.Font;

import javax.swing.*;

public class Fashion {
    static JFrame f = new JFrame("Game Title");
    static Font h1 = new Font("courier", Font.PLAIN, 30);
    static Font h2 = new Font("courier", Font.PLAIN, 17);

    public static void main(String[] args) {
        f.setSize(1400, 900);
        f.setResizable(false);
        f.getContentPane().setBackground(Color.WHITE);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        JLabel title = new JLabel("Welcome!");
        title.setFont(h1);

        JLabel greet = new JLabel("Lets get started.");
        greet.setFont(h2);

        title.setBounds(225,1,1000,100);
        greet.setBounds(350,200,1,1);

        f.add(title);
        f.add(greet);


        f.setVisible(true);

    }

}
忽略非常难看的边界/位置,它们奇怪地具体,但这正是我的教授想要的:/

我在申请上遇到了困难。给一个JLabel带来了挫折。它适用于我之前定义的JLabel,但完全忽略了我对边界的第二个定义

你的两个挫折。。。语句被忽略

Swing使用布局管理器设置组件的大小和位置。即使尝试设置边界,布局管理器也会根据布局管理器的规则覆盖尺寸/位置值

此外,我还注意到,当反向添加两个JLabel时,问候标签不再出现

这是因为您正在将这两个组件添加到BorderLayout的中心,BorderLayout是框架内容窗格的默认布局管理器。只能显示一个组件,因此只有最后添加的组件可见

解决问题的方法是学会正确使用布局管理器。阅读上Swing教程中的部分,以获取更多信息和示例,帮助您入门


默认布局管理器是FlowLayout

,那么第一个.setBounds显示正确只是一个意外吗?我可以用指定的坐标和宽度等改变位置,不管布局如何…所以第一个.挫折显示正确只是一个意外吗?对您必须深入了解组件的Swing绘制工作原理的细节。基本上,组件需要一个尺寸/位置才能进行喷漆。在您的案例中,BorderLayout只为添加的第二个组件提供了一个大小/位置,而忽略了第一个组件。然而,Swing以相反的顺序绘制组件,它们被添加到名为zOrder的面板中,因此实际上,greet组件被绘制,然后标题组件被绘制在顶部。因此,实际上您的回答是正确的。由于您的代码顺序和组件添加到面板的方式,您的第一个挫折。。。这项声明确实起了作用。然而,我的答案是,根本不要使用挫折,让布局经理完成他们的工作,这样你就不会得到令人困惑的结果。好的,谢谢!那就更有意义了。。我首先使用它的唯一原因是因为我的教授建议使用它来增加面板的多功能性或类似的功能,但我肯定会尝试绕过它。再次感谢!