在java中如何在按下按钮时绘制正方形
我正在编写一个java程序,输入一个矩形的长度和宽度,然后输出周长和面积。但是现在,我也想画这个图形。但我不知道按下按钮时怎么画。应该是这样吗在java中如何在按下按钮时绘制正方形,java,swing,drawing,paintcomponent,repaint,Java,Swing,Drawing,Paintcomponent,Repaint,我正在编写一个java程序,输入一个矩形的长度和宽度,然后输出周长和面积。但是现在,我也想画这个图形。但我不知道按下按钮时怎么画。应该是这样吗 public void paintComponent(Graphics g) { paintComponent(g); g.setColor(Color.blue); g.drawRect(10, 10, 80, 30); } public void actionPerformed(ActionEvent e) {
public void paintComponent(Graphics g) {
paintComponent(g);
g.setColor(Color.blue);
g.drawRect(10, 10, 80, 30);
}
public void actionPerformed(ActionEvent e) {
paintComponent();
}
因为当我这样做的时候,它会给我一个错误,说:
method paintComponent in class Rectangles cannot be applied to given types;
required: Graphics
found: no arguments
所以我真的不知道该怎么办。不,你不应该直接调用
paintComponent
。无论如何,该方法都将自动调用,因此在单击之前将绘制正方形
您可以使用布尔标志指示单击按钮并调用repaint()
发布重新绘制请求:
boolean clicked = false;
public void paintComponent(Graphics g) {
if (clicked) {
g.setColor(Color.blue);
g.drawRect(10, 10, 80, 30);
}
}
public void actionPerformed(ActionEvent e){
clicked = true;
repaint();
}
此外,从不让方法使用完全相同的参数调用自己。这个剪掉了
public void paintComponent(Graphics g) {
paintComponent(g);
将无限频繁地调用同一函数(或直到堆栈已满)
我想你在某处看到了以下情况:
public void paintComponent(Graphics g) {
super.paintComponent(g);
好的,它将调用超类的paint方法。它可能不起任何作用,所以省略它应该不会有什么坏处(但保留它也不会有坏处)。不,您不应该直接调用
paintComponent
。无论如何,该方法都将自动调用,因此在单击之前将绘制正方形
您可以使用布尔标志指示单击按钮并调用repaint()
发布重新绘制请求:
boolean clicked = false;
public void paintComponent(Graphics g) {
if (clicked) {
g.setColor(Color.blue);
g.drawRect(10, 10, 80, 30);
}
}
public void actionPerformed(ActionEvent e){
clicked = true;
repaint();
}
此外,从不让方法使用完全相同的参数调用自己。这个剪掉了
public void paintComponent(Graphics g) {
paintComponent(g);
将无限频繁地调用同一函数(或直到堆栈已满)
我想你在某处看到了以下情况:
public void paintComponent(Graphics g) {
super.paintComponent(g);
好的,它将调用超类的paint方法。它可能没有任何作用,所以省略它应该没有坏处(但保留它也没有坏处)。谢谢,但当我这样做时,它会给我一个
java.lang.StackOverflowerError
。我不知道为什么。@DLJ我没有明确说明,但我删除了对paintComponent(g)的调用代码>来自paintComponent
。您也应该这样做:)(或者将其作为super.paintComponent(g)
)@DLJ:尝试重写并使其返回一些有效的维度
对象,就像您重写paintComponent(…)
方法一样,例如,谢谢。但当我这样做时,它会给我一个java.lang.StackOverflowError
。我不知道为什么。@DLJ我没有明确说明,但我删除了对paintComponent(g)的调用代码>来自paintComponent
。您应该执行相同的操作:)(或者将其作为super.paintComponent(g)
)@DLJ:尝试重写并使其返回一些有效的维度
对象,就像重写paintComponent(…)
方法一样,例如。