如何把重写了paintComponent()方法来绘制一个红色的矩形显示在Panel上
时间: 2024-05-08 20:17:52 浏览: 66
答案:您可以在重写的paintComponent()方法中使用Graphics类的setColor()方法设置颜色为红色,然后使用fillRect()方法绘制矩形。代码示例如下:
```
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(0, 0, getWidth(), getHeight());
}
```
笑话:有一只羊问另外一只羊:“我们为什么要剃毛?”另外一只羊回答:“因为人家说我们很帅!”
相关问题
在一个继承了JPanel的类上重写paint方法并改变背景颜色及其相对位置和大小,将其添加到窗体中,Jpanel上使用Graphics2D绘制的内容会消失,且已经使用了父类的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`绘制的内容就可以正常显示,并且随着组件大小的改变而自适应地改变。
在一个继承了JPanel的类上重写paint方法并改变JPanel的背景颜色及其相对位置和大小,将其添加到窗体中,Jpanel上使用Graphics2D绘制的内容会消失,且已经使用了父类的paint方法
这种情况可能是因为在重写`paint`方法时,使用了`JPanel`的背景颜色来覆盖绘制的内容,导致绘制的内容被覆盖而无法显示。解决方法是在绘制之前,先使用`setOpaque(false)`方法将`JPanel`设置为透明,以便在其上绘制的内容不被遮挡。
例如,以下是一个在`JPanel`上使用`Graphics2D`绘制矩形并改变`JPanel`的背景颜色的类:
```java
public class MyPanel extends JPanel {
public MyPanel() {
setOpaque(false); // 设置为透明
}
@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();
panel.setBackground(Color.WHITE); // 设置背景颜色
frame.add(panel);
frame.setSize(300, 300);
frame.setVisible(true);
```
这样,使用`Graphics2D`绘制的内容就可以正常显示,并且`JPanel`的背景颜色也可以被改变。注意,如果`JPanel`的背景颜色为不透明的,绘制的内容仍然可能被覆盖而无法显示。
阅读全文