Hallo zusammen,
ich bin neu hier und habe zur folgenden Frage leider noch nichts im Forum gesehen, daher einfach mal meine Frage:
Ich habe folgende Main-Klasse
Darin wird eine GUI aufgebaut, die die Elemente(ASTEvent) enthält. Ein Element wird gezeichnet mit der Funktion:
Auf diese Elemente kann nun geklicket werden per:
Hierbei ist mSelected ein bool Wert der zurückgibt, ob das Element ausgewählt ist. Das ausgewählte Element wurd nun rot umrandet. Allderdings ist nun das Problem, dass alle Elemente in der GUI an und abgewählt werden können (sie werden alle einzeln rot, wenn ich sie anklick). Ich möchte allerdings, dass wenn ein Element ausgewählt ist und dann ein anderes angeklickt wird, das alte abgewählt und das neu geklickte angewählt wird. (gekennzeichnet eben durch den roten Rahmen)
Ich versteh leider nicht, wie ich diesen Ausschluss bei der mouseClicked-Funktion erstellen kann.
Ich hoffe, ich konnte mein Problem klar darstellen. Wenn noch Fragen zum Verständnis sind, bitte posten.
Danke schonmal für Feedback
Schniegelmann
ich bin neu hier und habe zur folgenden Frage leider noch nichts im Forum gesehen, daher einfach mal meine Frage:
Ich habe folgende Main-Klasse
Java:
public class Testframe extends JComponent implements Observer{
private JFrame f;
Element element1;
Element element2;
Element element3;
GUICanvas canvas;
ASTEvent event1;
ASTEvent event2;
ASTEvent event3;
JButton send;
Viewer viewer;
public Testframe(){
f = new JFrame("GUI");
event1 = new ASTEvent("EventNAME1", "EventDATA1");
event2 = new ASTEvent("EventNAME2", "EventDATA2");
event3 = new ASTEvent("EventNAME3", "EventDATA3");
element1 = new Element(event1);
element2 = new Element(event2);
element3 = new Element(event3);
viewer = new Viewer();
f.setSize(800,200);
canvas = new GUICanvas();
canvas.append(element1);
canvas.append(element2);
canvas.append(element3);
Container content = f.getContentPane();
content.setBackground(Color.gray);
content.setLayout(new BorderLayout());
content.add(viewer,BorderLayout.LINE_START);
content.add(canvas,BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public static void main(String[] args){
Testframe tf = new Testframe();
}
}
Darin wird eine GUI aufgebaut, die die Elemente(ASTEvent) enthält. Ein Element wird gezeichnet mit der Funktion:
Java:
@Override
protected void paintComponent(Graphics graphics) {
Graphics2D graphics2D = (Graphics2D) graphics;
graphics2D.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
//
Border border = null;
Color color = null;
if (mFocused) {
color = mColor.brighter();
//
} else {
color = mColor;
}
// Draw a gradient color
GradientPaint paint = new GradientPaint(0, 0, color.darker(), 0, getHeight() / 2, color.brighter(), true);
graphics2D.setPaint(paint);
graphics2D.fillRect(0, 0, getWidth(), getHeight());
graphics2D.setColor(Color.WHITE);
graphics2D.setFont(new Font(Font.MONOSPACED, Font.ITALIC, 11));
graphics2D.drawString(mASTEvent.getName(),
getWidth() / 2 - getFontMetrics(new Font(Font.MONOSPACED, Font.ITALIC, 11)).stringWidth(mASTEvent.getName()) / 2,
getHeight() / 2 + getFontMetrics(new Font(Font.MONOSPACED, Font.ITALIC, 11)).getHeight() / 1);
graphics2D.drawString(mASTEvent.getData(),
getWidth() / 2 - getFontMetrics(new Font(Font.MONOSPACED, Font.ITALIC, 11)).stringWidth(mASTEvent.getData()) / 2,
getHeight() / 2 + getFontMetrics(new Font(Font.MONOSPACED, Font.ITALIC, 11)).getHeight() / 60);
super.paintComponent(graphics);
}
Auf diese Elemente kann nun geklicket werden per:
Java:
@Override
public void mouseClicked(MouseEvent event) {
if (event.getButton() == MouseEvent.BUTTON1
&& event.getClickCount() == 1) {
mSelected = !mSelected;
if(mSelected){
setBorder(BorderFactory.createLineBorder(Color.RED));
revalidate();
repaint();
}
else {
setBorder(BorderFactory.createLineBorder(new Color(0,0,100)));
revalidate();
repaint();
}
} else if(event.getButton() == MouseEvent.BUTTON3
&& event.getClickCount() == 1) {
mContextMenu.show(this, event.getX(), event.getY());
}
revalidate();
repaint();
}
Ich versteh leider nicht, wie ich diesen Ausschluss bei der mouseClicked-Funktion erstellen kann.
Ich hoffe, ich konnte mein Problem klar darstellen. Wenn noch Fragen zum Verständnis sind, bitte posten.
Danke schonmal für Feedback
Schniegelmann