如何更新相应的jpanel中的2D矩形图
我遇到了一个问题,即我的工作代码能够在jpanel drawpanel
给定的输入参数中显示矩形。但是,在尝试创建一个新的矩形时,该新矩形将添加到图纸中。因此,现在我有两个矩形,而不仅仅是更新的矩形。我想知道是否有人可以帮助我确定为什么矩形又一个接一个地出现,而不是只显示一个新更新的矩形。为了更好地说明我的问题,这是一个图像:
“ nofollow noreferrer”>“ nofollow noreferrer”> restate按钮在这里是矩形的创建,但是每次我更改参数时,都会创建一个新的矩形。
这是我的类 die
创建的代码,该代码从JTEXTFIELDS中提取双倍,并创建一个2DDRECTANGLE。
class die extends JPanel implements ActionListener{
@Override
protected void paintComponent(Graphics g){
super.paintComponent(g);
}
@Override
public void actionPerformed(ActionEvent e) {
//parsing double values from jtextfields
double xcor = Double.parseDouble(xcoorin.getText());
double ycor = Double.parseDouble(ycoorin.getText());
double lengthdie = Double.parseDouble(Die_L.getText());
double widthdie = Double.parseDouble(Die_W.getText());
//drawing the rectangle
Rectangle2D rect = new Rectangle2D.Double(xcor, ycor, widthdie, lengthdie);
((Kpackage) drawpanel).draw(rect);
}
}
ActionListener listen = new die();
locate.addActionListener(listen);
下面是创建JPANEL drawpanel
的代码,该代码是通过继承2D图的方法Kpackage创建JPANEL的地方。添加的绘制板的代码如下:
public class MyFrame{
public MyFrame(){
//Creating new panels for the content window "Frame"
JPanel cyanpanel = new JPanel();
JPanel orangepanel = new JPanel();
JPanel greenpanel = new JPanel();
JPanel magentapanel = new JPanel();
JPanel whitepanel = new JPanel();
JPanel graypanel = new JPanel();
JPanel drawpanel = new Kpackage(); //inheriting information from my panel which is the 2D drawing
JPanel dieinputpanel = new JPanel();
JPanel diepanel = new JPanel();
kpackage()的代码;
在下面,此代码显示较大的图形,该图形限制了较小的矩形:
public class Kpackage extends JPanel{
private ArrayList<Rectangle2D> rectangles = new ArrayList<>();
public void draw(Rectangle2D rect){
//Save the new rectangle to the list
rectangles.add(rect);
//Trigger a repaint which will call the paintComponent method and draw all the rectangles
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
Dimension size = this.getSize();
//Dimensions and variables for the package
double scale = 30; //scale of the k package
double aTO_4L = 1.42*scale;
double bTO_4L = 0.30*scale;
double cTO_4L = 5.99*scale;
double dTO_4L = 3.00*scale;
double d1TO_4L = 1.5*scale;
double d2TO_4L = 2.60*scale;
double eTO_4L = 7.26*scale;
double fTO_4L = 0.64*scale;
double gTO_4L = 7.18*scale;
double hTO_4L = 0.38*scale;
double iTO_4L = 7.79*scale;
double jTO_4L = 13.26*scale;
double kTO_4L = 3.78*scale;
double dia_inner = 3.58*scale;
double dia_outer = 7.18*scale;
double tot_width=jTO_4L+2*hTO_4L;
double tot_height=iTO_4L+eTO_4L+d1TO_4L;
double x = (size.width/2);
double y = (size.height/2);
//creating the K package envelope
g2d.draw(new Line2D.Double(x-cTO_4L/2-aTO_4L, y-eTO_4L-d1TO_4L, x-cTO_4L/2,y-eTO_4L-d1TO_4L ));
g2d.draw(new Line2D.Double( x-cTO_4L/2,y-eTO_4L-d1TO_4L ,x-cTO_4L/2,y-eTO_4L-d1TO_4L +bTO_4L));
g2d.draw(new Line2D.Double(x-cTO_4L/2,y-eTO_4L-d1TO_4L +bTO_4L,x-cTO_4L/2+cTO_4L,y-eTO_4L-d1TO_4L+bTO_4L));
g2d.draw(new Line2D.Double(x-cTO_4L/2+cTO_4L,y-eTO_4L-d1TO_4L+bTO_4L,x-cTO_4L/2+cTO_4L,y-eTO_4L-d1TO_4L));
g2d.draw(new Line2D.Double(x-cTO_4L/2+cTO_4L,y-eTO_4L-d1TO_4L,x-cTO_4L/2+cTO_4L+aTO_4L,y-eTO_4L-d1TO_4L));
g2d.draw(new Line2D.Double(x-cTO_4L/2+cTO_4L+aTO_4L,y-eTO_4L-d1TO_4L,x-cTO_4L/2+cTO_4L+aTO_4L+d2TO_4L,y-eTO_4L-d1TO_4L+d1TO_4L));
g2d.draw(new Line2D.Double(x-cTO_4L/2+cTO_4L+aTO_4L+d2TO_4L,y-eTO_4L-d1TO_4L+d1TO_4L,x-cTO_4L/2+cTO_4L+aTO_4L+d2TO_4L,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L));
g2d.draw(new Line2D.Double(x-cTO_4L/2+cTO_4L+aTO_4L+d2TO_4L,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L,x-cTO_4L/2+cTO_4L+aTO_4L+d2TO_4L-hTO_4L,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L));
g2d.draw(new Line2D.Double(x-cTO_4L/2+cTO_4L+aTO_4L+d2TO_4L-hTO_4L,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L,x-cTO_4L/2+cTO_4L+aTO_4L+d2TO_4L-hTO_4L,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L+iTO_4L));
g2d.draw(new Line2D.Double(x+jTO_4L/2,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L+iTO_4L,x-jTO_4L/2,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L+iTO_4L));
g2d.draw(new Line2D.Double(x-jTO_4L/2,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L+iTO_4L,x-jTO_4L/2,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L));
g2d.draw(new Line2D.Double(x-jTO_4L/2,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L+iTO_4L,x-jTO_4L/2,y-eTO_4L-d1TO_4L+d1TO_4L+eTO_4L));
g2d.draw(new Line2D.Double(x-jTO_4L/2,y,x-jTO_4L/2-hTO_4L,y));
g2d.draw(new Line2D.Double(x-jTO_4L/2-hTO_4L,y,x-jTO_4L/2-hTO_4L,y-eTO_4L));
g2d.draw(new Line2D.Double(x-jTO_4L/2-hTO_4L,y-eTO_4L,x-jTO_4L/2-hTO_4L+d2TO_4L,y-eTO_4L-d1TO_4L));
g2d.draw(new Ellipse2D.Double(x-dia_inner/2,y-dia_inner/2-kTO_4L,dia_inner,dia_inner));
g2d.draw(new Ellipse2D.Double(x-dia_outer/2,y-dia_outer/2-kTO_4L,dia_outer,dia_outer));
//creating the 4 leg leads
//variables and names
double D_lead = 2.529*scale;
double S_lead = 4.770*scale;
double K_lead=1.5*scale;
double G_lead=2.080*scale;
double S_p1=1.1*scale;
double S_p2=4.270*scale;
double S_p3=0.940*scale;
double S_p4=2.630*scale;
double S_rad=0.5*scale;
double lead_w=1.2*scale;
double lead_h=1.6*scale;
double K_p1=0.32*scale;
double K_p2=1.5*scale;
double K_p3=0.620*scale;
double G_p1=0.880*scale;
double length_lead=3.0*scale;
double dist_1=0.178*scale;
double dist_2=0.450*scale;
double dist_3=0.720*scale;
double dist_4=0.4*scale;
//Creating the lead positions and dimensions
//Drawing D LEAD
g2d.draw(new Line2D.Double(x-jTO_4L/2,y+iTO_4L,x-jTO_4L/2,y+iTO_4L+length_lead));
g2d.draw(new Line2D.Double(x-jTO_4L/2+D_lead,y+iTO_4L,x-jTO_4L/2+D_lead,y+iTO_4L+length_lead));
//Drawing G LEAD
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2,y+iTO_4L+dist_1,x+jTO_4L/2-dist_2,y+iTO_4L+dist_1+lead_h));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_p1,y+iTO_4L+dist_1+lead_h));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2,y+iTO_4L+dist_1,x+jTO_4L/2-dist_2-G_lead,y+iTO_4L+dist_1));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead,y+iTO_4L+dist_1,x+jTO_4L/2-dist_2-G_lead,y+iTO_4L+dist_1+length_lead));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_p1,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_p1,y+iTO_4L+dist_1+length_lead));
//Drawing K LEAD
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3,y+iTO_4L+dist_1,x+jTO_4L/2-dist_2-G_lead-dist_3,y+iTO_4L+dist_1+lead_h));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3,y+iTO_4L+dist_1,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2,y+iTO_4L+dist_1));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2,y+iTO_4L+dist_1,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2,y+iTO_4L+dist_1+lead_h));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p3,y+iTO_4L+dist_1+lead_h));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p3,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p3,y+iTO_4L+dist_1+length_lead));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1,y+iTO_4L+dist_1+lead_h));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1,y+iTO_4L+dist_1+length_lead));
//Drawing S LEAD
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4,y+iTO_4L+dist_1));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4,y+iTO_4L+dist_1,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_p2,y+iTO_4L+dist_1));
//connect before end point and after start point
g2d.draw(new Arc2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_rad-S_p2,y+iTO_4L+dist_1,2*S_rad,2*S_rad,90, 90,Arc2D.OPEN));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_rad-S_p2,y+iTO_4L+dist_1+S_rad,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_rad-S_p2,y+iTO_4L+dist_1+lead_h));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_p3,y+iTO_4L+dist_1+lead_h));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_p3,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_p3,y+iTO_4L+dist_1+length_lead));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_rad-S_p2,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_rad-S_p2+S_p4,y+iTO_4L+dist_1+lead_h));
g2d.draw(new Line2D.Double(x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_rad-S_p2+S_p4,y+iTO_4L+dist_1+lead_h,x+jTO_4L/2-dist_2-G_lead-dist_3-K_p2-K_p1-dist_4-S_rad-S_p2+S_p4,y+iTO_4L+dist_1+length_lead));
for (Rectangle2D rectangle : rectangles){
//Draw a basic rectangle, just as proof that this works
g2d.draw(rectangle);
}}}
感谢您的帮助!期待每个人的回应。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题在于,您将每个矩形添加到列表中,最后打印整个列表。如果您只想要一个矩形,请删除列表并更新rettangle2d的单个实例。
您在这里添加矩形。
每次在这里打印全部。
The problem is that you are adding each rectangle to the List and at the end, printing out the entire list. If you only want one rectangle, then remove the list and update a single instance of Rectangle2D.
You add the rectangle here.
Each time you print them all here.