【发布时间】:2015-01-05 19:39:29
【问题描述】:
我已经关注了 peeskillet,并根据他最后的想法更改了我的代码。这是修改后的代码
CriclePanel 类
public class CirclePanel extends JPanel {
int centerX, centerY, radius;
Color circle_color;
public void setCircle(int centerX, int centerY, int radius, Color c) {
this.centerX = centerX;
this.centerY = centerY;
this.radius = radius;
circle_color = c;
revalidate();
repaint();
}
protected void paintComponent(Graphics g) {
System.out.println("Trying to draw circle");
super.paintComponent(g);
g.fillOval(centerX, centerY, radius*2, radius*2);
}
}
网格面板(从调色板添加并自定义构造)
myGridPanel = new JPanel(new GridLayout(8,8));
panels = new CirclePanel[8][8];
for (int i = 0; i < panels.length; i++) {
for (int j = 0; j < panels[i].length; j++) {
CirclePanel panel = new CirclePanel();
panels[i][j] = panel;
myGridPanel.add(panel);
}
}
尝试添加画圈:
if(dType==DiceType.blackDice){
System.err.println("black @"+i+","+j);
panels[i][j].setCircle(x, y, radius, Color.BLACK);
}else{
System.err.println("white @"+i+","+j);
panels[i][j].setCircle(x, y, radius, Color.WHITE);
}
但是网格面板上没有绘制圆圈,母面板“myGridPanel”上也没有网格。我看到没有调用 CirclePanel 的 paintComponant()。
【问题讨论】:
-
查看Refining the Design 以不制作圈子面板
-
另外,如果要在运行时添加面板,则需要重新验证并重新绘制容器,但请记住,在网格面板顶部添加面板会导致网格线不显示。您必须使每个圆形面板不透明。此外,您将很难尝试将它们布置出来。我会按照上面的链接进行一些重构
-
无法理解@peeskillet。你能帮我修改一下我的代码吗?
-
点击链接。忘记整个第二条评论。基本上,我要说的是不要让每个 Circle 都成为一个面板。该链接将显示我的意思