1

グリッドを GUI に描画する方法と、後で描画されるボックスの色を変更できるようにするプログラムに助けが必要です。paintComponent(Graphics g) を使用する必要があることはわかっていますが、方法や場所がわかりません。

だから、ここに私がこれまでに得たコードのコピーがあります(コードを与えられるだけで非常に困難になる可能性があると言われていますが、私のためにそれを行うだけでなく、人々が助けるのが最善の方法だと思います)。上から、値を設定し、GUI を作成し、GUI を呼び出し、2 次元配列をボックスで埋めます (私はそう思います)。次に、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;
 }


}
4

1 に答える 1

3
  • 物事を簡単にするためにコメントすることはできませんが、

  • そこにbox.putClientProperty(unique_identifier, value_for_identifier)をコーディングします。このメソッドを必要に応じて複数にすることができます

  • これを取得できるすべての Swing リスナーから、putClientProperty で適切に調整された定義を取得できます。

.

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);
    }
}
于 2013-02-28T20:52:57.650 に答える