在一个继承了JPanel的类上重写paint方法并改变背景颜色及其相对位置和大小,将其添加到窗体中,Jpanel上使用Graphics2D绘制的内容会消失,且已经使用了父类的paint方法
时间: 2024-03-17 18:42:58 浏览: 52
《JFrame类中paint()方法的重绘》
这种情况可能是因为在`JPanel`上绘制的内容被其他组件遮挡了,可以尝试将`JPanel`设置为不透明的,以便在其上绘制的内容不被其他组件遮挡。可以使用`setOpaque(true)`方法将`JPanel`设置为不透明。
另外,如果在`JPanel`上绘制的内容需要随着组件大小的改变而自适应地改变,可以使用`ComponentListener`监听组件大小的改变,并在`componentResized`方法中重新绘制内容。
例如,以下是一个在`JPanel`上使用`Graphics2D`绘制矩形并自适应大小的类:
```java
public class MyPanel extends JPanel {
public MyPanel() {
setOpaque(true); // 设置为不透明
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
repaint(); // 组件大小改变时重新绘制
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLUE);
g2d.fillRect(0, 0, getWidth(), getHeight()); // 绘制与组件相同大小的矩形
}
}
```
在将其添加到窗体中时,与之前的方法相同:
```java
JFrame frame = new JFrame();
MyPanel panel = new MyPanel();
frame.add(panel);
frame.setSize(300, 300);
frame.setVisible(true);
```
这样,使用`Graphics2D`绘制的内容就可以正常显示,并且随着组件大小的改变而自适应地改变。
阅读全文