Hallo,
ich schreibe grade an einem einfachen WYSIWYG Editor für einfache Swingoberflächen (Der Anwender soll am Ende bestimmte Teile der Oberfläche neu ordnen und entfernen können).
Dafür gibt es eine Liste mit Komponenten die in einem tabellarischen Layout plaziert werden können. Diese Komponenten sollen in der Ansicht auch gezeichnet werden um es möglichst einfach und anschaulich zu machen (ein typischer LayoutDesigner halt). Weil es sich teilweise auch um komplexe und zusammengesetze Komponenten handelt kommen Grafiken oder ähnliches dafür leider nicht in Frage.
Zuerst hab ich "dirty" versucht die JComponent in einer Bufferkompente einfach in den Graphicskontext zu zeichnen ohne sie hinzuzufügen - vereinfachtes Beispiel:
Erstaunlicherweise funktioniert das für einfache Elemente(JTextField, JCheckBox,etc.) sogar, aber sobald Panels mit Layouts oder so dazu kommen geht das erwartungsgemäß komplett daneben.
Ein setEnabled(false) auf die Komponente zu setzen geht leider auch nicht so einfach, weil ich die MouseEvents der kompletten Fläche für die Layouterfunktion brauche(und einige Komponenten auch ein stranges Verhalten haben - e.g. sich teilweise selbst wieder enablen)
Hat irgendjemand vielleicht eine Idee wie man das elegant lösen könnte?
ich schreibe grade an einem einfachen WYSIWYG Editor für einfache Swingoberflächen (Der Anwender soll am Ende bestimmte Teile der Oberfläche neu ordnen und entfernen können).
Dafür gibt es eine Liste mit Komponenten die in einem tabellarischen Layout plaziert werden können. Diese Komponenten sollen in der Ansicht auch gezeichnet werden um es möglichst einfach und anschaulich zu machen (ein typischer LayoutDesigner halt). Weil es sich teilweise auch um komplexe und zusammengesetze Komponenten handelt kommen Grafiken oder ähnliches dafür leider nicht in Frage.
Zuerst hab ich "dirty" versucht die JComponent in einer Bufferkompente einfach in den Graphicskontext zu zeichnen ohne sie hinzuzufügen - vereinfachtes Beispiel:
Java:
private class PaintComponent extends JComponent {
private JComponent component;
private PaintComponent(final JComponent pComponent) {
component = pComponent;
}
@Override
public void paint(final Graphics g) {
super.paint(g);
component.setLocation(0, 0);
component.setSize(getSize());
component.paint(g);
}
}
Erstaunlicherweise funktioniert das für einfache Elemente(JTextField, JCheckBox,etc.) sogar, aber sobald Panels mit Layouts oder so dazu kommen geht das erwartungsgemäß komplett daneben.
Ein setEnabled(false) auf die Komponente zu setzen geht leider auch nicht so einfach, weil ich die MouseEvents der kompletten Fläche für die Layouterfunktion brauche(und einige Komponenten auch ein stranges Verhalten haben - e.g. sich teilweise selbst wieder enablen)
Hat irgendjemand vielleicht eine Idee wie man das elegant lösen könnte?