Java,对象网格

时间:2013-02-28 20:29:47

标签: java swing jpanel paintcomponent preferredsize

我需要帮助将网格绘制到GUI以及稍后让我更改绘制框的颜色的程序。我知道我将不得不使用paintComponent(Graphics g),但我不知道如何或在哪里。

所以这里是我到目前为止所获得的代码的副本(尽管我被告知只要给出代码可能会非常令人生畏,我认为这是人们帮助的最佳方式,而不仅仅是为了我)。从顶部设置值,创建GUI,调用GUI,用框填充二维数组(我认为)。然后在Boxes类设置值框中将需要,然后开始如何绘制它们(不知道如何处理它),然后是x和y坐标的一些seta方法。

我希望你做的是展示如何将框绘制到Jpanel,制作网格,然后向我展示如何根据外部值将颜色更改为不同的蓝色。

import java.awt.*;
import java.awt.Graphics;
import java.util.*;
import javax.swing.*;

public class NewGrid {

   Boxes[][] Boxs;
   int BoxesX;
   int BoxesY;

   NewGrid() {
      buildtheGUI();

   }
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();

    public void buildtheGUI() {
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.setVisible(true);
    }

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

    public void addboxes() {
        Boxs = new Boxes[panel.getWidth() / 10][panel.getHeight() / 10];
        for (int i = 0; i < panel.getWidth() / 10; i++) {
           for (int j = 0; j < panel.getHeight() / 10; j++) {
               Boxs[i][j] = new Boxes();
               Boxs[i][j].setx(i * (panel.getWidth() / 10));
               Boxs[i][j].sety(j * (panel.getHeight() / 10));
               Boxs[i][j].draw(null);
           }

       }
   }
}


public class Boxes extends JPanel {
int x;
int y;
int width = 10;
int hieight = 10;
Color colour = Color.BLACK;




 public void draw(Graphics g) {
    g.setColor(colour);
    g.fillRect(x, y, width, hieight);
}
 public void setx(int i ){
     x = i;
 }
 public void sety(int i ){
     y = i;
 }


}

1 个答案:

答案 0 :(得分:3)

JComponent comp = event.getComponent();
String strRow = (String) comp.getClientProperty("row");
String strColumn = (String) comp.getClientProperty("column");

简单代码

import java.awt.*;
import java.awt.Graphics;
import java.util.*;
import javax.swing.*;

public class NewGrid {

    private int row = 10;
    private int column = 10;
    private JFrame frame = new JFrame();
    private JPanel panel = new JPanel();

    private NewGrid() {
        addboxes();
        panel.setLayout(new GridLayout(row, column));
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    private void addboxes() {
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                Boxes box = new Boxes();
                box.putClientProperty("row", row);
                box.putClientProperty("column", column);
                panel.add(box);
            }
        }
    }

    public static void main(String[] args) {
        Runnable doRun = new Runnable() {
            @Override
            public void run() {
                new NewGrid();
            }
        };
        SwingUtilities.invokeLater(doRun);
    }
}

class Boxes extends JPanel {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(20, 20);
    }

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

    @Override
    public Dimension getMaximumSize() {
        return new Dimension(20, 20);
    }

    @Override
    public void paintComponent(Graphics g) {
        int margin = 2;
        Dimension dim = getSize();
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(margin, margin, dim.width - margin * 2, 
           dim.height - margin * 2);
    }
}