背景を描画するカスタム図面を実装するJPanelがあります。この上に、アプリケーションはJButtonを配置して、JPanelの特定の領域のクリックを検出することができます。しかし、マウスで(不透明でない)ボタンをハイライト表示すると、基になるJPanelのグラフィックスはすべて不具合になります。JButtonを使用したJPanelのカスタム図面によるグラフィックグリッチ
これらは、カスタム描画と9つのJPanel、2つの充填JButtonが(RとL)と、それらのそれぞれ。右上のブロックとそれのように見えるものは「新鮮」です。
rotatePanel = new JPanel();
rotatePanel.setOpaque(false);
GridLayout rotateLayout = new GridLayout(1, 2);
rotatePanel.setLayout(rotateLayout);
rotateRight = new JButton("R");
rotateRight.addActionListener(this);
rotateRight.setOpaque(false);
rotateRight.setContentAreaFilled(false);
rotateRight.setBorderPainted(false);
rotatePanel.add(rotateRight);
rotateLeft = new JButton("L");
rotateLeft.addActionListener(this);
rotateLeft.setOpaque(false);
rotateLeft.setContentAreaFilled(false);
rotateLeft.setBorderPainted(false);
rotatePanel.add(rotateLeft);
と、これは私の描画コードです:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Rectangle clipRect = g.getClipBounds();
clipRect.grow(-4, -4);
int thirdWidth = clipRect.width/3;
int thirdHeight = clipRect.height/3;
for (int x = 0; x < Board.DIM; x++) {
//Draw the columns
for (int y = 0; y < Board.DIM; y++) {
//Draw the rows
g.drawRect(thirdWidth * x, thirdHeight * y, thirdWidth, thirdHeight);
}
}
g.setColor(Color.BLACK);
g.drawRect(0, 0, clipRect.width, clipRect.height);
}
ああ、もちろん。今私もJavaの絵について新しいことを学びました;)ありがとう! –
+1 g.getClipBounds()が何をしているか分からなかった。 – david