gpt4 book ai didi

java - 不可见的组件是否仍然绘制(paint)?

转载 作者:行者123 更新时间:2023-12-04 13:43:23 26 4
gpt4 key购买 nike

似乎显而易见的答案是否定的,但我还是想找出答案。

如果我的面板中有很多复杂的组件,需要一段时间才能加载,然后在顶部有另一个非常基本的面板,完全覆盖它,背景面板是否仍会在 paint 方法中绘制?

最佳答案

是的,您可以在另一个组件之上绘制组件。顶部面板下方显示的内容取决于顶部面板的不透明度。

参见 Glass Pane例子。另请查看 How to Use Layered Panes 示例的目录。

编辑:

Seems like the obvious answer is no

我现在更好地理解了这个问题。您问的是即使在复杂面板的顶部绘制了不透明面板,复杂组件的绘制是否仍会被绘制。答案是肯定的,在绘制顶部组件之前先绘制底部组件。

每个 Swing 组件负责绘制其子组件。通常组件以二维布局,但像 OverlayLayout 这样的布局确实允许您在另一个组件之上绘制组件。在这种情况下,所有组件都被绘制,除非您使组件不可见。简单示例:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

public class OverlayPanel extends JPanel
{
private static int ctr = 1;

public OverlayPanel(String name)
{
setName( name );
add( new JLabel("Label " + ctr++) );
}

@Override
protected void paintComponent(Graphics g)
{
System.out.println("Painting: " + getName());
super.paintComponent(g);
}

private static void createAndShowUI()
{
JPanel panel = new JPanel();
panel.setLayout( new OverlayLayout(panel) );

panel.add( new OverlayPanel("first") );
panel.add( new OverlayPanel("second") );

JPanel third = new OverlayPanel("third");
third.setVisible(false);
panel.add(third);

JFrame frame = new JFrame("OverlayPanel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( panel );
frame.pack();
frame.setLocationByPlatform( true );
frame.setVisible( true );
}

public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}

关于java - 不可见的组件是否仍然绘制(paint)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22205251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com