【问题标题】:Why I should use a JPanel?为什么我应该使用 JPanel?
【发布时间】:2016-03-19 12:26:54
【问题描述】:

两者有什么区别:

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?真正的目的是什么?

【问题讨论】:

    标签: java swing jpanel


    【解决方案1】:

    为什么我应该使用 JPanel?

    您使用 JPanel 可以获得以下一项或多项好处:

    • 将组件组合在一起。
    • 为了更好地组织您的组件。
    • 使我们能够使用多种布局并组合它们的效果。 (例如,GridLayout 用于数字键盘,CardLayout 用于显示面板,您可以在其中切换绘图)。
    • 将大问题分解为子问题。因此,您可以专注于实现每个单独面板的属性(例如布局、尺寸、背景图像、背景颜色等),而不是在一个大框架中实现所有内容
    • 如果您有自定义面板,则可重复使用。不同的类可以使用一个通用面板。
    • 为了方便调试,因为您可以单独测试每个面板。
    • 为了可扩展性。
    • 为了可维护性。

    通常我认为 JFrame 就像现实生活中的画框,而 JPanel 就像一张白纸。我们不直接在框架上绘画。相反,我们在一张纸上作画,然后将纸插入框架中。直接在框架上绘画是可能的,但没有人这样做。

    JFrame 和 JPanel 也是如此。我们可以直接将组件添加到框架中,但是通常我们将其添加到面板中,然后将面板添加到框架中。

    【讨论】:

    • @Vinicius 你可以看看我的解决方案。
    • 与画框和纸的奇妙类比!
    【解决方案2】:

    在您的两个示例中基本上没有视觉差异,但是 UI 太差,无法展示差异。 JPanel 正是面板在现实生活中的样子,用于显示其中的东西。它通常用于包含要在给定布局中显示的不同元素。

    【讨论】:

      【解决方案3】:

      目的是将组件组合在一起。

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

      页脚面板可以在问题页面以外的其他页面中重复使用。

      如果你把它分成独立的面板,整个页面的布局更容易理解和实现。

      【讨论】:

      • 以这个网页为例。 - 嗯,请哪一个:-)
      • 这个。您正在阅读此评论时正在查看的那个。
      • 它还允许您在可能组合成单个 GUI 的不同面板中使用不同的边框和布局。 This answer 有两个例子的截图。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        您可以使用JPanel 创建用户界面的可重用构建块,并为其所有实例维护单点维护。假设您将创建一个JFrame,其中包含两个文本的差异视图。左右视图可以说是同卵双胞胎。创建两次面板并将这两个面板添加到框架上比直接将所有后续组件两次添加到框架中更容易。

        当您现在必须更改视图时,假设您想添加另一个按钮,或者您可以在面板上执行的任何操作以及两者 - 左视图和右视图将立即包含更改。

        【讨论】:

          【解决方案6】:

          将某些组件组合在一起,以便您可以在循环中操作它们的组。也许是检查一个区域内的所有文本框是否满足某个要求或完全销毁它们。

          【讨论】:

            猜你喜欢
            • 2017-07-12
            • 1970-01-01
            • 1970-01-01
            • 2014-12-20
            • 2011-04-22
            • 2011-05-16
            • 2017-04-16
            • 2010-12-22
            • 2010-09-07
            相关资源
            最近更新 更多