Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
könnt ihr mir sagen welchen Grund es hat das die vier Methoden der Schnittstelle TreeModelListener public sind?
Code:
public void treeNodesChanged(TreeModelEvent e) {}
public void treeNodesInserted(TreeModelEvent e) {}
public void treeNodesRemoved(TreeModelEvent e) {}
public void treeStructureChanged(TreeModelEvent e) {}
JTree ist doch nach dem MVC Entwurfmuster implementiert. Also müßte das Model des JTrees ja für jeden an ihm angemeldeten TreeModelListener eine entsprechende Referenz enthalten. Wegen dem Model des JTrees müßten die Methoden dann doch nicht public sein.
Habs gerade nochmal ausprobiert... was ich erzählt habe war schon richtig, aber darum geht es gar nicht. Probier doch das mal aus:
Code:
//test1\TestListener.java
package test1;
public interface TestListener
{
void somethingHappened();
}
Code:
//test1\InterfaceTest.java
package test1;
import java.util.*;
public class InterfaceTest
{
private List<TestListener> listeners = new ArrayList<TestListener>();
public void addTestListener (TestListener tl)
{
listeners.add (tl);
}
public void removeTestListener (TestListener tl)
{
listeners.remove (tl);
}
private void notifyListeners()
{
for (TestListener tl : listeners){
tl.somethingHappened();
}
}
}
Code:
//test2\TestImplementor.java
package test2;
import test1.TestListener;
public class TestImplementor implements TestListener
{
void somethingHappened()
{
System.out.println("something happened");
}
}
Compiler-Ausgabe:
test2\TestImplementor.java:7: somethingHappened() in test2.TestImplementor cannot implement somethingHappened() in test1.TestListener; attempting to assign weaker access privileges; was public
void somethingHappened()
1 error
D.h. ob du in interfaces public schreibst oder nicht, die Methoden sin immer public (private oder protected sind verboten). Der Grund dafür ist, was ich oben erklärt habe.
JTree ist doch nach dem MVC Entwurfmuster implementiert. Also müßte das Model des JTrees ja für jeden an ihm angemeldeten TreeModelListener eine entsprechende Referenz enthalten. Wegen dem Model des JTrees müßten die Methoden dann doch nicht public sein.
die Argumentation versteh ich nicht - wieso dürfen dann die methoden nicht public sein ? wie willst du sonst auf die Methoden des Listeners zugreifen ? es ist ja nicht bekannt in welchen packages deine Klassen liegen... private fällt ja so und so weg, protected und default auch (keine Vererbung bzw. möglichkeit von untersch. packages)... ergo bleibt nur public und daran ist nichts falsches !