java - 在java中的Jframe上绘制简单的矩形

标签 java swing graphics jframe awt

我正在像这样扩展 JFrame:

public GameFrame() {
    this.setBounds(30, 30, 500, 500);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    initializeSquares();
}

private void initializeSquares(){
    for(int i = 0; i < 5; i++){
        this.getContentPane().add(new Square(i*10, i*10, 100, 100));
    }
    this.setVisible(true);
}

但是,屏幕上只绘制了一个正方形,有人知道为什么吗?

我的 Square 类也是这样的:

private int x;
private int y;
private int width;
private int height;
public Square(int x, int y, int width, int height){
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawRect(x, y, width, height);
}

最佳答案

JFrame 的 contentPane 默认使用 BorderLayout。当您向其中添加一个 Square 时,它​​会默认添加 BorderLayout.CENTER 并覆盖之前添加的任何 Square。您将需要阅读 Swing GUI 可用的所有布局管理器。

例如,从这里开始:Laying Out Components within a Container

但话虽如此,我会做不同的事情。我将只创建一个 JPanel 并使其能够绘制多个正方形。例如像这样:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;

import javax.swing.*;

public class GameFrame extends JFrame {
   public GameFrame() {
      super("Game Frame");
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Squares squares = new Squares();
      getContentPane().add(squares);
      for (int i = 0; i < 15; i++) {
         squares.addSquare(i * 10, i * 10, 100, 100);
      }

      pack();
      setLocationRelativeTo(null);
      setVisible(true);

   }

   public static void main(String[] args) {
      new GameFrame();
   }

}

class Squares extends JPanel {
   private static final int PREF_W = 500;
   private static final int PREF_H = PREF_W;
   private List<Rectangle> squares = new ArrayList<Rectangle>();

   public void addSquare(int x, int y, int width, int height) {
      Rectangle rect = new Rectangle(x, y, width, height);
      squares.add(rect);
   }

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(PREF_W, PREF_H);
   }

   @Override
   protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;
      for (Rectangle rect : squares) {
         g2.draw(rect);
      }
   }

}

关于java - 在java中的Jframe上绘制简单的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713432/

相关文章:

java - 在jPanel上绘制并获取绘制的内容

java - 图形不显示在 JFrame 上

java - RealmMigration 删除了我 Realm 中的所有数据

Java Connect4 游戏存在 GUI 错误问题

java - 获取 SQL 异常 ORA-08103 : object no longer exists in java

java - ResultSet 填充 JTable 列名称但不填充数据

java - 从查询更新 JTable

java - 鼠标释放时删除带有颜色的矩形

java - GWT中如何连接MySql? (应用引擎)

java - 将特定输出解析为变量 Java