我有一个包含多个不透明自定义组件的JPanel。现在,我想通过覆盖paintComponent()方法在这些组件上方绘制一些内容。我的问题是绘制的内容被放置在嵌入式组件的后面,并且由于它们是不透明的,被它们覆盖了。
有没有办法让绘制的内容显示在组件的上方?
这里是我正在尝试做的简短示例:
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()
中。同时非常感谢您建议使用玻璃窗格,我会看看是否有必要。 - MoritzpaintComponent()
应该用于自定义绘制,而不涉及其内容。但在我们的情况下并非如此。在我们的情况下,面板包含子元素,它们始终会显示在其上方,因为它们是在父元素完成绘制后绘制的。出于这个简单的原因,为了在子元素之上绘制,我们必须在paintChildren()
方法中调用它。 - Boro