为什么我应该使用JPanel?

5

这两者有什么区别:

public class Test {

    public static void main(String[] args) {
        JButton button= new JButton("1");
        button.setVisible(true);
        JPanel panel= new JPanel();
        panel.add(button);
        panel.setVisible(true);
        JFrame frame = new JFrame();
        frame.add(panel);
        frame.setVisible(true);
        frame.pack();

    }
}

并且

public class Test {

    public static void main(String[] args) {
        JButton button= new JButton("1");
        button.setVisible(true);
        JFrame frame = new JFrame();
        frame.add(button);
        frame.setVisible(true);
        frame.pack();

    }
}

我知道JPanel是GUI组件的容器,但我真的看不出它的实用性。当然,我可能非常错误,因为我刚开始学Swing,那么...我为什么要使用JPanel?它的真正目的是什么?

6个回答

8
我为什么要使用JPanel?
您使用JPanel可以获得以下一个或多个优点:
- 将组件分组在一起。 - 更好地组织您的组件。 - 允许我们使用多个布局并结合它们的效果(例如,数字键盘使用GridLayout,显示面板使用CardLayout,可切换图形)。 - 将大问题分解为子问题。因此,您可以将每个单独面板的属性(例如布局、尺寸、背景图像、背景颜色等)集中实现,而不是在一个大窗体中实现所有内容。 - 如果您有定制的面板,则可重用。一个常见的面板可以由不同的类使用。 - 易于调试,因为可以单独测试每个面板。 - 可扩展性。 - 可维护性。
通常,我将JFrame看作是现实生活中的画框,JPanel就像一张空白纸。我们不会直接在画框上绘画。相反,我们会在一张纸上绘画,然后将纸插入画框。虽然可以直接在画框上绘画,但实际上没有人这样做。
同样,JFrame和JPanel也是如此。我们可以直接将组件添加到JFrame中,但通常情况下,我们会将组件添加到面板中,然后再将面板添加到JFrame中。

@Vinicius 你可以看一下我的解决方案。 - user3437460
1
画框和纸张的比喻非常棒! - Ray

3

你的两个例子在视觉上基本没有区别,但UI太差了,不能展示差异。一个 JPanel 就像现实生活中的面板一样,用于显示其内部的内容。通常用于包含不同元素,以便按照给定布局进行显示。


2

这样做的目的是将组件分组在一起。

以这个网页为例。您可以想象一个中心面板,问题和答案以垂直方式布置,右侧面板包含其他面板:博客、工作公告、相关问题和最后一个南面板的页脚。

页脚面板可以在不同于问题页面的其他页面上重复使用。

如果将整个页面划分为独立的面板,整个页面的布局就更容易理解和实现。


看看这个网页,比如说呢?- 嗯,哪一个呢? :-) - mKorbel
这个。你正在阅读这条评论时看到的那个。 - JB Nizet
它还允许您在可能合并为单个GUI的不同面板中使用不同的边框和布局。此答案有一个示例的屏幕截图。 - Andrew Thompson

2

您可以将多个JPanel放在JFrame中。 JPanel是其他组件的容器,并且可以通过逻辑功能对其进行分组。


2
你可以使用 JPanel 来创建可重复使用的用户界面构建模块,并为所有实例维护单个维护点。比如说,你要创建一个包含两个文本的差异视图的 JFrame,左右视图是相同的。在框架中添加这两个面板而不是直接将所有后续组件添加到框架中两次会更容易一些。
现在每当你需要更改视图时,比如说你想添加另一个按钮,或者其他任何东西,你只需在你的面板上进行更改,左右视图都会立即包含这些更改。

2
将某些组件分组,以便您可以在循环中操作它们的组。 可能是为了检查区域内的所有文本框是否符合特定要求或将其完全删除。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接