我有一个 JFrame,我在其中使用重写 paint
方法来显示一些图形。我还想向其中添加一个 JPanel,它将显示在图形的顶部。现在,我看到的只是通过 JFrame 绘制方法创建的图形。
这是我的 JPanel:
public class NoteDraw extends JPanel {
public NoteDraw() {
setSize(200, 100);
setBackground(Color.BLACK);
}
@Override public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(0, 0, 100, 100);
}
}
这是我的 JFrame:
public class ui extends JFrame {
public void paint(Graphics g) {
//do some drawing here...
}
}
这是我的主要内容:
public class Main {
static ui main_gui = new ui();
public static void main(String[] args) {
NoteDraw note = new NoteDraw();
main_gui.getContentPane().add(note);
main_gui.setVisible(true);
}
}
最佳答案
您永远不应该重写 JFrame 的 Paint() 方法(除非您真的知道自己在做什么)。该方法负责 Swing 的所有优化绘画行为。
自定义绘制应始终通过重写 Swing 组件的 PaintComponent() 方法来完成,就像您在 NoteDraw 面板上所做的那样。
paint 方法中的代码不显示的原因是 NoteDraw 面板是不透明的,因此该面板在您的 Paint 方法中的 Graphics 代码之上进行绘制。
所以解决方案是将Graphics绘画代码移至NoteDraw面板。
或者,如果您尝试为框架创建某种背景图像,那么您可以尝试使用 Background Panel 。
或者,如果您确实需要自定义绘画,那么您可以创建一个背景面板并重写 PaintComponent() 方法。然后将布局设置为 BorderLayout 并将该面板添加到框架中。然后,将 NoteDraw 面板设为不透明并将其添加到自定义背景面板中。现在背景将显示在 NoteDraw 面板上。
关于Java - 覆盖 JFrame 的绘制时,JPanel 不会显示在 JFrame 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3762750/