.setBounds不适用于JLabel?

时间:2018-04-27 20:19:54

标签: java swing

我无法将.setBounds应用于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);

    }

}

(忽略非常丑陋的界限/位置,它们奇怪的具体,但它是我的教授想要的:/)

1 个答案:

答案 0 :(得分:1)

  

我无法将.setBounds应用于JLabel。它适用于我之前定义的JLabel,但完全忽略了我对边界的第二个定义。

您的两个setBounds(...)语句都会被忽略。

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

  

此外,我注意到在撤消添加两个JLabel时,“greet”标签不再出现

这是因为您要将两个组件添加到CENTER的{​​{1}}(这是框架内容窗格的默认布局管理器)。只能显示一个组件,因此只能添加最后一个组件。

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

默认布局管理器是FlowLayout