Hallo ihr Lieben,
ich habe ein Problem mit Referenzen zwischen verschiedenen Klassen und ich hoffe sehr, dass ihr mir vielleicht weiterhelfen könnt.
Folgender Kontext: Ich bin dabei einen UML-Editor mit Swing zu bauen. Es gibt eine Klasse TickFrame, in der das Zeichenpanel definiert wird, auf dem später die Boxen auftauchen (die die Klassen representieren). Zusätzlich zum Zeichenpanel gibt es ein Buttonpanel, auf dem (im Moment) zwei Buttons sind: "Add Class" und "Add Arrow".
Nun soll es möglich sein, nachdem man auf "Add Arrow" geklickt hat, zwei Boxen anzuklicken, die daraufhin mit einem Pfeil verbunden werden. Nun weiß ich aber nicht, wie ich von dem MouseListener der Boxen (die in einer separaten Klasse ClassBox definiert sind) kontrollieren kann, ob vorher auch wirklich der Button gedrückt wurde.
Vielleicht mal ein bissel Code zur Anschauung:
Könnt ihr mir weiterhelfen? Hat jemand n Vorschlag, wie ich die in TickFrame erzeugte Instanz von Arrow an den Mann/MouseListener von ClassBox bringe?
Danke... :wink:
ich habe ein Problem mit Referenzen zwischen verschiedenen Klassen und ich hoffe sehr, dass ihr mir vielleicht weiterhelfen könnt.
Folgender Kontext: Ich bin dabei einen UML-Editor mit Swing zu bauen. Es gibt eine Klasse TickFrame, in der das Zeichenpanel definiert wird, auf dem später die Boxen auftauchen (die die Klassen representieren). Zusätzlich zum Zeichenpanel gibt es ein Buttonpanel, auf dem (im Moment) zwei Buttons sind: "Add Class" und "Add Arrow".
Nun soll es möglich sein, nachdem man auf "Add Arrow" geklickt hat, zwei Boxen anzuklicken, die daraufhin mit einem Pfeil verbunden werden. Nun weiß ich aber nicht, wie ich von dem MouseListener der Boxen (die in einer separaten Klasse ClassBox definiert sind) kontrollieren kann, ob vorher auch wirklich der Button gedrückt wurde.
Vielleicht mal ein bissel Code zur Anschauung:
Code:
[b]TICKFRAME[/b]
add_arrow_button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
addArrowButtonActionPerformed(evt);
}
});
private void addArrowButtonActionPerformed(ActionEvent evt)
{
activeArrow = new Arrow(main_panel); // definiert als globale Variable: "private Arrow activeArrow"
}
Code:
[b]CLASSBOX[/b]
public void mouseClicked(MouseEvent evt)
{
System.out.println("mouseClicked - clickInsideBox");
this.setBorder(BorderFactory.createLineBorder(Color.red,2));
this.requestFocus();
if (evt.getClickCount() == 2)
{
String[] temp = new String[c_methods.length+1];
System.arraycopy(c_methods, 0, temp, 0, c_methods.length);
int l = c_methods.length;
c_methods = temp;
c_methods[l+1] = (String) JOptionPane.showInputDialog(frame,
"Enter method name #" + (l+1),
"Methods",
JOptionPane.PLAIN_MESSAGE,
null,
null,
"Enter the new method name here...");
JLabel nmeth = new JLabel(temp[l+1]);
this.add(nmeth);
repaint();
/* Code-Idee - funktioniert aber nicht, da activeArrow nicht referenziert werden kann...
if(activeArrow != null)
{
if(!(activeArrow.currentSet)) activeArrow.setCurrent(cb);
else activeArrow.setConnect(cb);
}*/
}
}
Code:
[b]ARROW[/b]
public void setCurrent(ClassBox firstBox)
{
current = firstBox;
currentSet = true;
System.out.println("Current set");
}
public void setConnect(ClassBox secondBox)
{
connect = secondBox;
connectSet = true;
System.out.println("Connect set");
calculate();
}
Könnt ihr mir weiterhelfen? Hat jemand n Vorschlag, wie ich die in TickFrame erzeugte Instanz von Arrow an den Mann/MouseListener von ClassBox bringe?
Danke... :wink: