Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing DrawRect:创建新维度替换旧维度_Java_Swing_Graphics_Jpanel - Fatal编程技术网

Java Swing 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

我尝试使用下面的类制作两个矩形: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 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维的矩形

您的程序中有几个问题:

  • 所有这4个变量:

    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;