Java Swing DrawRect:创建新维度替换旧维度
我尝试使用下面的类制作两个矩形:DrawRect,但当我创建一个新的DrawRect对象时,它会替换旧对象的宽度和高度Java Swing DrawRect:创建新维度替换旧维度,java,swing,graphics,jpanel,Java,Swing,Graphics,Jpanel,我尝试使用下面的类制作两个矩形:DrawRect,但当我创建一个新的DrawRect对象时,它会替换旧对象的宽度和高度 package MemDiagramVisualizer; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.*; public class DrawRect extends JPanel { private static int RECT_X; private stat
package MemDiagramVisualizer;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.*;
public class DrawRect extends JPanel {
private static int RECT_X;
private static int RECT_Y;
private static int RECT_WIDTH;
private static int RECT_HEIGHT;
public DrawRect(int w, int h) {
RECT_X = 20;
RECT_Y = 20;
RECT_WIDTH = w;
RECT_HEIGHT = h;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(RECT_X, RECT_Y, RECT_WIDTH, RECT_HEIGHT);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(RECT_WIDTH + 2 * RECT_X, RECT_HEIGHT + 2 * RECT_Y);
}
}
上面的代码添加到框架内容窗格时会创建两个100600维的矩形您的程序中有几个问题:
private static int RECT_X;
private static int RECT_Y;
private static int RECT_WIDTH;
private static int RECT_HEIGHT;
它们都是静态的,但是您试图在程序内部更改它们,这将适用于您程序的所有实例,它们都将共享值。在这种情况下,我建议你把它去掉,你应该很好。这就是为什么当您使用相同的代码创建另一个类时,它可以工作的原因
RECT_X=20代码>和RECT_Y=20在构造函数内部,如果这些是常量,则在顶部初始化它们,并且不要在类的每个实例中设置它们
JPanel
s,而是使用所示的Shape API创建一个可以在单个JPanel
中绘制的形状数组。同样,这一切都取决于你的需要
static
关键字后,我们得到了以下结果:
什么是
drawrec2
?为了更快地获得更好的帮助,我发布了一个正确的例子来演示这个问题,它实际上是DrawRect的一个副本,这是我目前解决这个问题的方法:使用一个单独的类,它具有相同的代码,但名称不同。我编辑了代码以解决最初的问题欢迎使用堆栈溢出。请拿着这本书,读一读,同时阅读。后者(正如@Frakcool所指出的)允许其他人重现您的问题,从而帮助您更快更有效:帮助他人帮助您。谢谢,我甚至没有注意到它们是静态的。我会调查Shapepi的,谢谢你提供的信息
private static int RECT_X;
private static int RECT_Y;
private static int RECT_WIDTH;
private static int RECT_HEIGHT;