Eigenes Panel aus Component?

mabuhay

Bekanntes Mitglied
Hallo

Ich baue mir oftmals eigene grafische Komponenten in Java für die spätere Wiederverwendung, und die basieren meistens auf einem JPanel. Nun zu meiner Frage/meinem Problem:

Ich baue gerade eine Komponente welche Items (jedes Item ist ein JPanel mit speziellem Inhalt) vertikal untereinander auflistet. Als Basis habe ich bis jetzt ein JPanel genommen. Das Problem ist nun, dass ich bei meiner Komponente eine addItem()-Methode habe welche neue Items hinzufügt. Das JPanel hat aber schon die add()-Methoden. Verwende ich die Komponente nun irgendwo ist es nicht schön wenn es die add()-Methode gibt obwohl die eigentlich nicht verwendet werden sollte.

Ich habe nun gedacht ich nehme anstelle des JPanels einfach eine Component, aber da kann ich ja dann meine Items nicht hinzufügen da es keine add()-Methode gibt, obwohl ich die ja auch nicht will, aber eben doch brauche, .......

Hat mir jemand einen Hinweis wie man normalerweise eine grafische Komponente erstellt?

mfg
 
Also ich würde mir nun den Quelltext der Klasse JPanel ansehen um festzustellen, dass diese JComponent erweitert. Wieso erweiterst du nicht ebenfalls einfach JComponent?
 
Ja hab ich ja auch gemacht, aber JComponent hat dann auch die add()-Methode von Container...

Also was ich gerne hätte ist eine Komponente, welche ich irgendwo im Gui anzeigen kann, jedoch so wenig Methoden wie möglich schon integriert hat. Ich weiss ja nicht obs das gibt oder aus Java-Sicht Sinn macht, aber toll wärs.

mfg
 
EDIT: Hoppala, da hätte ich wohl erst mal reload drücken sollen 😳

Weil auch JComponent von Container erbt, und damit die unerwünschte add-Methode hat. Aber das ist "normal". Die Vererbungshierarchie ist an dieser Stelle ... eigentlich murks, aber das hat sich wohl aus der Evolution von AWT nach Swing so ergeben. Theoretisch könnte man schauen, ob man add überschreiben kann, so dass eine UnsupportedOperationException geworfen wird (und intern würde man dann eben nur addImpl verwenden, um die eigenen Items hinzuzufügen). Tatsächlich ist es aber eher so, dass man damit leben muss. Auch ein JButton hat eine add-Methode, und man könnte sowas machen wie
button.add(new JTextArea());
wo auch irgendwas kaputtes rauskommen muss. An manchen Stellen muss man einfach antizipieren, dass man eine API entweder richtig oder falsch verwenden kann. Ersteres sollte leicht sein, und letzteres im Idealfall unmöglich, aber das schafft man in nicht-trivialen Fällen eigentlich nie....
 
Danke für deine Antwort Marco13. Ja ich sehe deinen Standpunkt, und ausserdem sind in der Javadoc ja nur meine eigenen Methoden aufgelistet, die Vererbten Methoden werden ja nicht explizit angezeigt.

mfg
 
Warum baust du denn überhaupt die ganzen Komponenten. Wäre es nicht vorteilhafter, nur LayoutManager zu bauen? Dann kannst du sie z. B. auch JLabels verwenden, wenn du ein Hintergrundbild brauchst etc. Mit einen vertikalen Layoutmanager (gibt dafür bereits das BoxLayout) spielt es keine Rolle, ob du irgendwelche CD-Hüllen untereinander darstellen oder eine Speisekarte bauen willst. Wenn du das Item dann noch auf die Componenten-Klasse reduzierst kannst du auch die vorgefertigten add(Comp, [int]) bzw. add(Comp, [int], Object) benutzen.

Fändest du das nicht sehr viel besser und auch wiederverwendbarer, als gleich das ganze JPanel zu schreiben?

btw. meinst du geerbten? Die werden auffelistet:
Code:
Methods inherited from ...
 
Zuletzt bearbeitet:

Zurück
Oben