3
我有一个JPanel填充了几个不透明的自定义组件。现在我想通过重写paintComponent()方法在这些组件上绘制一些东西。我的问题是,涂漆的东西放在嵌入式组件后面,因为它们是不透明的,所以被它们覆盖。在JPanel中的不透明组件上绘制自定义内容
有什么办法让绘画出现在组件的顶部?
这里是什么,我试图做一个简单的例子:
public class DrawOnTop {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame("Draw on top");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MyPanel());
f.pack();
f.setVisible(true);
}
});
}
}
class MyPanel extends JPanel {
public MyPanel() {
setLayout(new BorderLayout(3, 3));
add(new JButton("Button 1"), BorderLayout.NORTH);
add(new JButton("Button 2"), BorderLayout.CENTER);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.drawLine(0, 0, getVisibleRect().width, getVisibleRect().height);
}
}
感谢,这正是我一直在寻找。我已经在几个地方看过,定制绘画应该总是**在paintComponent()中发生。还非常感谢您使用玻璃窗格的建议。我会看看这是否有必要。 – Moritz
@Moritz是的我知道你指的是什么。我同意'paintComponent()'应该用于与其内容没有任何关系的自定义绘画。我们的情况并非如此。在我们的情况下,面板包含孩子,因为他们在父母完成后绘画,孩子总是会在其上面展示。出于这个简单的原因,为了绘制'over'子节点,我们必须在'paintChildren()'方法中调用它。 – Boro