当前位置: 首页 > 知识库问答 >
问题:

Java Swing-JPanel vs JComponent

东方淇
2023-03-14

我在玩Java Swing,当谈到JPanel和JComponent时,我真的很困惑。根据CoreJava第一卷(cay horstmann):

有些程序员宁愿扩展JPanel类,而不是扩展JComponent。JPanel是一个可以包含其他组件的容器,但也可以在其上涂漆。只有一个区别。面板是不透明的,这意味着它负责绘制其边界内的所有像素。实现这一点的最简单方法是调用super,用背景色绘制面板。每个面板子类的paintComponent方法中的paintComponent:

class NotHelloWorldPanel extends JPanel {
  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    . . . // code for drawing will go here
  }
}

我知道什么是不透明的。他所说的“面板不透明”是什么意思。。负责绘制边界内的所有像素?如果我读对了,它说一个面板将在其边界内绘制自己的区域。。JComponent不也是这样吗?

底线是我看不出JPanel和JComponent之间的区别。有没有一个简单的例子可以让我真正看到它?

任何帮助都将不胜感激

共有1个答案

锺离俊雄
2023-03-14

JComponent不需要绘制其绑定中的所有像素。它可能会留下一些透明的部分,以便您可以看到其背后的组件。

JPanel需要绘制所有像素。

当然,如果你不叫super。油漆组件(…) 方法在任何一种情况下,它们或多或少都是等价的,因为您随后抛出了JPanel将绘制整个面板的保证。

简而言之,区别在于现有的方法(即绘制组件)。

编辑:

用JComponent实现的ball类的示例如下:

(这对JPanel不起作用,因为JPanel不透明,而且球的背景是方形的。你不能称之为super.paintComponent,但一般来说你应该这样做,否则你就破坏了组件的本质。如果我把一个JPanel传给某个东西,他们希望它是一个JPanel,而不是一个像JC一样被黑客攻击的JPanel。)(组成部分)

public class Ball extends JComponent
{
    public Ball(int x, int y, int diameter)
    {
        super();
        this.setLocation(x, y);
        this.setSize(diameter, diameter);
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillOval(0, 0, width, height);
    }
}

 类似资料:
  • 我很好奇,在放置组件时,如何使用miglaway在网格上均匀分布组件: 例如,如果我在一个按钮组中放置四个JRadioButton以跨越3行2列(2,3),然后放置三个JButton,则分布的权重是不相等的,我最终会得到以下结果: 如图所示,A和B的大小相同,C保留剩余的空间:我希望A、B、C在垂直方向上等于三分之一。 如果这在GridBagLayout中是可能的,我也可以利用它,但是我在任何一种

  • 我创建了一个摇摆图形用户界面和一个使用JavaFX的图形。我想通过点击摇摆图形用户界面上的按钮来打开图形。我的代码在下面。谢谢你的帮助。 这就是我必须从swing GUI打开FX GUI的内容。 外汇类

  • 我想用JavaSwing创建以下GUI。 由于我对Java Swing没有足够的经验,所以我不确定如何准确地重新创建该GUI。 我尝试过使用GridLayout,如下所示: 我已经尝试过其他的布局管理器,但是由于我缺乏经验,我无法得到任何与我想要实现的图形用户界面相类似的东西。 我可能不得不使用GridBagLayout,但我已经尝试过了,根本无法完成任何事情。我不确定如何确切地使用GridBag

  • 嘿,伙计们,我正在制作这个游戏,我想知道如何在右边制作另一个专栏。你会从视觉上更好地理解: 这就是我现在做的: 但是如果我再加一个按钮,它就会垂直向下。我如何使它水平到中间,这样我就可以使我的井字游戏。 代码:

  • 我正在开发一个swing应用程序(让我们忽略为什么)。 我需要做一个自定义设计的滚动条。到目前为止还不错,我实现了我的ScrollBarUI后代-我有自定义按钮,自定义拇指,自定义轨道...除了按钮周围的区域-我在那里添加了一些填充,我想把我所有的滚动条包装成一个圆角矩形。 由于我在ScrollBarUI中没有找到这样做的方法,我决定扩展JScrollPane(扩展那里使用的ScrollBar,这

  • 当我尝试运行一个新的Swing应用程序时,我遇到了一些重大问题。我使用的是NetBeans 8.1、JDK版本1.8和OS Windows 10。 所以每次我试图打开一个新的Swing项目(不管它是应用项目还是EA),并且我运行它,NetBeans都会正确部署它,但是Swing窗口没有打开,在NetBeans的状态栏中它只是显示正在运行。我等了几分钟,然后我不得不停止构建,因为什么都没发生。当我在

  • 这是我当前的目录结构(包含在目录中): 基本上来自,我正在尝试访问。 我尝试了很多变体来工作,现在我只有: 我尝试改变路径使用,使用函数,但似乎没有工作。 当我使用生成jar并运行jar文件时,它不会显示图像。 我执行

  • 我正在尝试使用JavaSwing为数学方程创建一个GUI。 最初,我开始使用一个简单的余弦函数,并创建了GUI,它工作正常。这是我的余弦函数程序: 这个程序工作正常,我可以在摇摆图形用户界面上得到cos图。 现在我尝试扩展这个程序来支持方程-其中的范围从,并且的值是