何时使用JFrame、JLabel和JPanel

3
我一直在想什么时候应该使用JFrame和JPanel。我被教科书、面对面和通过互联网搜索告知了一些原因,但当然,我需要查看Java文档才能弄清楚JPanel具有paintComponent(Graphics)方法,这允许您指定要对对象本身执行的操作,与JFrame不同。此外,JPanels是可嵌套的,可以实现比一个容器更复杂的图形。我还发现JLabel也是一个容器(它甚至有布局!)。现在我的问题是:何时应该使用JLabel,何时应该使用JPanel?
// 我知道你可以将JLabels放在JPanel内部,并且无意中发现JPanel比JLabel更昂贵。长远来看,我计划制作一个收银员游戏,其中涉及一些轻量级容器,用于在点击后移动到客户手中的“钱”。我正在考虑使用JLabel来显示货币金额(美元和硬币),并使用JPanel作为交易的俯视图。我还考虑在“货币标签”本身上调用repaint()方法(根据我的理解,可以模拟动画)。这是一个双重问题,但您认为这是最便宜的方法吗?

3
通常情况下,JPanel 用作容器。您可以向面板添加组件(例如 JLabel、JTextField、JTable、JButton 等),然后将面板添加到框架中。如有需要,您可以使用多个面板来帮助布局 GUI。 - camickr
3
你应该只使用JFrameJDialog(或其他顶层容器)来显示其他容器(例如JPanel)。你应该尽量使用JPanel作为所有表格的基准容器,并根据需要将其他面板和控件嵌套进去。这样可以让你灵活地在任何你喜欢的顶级容器中显示你的面板/表格。 - MadProgrammer
我认为这主要是因为JLabel的设计初衷就是作为标签。它们可用作容器并具有repaint()、paintComponent()等功能,但如果您尝试通过将包含内容的字符串参数用于JLabel构造函数来标记容器中的内容(即JLabel!),可能会出现问题。另一方面,JPanel是GUI的指定部分,是一个Panel。鉴于它是一个独特的部分,自然应该给它填充内容。现在一切都有意义了! - Mike Warren
2个回答

10

大多数情况下,JPanel是一个容器,可以更好地组织内容。当您需要组织GUI组件时,应该使用JPanel并为其定义布局。您还可以嵌套JPanel等组件。JLabel没有定义在其内部显示其他组件的布局能力。


0

以下是一个应用程序示例,它会输出"Hello World!!!"(不含引号):

import javax.swing.JFrame;        
import javax.swing.JPanel;        
import javax.swing.JLabel;        
public class JFrame {        
    public static void main (strings args[]) {        
        JFrame frame = new JFrame();        
        String title = "Hello App";        
        frame.setTitle(title);        
        frame.setSize(300, 200);        
        frame.setDefaultCloseOperation        
            (JFrame.EXIT_ON_CLOSE);        
        frame.setVisible(true);        
        JPanel panle = new JPanel();        
        frame.add(panle);        
        JLabel lable = new JLabel("Hello World!!!");        
        panle.add(lable);        
    }
}

文件名为 "JFrame.java",不包括引号。

这似乎没有完全回答问题,你能否扩展一下? - GHC
为什么把类命名为 JFrame?这不会产生问题吗? - Mike Warren

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