java - 为什么在构造的 JPanel 中表达了组件的某些属性,而没有表达其他属性?

标签 java swing jframe jpanel

我正在开始一个程序,在其中构造一个 JFrame 并使用我创建的另一个名为 StartPanel 的类向其中添加一个 JPanel。当 JPanel 构造时,它会添加 StartPanel 类中定义的 JLabel。然后将该面板添加到 JFrame。标签的某些属性在 GUI 中表达(它将自身添加到面板中,可以在其上添加红色边框,可以更改文本),但有些属性则不然。例如,我无法更改标签的位置或大小。

到目前为止,我读到的有关该问题的所有内容(我认为)都同意我的方法,或者还没有澄清太多。此外,我还向 StartPanel 和标签添加了边框,以可视化问题并确认标签没有改变其大小。我无法调整标签的大小或位置属性。如何解决这个问题并控制标签的属性?

此外,我知道我可以通过不通过单独的类构造面板并在同一函数中声明标签来规避整个问题。然而,这个项目将相当大,所以我更希望有一个类系统,我可以根据需要构建一个面板。

编码时间:

我使用类构造框架和面板的位置:

public class StartFrame {

    public StartFrame() {
        JFrame frame = new JFrame("Constuctor tests");
        frame.setSize(800, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        JPanel startPanel = new StartPanel();  //This is where I construct the panel
        startPanel.setVisible(true);
        startPanel.setBorder(BorderFactory.createLineBorder(Color.blue)); //Visualize the panel
        frame.add(startPanel);

    }

}

StartPanel 类:

public class StartPanel extends JPanel {

    public StartPanel() {
        JLabel label = new JLabel("This is a label");
        label.setLocation(100, 100); //It is not at 100,100
        label.setSize(200, 100); //It is not a box this large
        label.setBorder(BorderFactory.createLineBorder(Color.red)); //Done as to visualize it
        label.setVisible(true);
        add(label);

    }
}

最后是产品图片: The final product

非常感谢您的帮助!

最佳答案

您可以通过布局管理器控制元素的大小和布局。您可以阅读all about it here

为了帮助您开始,让我们看看为什么您的屏幕看起来像这样。

JFrame 的默认布局是 BorderLayout。 BorderLayout 获取它的第一个子级(在本例中为 JPanel),将其放置在中心并拉伸(stretch)它以占据容器(在本例中为 JFrame)的整个宽度。这就是 StartPanel 占据 JFrame 整个大小的原因。 Here you can read more about how to use the border layout.

JPanel 的默认布局是 FlowLayout。在流布局中,每个子元素(在本例中为 JLabel)都添加到中心顶部。添加更多子项时,它们会并排添加到同一行中。 FlowLayout 允许其子级占据它们想要的大小。在这种情况下,JLable 仅需要一个小矩形来显示文本,因此这就是 JLabel 的大小。 Go here to learn more about the FlowLayout.

关于java - 为什么在构造的 JPanel 中表达了组件的某些属性,而没有表达其他属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61164038/

相关文章:

java - 如何在android中用逗号解析JSON?

java - 可以对不同的方法使用不同的 log4j 附加程序吗?

java - 从 GUI 保存用户设置

java - 有 2 个按钮影响同一个标签

java - 如何在 Java 中设置自定义光标?

java - 使用 JButton 填充 JList 并使用 Jlist 上的 DoubleClick 填充 JTextField

java图形更新

java - 已排序的 JTable rowAtPoint(Point) 返回值

Java "Create New"窗口

Java:将类导入到 Jframe