当我修改任何深度的组件树中的组件时,修改通常会立即自动显示,而不需要我为此采取任何操作。
当修改是添加新孩子时,情况并非如此 此外,如果我想使用任何适当的方法(据我理解API)强制重绘,这也没有实际效果。
只有在对现有树进行新修改 - 包括添加但仍然不可见的组件时,才会显示添加的子项。
这是一个例子,它将呈现一个带有"添加"的黑色窗口。底部的按钮。单击该按钮将不起作用。调整窗口大小或最小化将导致尽可能多的白色" XX"要显示的字符串,因为事先按下了按钮。
当然,非常希望每当按下按钮时,添加内容会立即显示 。
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Applikation
{
public static void main(String[] argumente)
{
Box dummy = new Box(BoxLayout.Y_AXIS);
JFrame window = new JFrame();
JPanel panel = new JPanel();
panel.setBackground(Color.black);
window.add(dummy);
dummy.add(panel);
JButton button = new JButton("Add");
button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e)
{
JLabel white = new JLabel("XX");
white.setBackground(Color.white);
white.setForeground(Color.white);
panel.add(white); // only visible after resizing window or switching focus to another program and back
panel.invalidate(); // does nothing
panel.repaint(); // does nothing
panel.repaint(200); // does nothing
} });
dummy.add(button);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
}
我错过了什么?
请注意,这基本上是this question的副本,但是在我的示例代码中可以看到,它的答案都不适用:它们根据经验不起作用。