java - 什么是父组件,什么是子组件?

标签 java swing

当谈到在 Swing 中绘画时,我不断听到这两个术语,但是,我不确定哪个是哪个。

据我了解,子组件是屏幕上已经存在的组件(可以是 JButtonJFrame 或自定义绘画)。父组件是接下来要添加/绘制的组件。 (因此,如果我们在绘制时重写 paintChildren() 方法,屏幕上已经存在的组件将不再出现)。

有人可以帮我验证这一点吗,因为我的头开始因为思考而受伤,哈哈

最佳答案

enter image description here

其含义可以概括为:

  • 父组件内部还有其他组件。
  • 子组件包含在另一个组件中。

这是创建上述图像的简单源代码。

import java.awt.*; // package import for brevity
import javax.swing.*;  
import javax.swing.border.TitledBorder;

public class ParentAndChildComponent {

    public JComponent getGUI() {
        JPanel p = new JPanel(new GridLayout(1,0,20,20));
        p.setBorder(new TitledBorder("Panel: Child of frame/Parent of labels"));

        for (int ii=1; ii<4; ii++) {
            JLabel l = new JLabel("Label " + ii + ": Child of panel & frame");
            p.add(l);
        }

        return p;
    }

    public static void main(String[] args) {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame("Frame: Parent of all other components");

                f.setContentPane(new ParentAndChildComponent().getGUI());

                f.pack();
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setLocationByPlatform(true);
                f.setVisible(true);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}
<小时/>

..if we override the paintChildren() method when painting, the components that were already on the screen don't appear any more).

不要乱用paintChildren()方法。在十多年的 Swing 开发(包括许多自定义绘制示例)中,我需要重写它 0 次。

对于从 JComponent 扩展的 Swing 组件(通常是 JPanel)中的自定义绘制,我们会:

  • 重写 paintComponent(Graphics) 方法以进行自定义绘制。
  • 调用 super.paintComponent(Graphics) 方法以确保绘制自定义组件的任何子项或边框

关于java - 什么是父组件,什么是子组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25252853/

相关文章:

java - 对绘制的对象进行动画处理

Java图像缩放提高质量?

java - 删除 JTable 位的所有行,其占用空间仍然存在

Java:在不重新绘制的情况下调整组件大小?

java - Windows 操作系统环境下 C++ 应用程序与 Java 应用程序之间的进程间通信

java - 我正在尝试使用 MouseMotionListener 将数据从 JTable 打印到命令行

java - 如何对内容进行分组并将其作为一个对象添加到 ArrayList 中?

java - 在没有循环的情况下使用给定数量的空值初始化 List<T>?

java - 如何仅使用公共(public)函数和成员生成可分发的库 jar?

Java 添加文本字符串到 Rectangle2D