3

很长一段时间以来,我一直在想何时使用 JFrame 和 JPanel。教科书、面对面和互联网搜索告诉我一些原因,但当然,我查看了 Java 文档才发现 JPanel 具有paintComponent(Graphics); 方法,它允许您指定对对象本身执行的操作,这与 JFrame 不同。此外,JPanels 是可嵌套的,允许比仅使用一个容器实现的更复杂的图形。我还偶然发现了 JLabel 也是一个容器的事实。(它甚至有一个奇怪的布局!)现在我的问题是:我应该什么时候使用 JLabel,什么时候应该使用 JPanel?

//我知道您可以将 JLabel 放在 JPanel 中,并且偶然发现 JPanel 比 JLabel 更昂贵。从长远来看,我计划制作一个收银游戏,其中包含一些轻量级的“钱”容器,当点击时,“钱”会移到客户的手上。我正在考虑将 JLabels 用于货币金额(美元钞票和硬币),并将 JPanel 用作交易的俯视图。我还在考虑在“货币标签”本身上调用 repaint() (据我了解,它可以模拟动画)。这是一个双重问题,但您认为这是最便宜的方法吗?

4

2 回答 2

10

在大多数情况下,JPanel 是一个允许更好组织的容器。当您需要组织 gui 的组件时,您应该使用 JPanel 并为 JPanel 定义布局。您还可以将 JPanel 相互嵌套,等等。JLabel 不具备为要在 JLabel 中显示的更多组件定义布局的能力。

于 2013-04-30T14:05:19.447 回答
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”,不带引号。

于 2013-11-29T15:15:47.530 回答