Java JFrame绘图两到三个项目,其中只有一个项目包含在我的Squares arraylist中
标题。我创建了一个Square类,它定义了什么是正方形,并允许我创建一个带有特定参数的正方形。每当我向squares arraylist中添加一个正方形时,它最终会绘制两到三个。为什么会这样?我甚至让它将arraylist项目的数量(squares.size())打印到控制台中,它只显示一个。此外,每当我画正方形时,背景都会变成灰色。我怎样才能解决这个问题 编辑:它似乎还可以再次随机绘制正方形,或者至少在我移动窗口时在控制台中打印消息,但这并不总是发生 我的方形类(不包括getter+setter): 我的框架类:Java JFrame绘图两到三个项目,其中只有一个项目包含在我的Squares arraylist中,java,jframe,jlabel,rect,square,Java,Jframe,Jlabel,Rect,Square,标题。我创建了一个Square类,它定义了什么是正方形,并允许我创建一个带有特定参数的正方形。每当我向squares arraylist中添加一个正方形时,它最终会绘制两到三个。为什么会这样?我甚至让它将arraylist项目的数量(squares.size())打印到控制台中,它只显示一个。此外,每当我画正方形时,背景都会变成灰色。我怎样才能解决这个问题 编辑:它似乎还可以再次随机绘制正方形,或者至少在我移动窗口时在控制台中打印消息,但这并不总是发生 我的方形类(不包括getter+sette
public class Frame extends JFrame {
public Frame() {
super(Main.name);
getContentPane().setBackground(Color.BLACK);
setResizable(false);
setSize(new Dimension(600, 600));
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
MessageUtils.sendConsole("Frame setup.");
}
@Override
public void paint(Graphics g) {
int count = 1;
for (Square s : Square.squares) {
g.drawRect(s.getX(), s.getY(), s.getWidth(), s.getHeight());
g.setColor(s.getColor());
g.fillRect(s.getX(), s.getY(), s.getWidth(), s.getHeight());
MessageUtils.sendConsole("Square #" + count + " drawn.");
count++;
}
}
}
1) 不要覆盖JFrame的paint()。2) 而是重写JPanel的paintComponent(),第一条语句应该是super.paintComponent(),以确保清除背景。3) 然后将面板添加到框架中。阅读上的Swing教程以了解更多信息和工作示例。@camickr好的,但是如果我只在arraylist中放置一个正方形,为什么它会绘制多个正方形呢?随着时间的推移,为什么它会继续画更多的方块呢?背景没有被清除,还有垃圾在被画。你需要遵循正确的绘画指南,否则这就是可能发生的事情。
public class Main {
public static String name = "Project";
@SuppressWarnings("unused")
public static void main(String args[]) {
MessageUtils.sendConsole(name + " started.");
Square.squares.add(new Square(50, 50, 150, 150, Color.black));
Frame frame = new Frame();
}
}
public class Frame extends JFrame {
public Frame() {
super(Main.name);
getContentPane().setBackground(Color.BLACK);
setResizable(false);
setSize(new Dimension(600, 600));
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
MessageUtils.sendConsole("Frame setup.");
}
@Override
public void paint(Graphics g) {
int count = 1;
for (Square s : Square.squares) {
g.drawRect(s.getX(), s.getY(), s.getWidth(), s.getHeight());
g.setColor(s.getColor());
g.fillRect(s.getX(), s.getY(), s.getWidth(), s.getHeight());
MessageUtils.sendConsole("Square #" + count + " drawn.");
count++;
}
}
}