Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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 为什么在构造的JPanel中,组件的某些属性被表示,而其他属性则没有?_Java_Swing_Jframe_Jpanel - Fatal编程技术网

Java 为什么在构造的JPanel中,组件的某些属性被表示,而其他属性则没有?

Java 为什么在构造的JPanel中,组件的某些属性被表示,而其他属性则没有?,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我正在开始一个程序,在这个程序中,我构建了一个JFrame,并使用我创建的另一个名为StartPanel的类向它添加了一个JPanel。当JPanel构造时,它会添加StartPanel类中定义的JLabel。然后将此面板添加到JFrame。标签的某些属性在GUI中表示(它将自己添加到面板中,可以在面板上添加红色边框,可以更改文本),但有些属性不是。例如,我无法更改标签的位置或大小 到目前为止,我读到的关于这个问题的所有内容(我认为)都同意我的方法,或者说没有太多的澄清。此外,我还为StartP

我正在开始一个程序,在这个程序中,我构建了一个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);

    }
}
最后,产品图片:


非常感谢你的帮助

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

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

JFrame的默认布局是BorderLayout。BorderLayout获取它的第一个子元素(在本例中为JPanel),将其放置在中心并拉伸它以占据容器的整个宽度(在本例中为JFrame)。这就是为什么你的StartPanel占据了JFrame的全部尺寸


JPanel的默认布局是FlowLayout。在流布局中,每个子元素(在本例中为JLabel)都添加到中心顶部。当添加更多子项时,它们将在一行中彼此相邻地添加。FlowLayout允许其子对象占据他们想要的大小。在这种情况下,JLable只需要一个小矩形来显示文本,因此这就是JLabel的大小

好的,谢谢。这很好地解决了我的问题。如果您不介意的话,接下来的问题是,您如何指定确切的位置?如果容器已经有了布局,那么组件的“.setLocation”之类的方法的用途是什么?很高兴它有帮助!我认为以下问题将帮助您获得准确的定位: