0
画像上に四角形を付けた三角形(私が画像上にマークしたもの)をマークしようとしています。私は三角形をペイントすることができましたが、四角形でマークすることはできません。 は、ここで私はこれまでに書いたコードです:paintComponentとmouseListenerの問題
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
abstract class Places extends JComponent {
private boolean marked;
private String placeName;
private PlacePosition position;
private String placeColor;
private String placeCategory;
public Places(String name, String category, PlacePosition position) {
setBounds(position.x, position.y, 20, 20);
placeName = name;
this.position = position;
placeCategory = category;
this.placeColor = placeColor;
mouseListener mL = new mouseListener();
}
public Color rightColor() {
Color c = Color.BLACK;
switch (placeCategory) {
case "None":
c = Color.BLACK;
break;
case "Buss":
c = Color.RED;
break;
case "Tunnelbana":
c = Color.BLUE;
break;
case "Tåg":
c = Color.GREEN;
break;
}
return c;
}
public PlacePosition getPosition() {
return position;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int[] polyX = { 0, 15, 30 };
int[] polyY = { 0, 30, 0 };
setBounds(position.x - 15, position.y - 30, 30, 30);
setPreferredSize(new Dimension(50, 50));
setMaximumSize(new Dimension(50, 50));
setMinimumSize(new Dimension(50, 50));
g.setColor(rightColor());
g.fillPolygon(polyX, polyY, 3);
if (marked) {
g.drawRect(30, 30, 30, 30);
g.setColor(Color.YELLOW);
}
repaint();
}
abstract void printText();
class mouseListener extends MouseAdapter {
public void mouseClicked(MouseEvent mE) {
if (SwingUtilities.isLeftMouseButton(mE)) {
if (!marked) {
marked = true;
} else {
marked = false;
}
}
revalidate();
repaint();
}
}
}
私の推測ではのMouseListenerでは動作しないものがあることですが、私は非常に不確実です。ヘルプは非常に高く評価されるだろう!
おっと、これは迷惑なミスでした...あなたの助けをありがとう! –
好奇心から、paintComponentメソッド内からrepaint()を呼び出すべきではないのはなぜですか? –
@MyJärphed:あなたは本質的に、「貧乏人のゲームループ」を作り出しています。あなたがコントロールすることは絶対にありません。そして、基本的な方法でキーのSwingメソッドの動作を変えます。 paintComponentメソッドはペイントとペイントのみを目的としており、荒廃したゲームループには使用しないでください。 Swing Timerや他の構造を使って、より多くの制御を行うことができます。 –