我想创建一个允许我输入尺寸(例如10x10)的API(个人版),它会创建一个10个正方形,10个正方形的可见网格,并添加了能够更改填充的“特征”通过方法调用的任何方块。不要尝试使用任何类型的mouse listener
或任何listener
。
我的思维过程是这样的:
让持有网格的主JPanel
递归地添加'box'objects
并引用每个array
位置。我的问题不是主要JPanel
,我已经足够轻松了。我的问题是object
它正在添加。我无法弄清楚这应该是什么component
。我尝试使用JPanel
但无法看到任何内容。此外,“网格”外观也不会存在。
我猜我将不得不使用swing.Graphics
或Graphics2D
,但我在网上找到的每个例子都不适合我。寻找有关使用Graphics
的建议,或者如果有更好的方法来获得我想要的东西,我很乐意尝试一下。
答案 0 :(得分:2)
拥有一个MainPanel
类,该类获取维度,并根据指定的维度将其布局设置为GridLayout
public class MainPanel extends JPanel {
public MainPanel(int rows, int cols) {
setLayout(new GridLayout(rows, cols));
}
}
创建一个具有draw()
方法
public interface Drawable {
void draw(Graphics g);
}
创建一个具有Drawable
属性的自定义面板,您可以在其中调用它的绘制方法
public class DrawPanel extends JPanel {
private Drawable drawable;
public DrawPanel() {}
public DrawPanel(Drawable drawable) {
this.drawable = drawable;
}
public void setDrawable(Drawable drawable) {
this.drawable = drawable;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (drawable != null) {
drawable.draw(g);
}
}
}
在DrawPanels
课程中创建MainPanel
的二维数组,只要您可以按索引访问它们,如果需要
public class MainPanel extends JPanel {
private DrawPanel[][] panels;
public MainPanel(int rows, int cols) {
setLayout(new GridLayout(rows, cols));
panels = new DrawPanel[rows][cols];
}
}
使用new DrawPanel
填充数组并将其添加到MainPanel
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
DrawPanel panel = new DrawPanel();
panels[i][j] = panel;
MainPanel.this.add(panel);
}
}
使用您想要的任何/多少实现实现Drawable
接口。像
public class Ball implements Drawable {
private int x, y;
private JPanel surface;
public Ball(int x, int y, JPanel surface) {
this.x = x;
this.y = y;
this.surface = surface;
}
@Override
public void draw(Graphics g) {
g.fillOval(x, y, sirface.getWidth(), surface.getHeight());
}
}
将可绘制对象添加到面板
JPanel panel = panels[3][4];
panel.setDrawable(new Ball(0, 0, panel));
您可以根据需要制作Drawable
的任意数量的不同实现,并且每个面板可以绘制不同的对象。
public class Midget implements Drawable {
@Override
public void draw(Graphics g) {
// draw midget
}
}
....
panels[5][5].setDrawable(new Midget());
答案 1 :(得分:2)
使用JLabel
JPanel panel = new JPanel(new GridLayout(10, 10));
JLabel[] labels = new JLabel[20];
Color[] colors = new Color[] { Color.GREEN, Color.RED, Color.BLUE };
Random random = new Random();
for (int i = 0; i < labels.length; i++) {
JLabel label = new JLabel();
label.setBackground(colors[random.nextInt(colors.length)]);
label.setOpaque(true);
panel.add(label);
labels[i] = label;
}
快照: