Designfrage zu Komonenten eines JPanels

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo liebe Leute!

Ich habe eine (simple) Frage zum Design von Swing-Applikationen.

Man stelle sich vor eine Programmkomponente wird auf einem
JPanel angezeigt.

In dieser Klasse Haupt-JPanel gibt es:

1. JTable auf dem in Listenform Aufträge amgezeigt werden
2. Einen eigenen JTable der JTable erweitert und die Produkte, des im ersten JTabel ausgewählten anzeigt.
3. Ein Hauptmenu JPanel, auf dem JButtons angezeigt werden, dei je nach Auswahl der Produkte im 2.Jtable enabled werden.
(Diese Komponenten sind Instanzvariablen der Klasse Haupt-JPanel)

Im Prinzip hab ich hier 3 Komponenten, die miteinander kommunizieren müssen.

Beispiel:
Wir im ersten JTable ein Auftrag ausgewählt muss der 2. eigene JTable mit den entsprechenden Produkten gefüllt werden.

Wird im 2. eigen JTabel ein Produkt ausgewählt, wird ein Button im Hauptmenu enabled.

Dies ist ein sehr simples Beispiel, jedoch wie löst man sowas sauber?
Sollt man da echt das Observer Pattern anwenden?
Oder ist das bei so einer relativ simplen Aufgabenstellung nicht übertriebener Aufwand?

Momentan ist es bei mir leider sehr unsauber:
D.h
Jeder Komponente wird die benötigte Kommunikationskomponente im Konstruktor mitübergeben.
Dies führt in diesem Beispiel zu folgendem "desaster":

Der ActionListenr des 1.JTabel mit den Aufträgen wird in der Klasse Haupt-JPanel implementiert.
D.h ich merke bereits in dieser Klasse, wenn ein Auftrag ausgewählt wurde und kann eine Method fülleJTable vom 2. eigenen Jtabel aufrufen. (Ist also kein Problem)

Wird nun im 2. JTable was aufgerufen, soll ein Button des Haupt-JPanel enabled werden.
Der ActionListener des 2. eigen Table befindet sich in der 2.eigenTableKlasse. Hier ist die Sache schon undurchsichtiger, den wie greife ich saueber auf den Button des Haupt-Jpanel zu?
(Wie gesagt, momentan kann ich das, da ich dieser Unterkomponete auch das Haupt-Jpanel übergebn habe)

Wie löst ein Profi sowas?
Wird in verschachtelten GUIs, in denen die eine Aktion in einer Komponente die Darstellung einer anderen beinflusst(Bsp füllen eines JTables, enabeln eins Buttons etc) immer über das Observer-Pattern gelöst?

Ich wäre sehr dankbar für etwaige Hinweise oder Vorschläge.
lg
mas
 
B

Beni

Gast
Wäre das eines meiner Programme, würde ich das folgendermassen lösen: die Listener jeweils als eigene Klasse (kann auch eine innere Klasse sein). Der erste Listener bekommt die beiden Tabellen über den Konstruktor, der zweite eine Tabelle und ein Button. Die zweite Klasse wären nur abstrakt, für jeden Button müsste noch eine Methode implementiert werden, welche entscheidet, ob der Button enabled oder disabled sein sollte (das dürfte aber meistens ein ein-zeiler sein).
Die Instanzen des zweiten Listeners könnte das Panel herstellen, welches auch die Buttons trägt - immerhin weiss dieses Panel am besten, welche Buttons es gibt.

Ob das übertriebener Aufwand ist? Nicht wenn du dein Programm jemals erweitern oder umstellen willst, diese Listener sind nämlich ziemlich unabhängig vom Rest des Programmes.
 
G

Guest

Gast
Hi!
Also leider kann ich dir nicht zu 100Prozent folgen.

Für alle die mitlesen:
Also Klasse1 (Ein JPanel) besitzt: Tabelle1, Tabelle2 und einen Button.
Wenn man in Tabelle1 was auswählt soll der Inhalt in Tabelle2 angezeigt werden.
Wenn man was in Tabelle2 auswählt soll ein Button enabled werden.
Die Tabellen sind in Wirklichkeit eigene komplexe Klassen, die JTable erweitern.
Die Frage war, wie da ein Profi die notwendigen Listener implementiert.


Ich versuchs mal (Totaler PseudoCode)



Code:
Klasse1 
    Tabelle1,Tabelle2,Button1;   //Instanzvariablem

    Tabelle1.addActionListener(listener1)  //Eigenen Listener1 Hinzufügen
    Tabelle2.addActionListener(listerner1) //Eigenen Listener2 Hinzufügen




Klasse Listener1
       Listener1(Tabelle1,Tabelle2)  //Konstruktor (Die beiden Tabellen übergeben)
       Action {Tabelle1.getAuswahl; Tabelle2.fülleMitAuswahl }  //So bei einer Action reagieren


Klasse Listener2
     Listener2(Tabelle2,Button1)   //Konstruktor (Tabelle2 und den Button uebergeben)
     Action {Tabelle1.getAuswahl
; if Auswahl ok Button1.enable } //So bei einer Action reagieren


Tja ich denke nicht, dass du das so in etwa meinst, da du noch von
Zitat "Die Instanzen des zweiten Listeners könnte das Panel herstellen, welches auch die Buttons trägt - immerhin weiss dieses Panel am besten, welche Buttons es gibt. " und "abstrakten Klassen" sprichst.

Ps:Ok das Panel mit den Buttons hab ich zwecks einfachheit hier jetzt rausgenommen und nur einen Button draus gemacht.

PPs: Danke für die Antwort!


Vielleicht kannst du oder jemand anderes mir das nochmal erläutern.
Vielen Dank
mas
 
B

Beni

Gast
Ich versuchs auchmal mit Pseudocode:

Code:
// 1. Tabelle
class Table1{
   ...
}

// 2. Tabelle
class Table2{
  ...
}

// Der 1. Listener, der Table1 und Table2 verbindet.
class Table1Listener implements ActionListener{
  private Table1 table1;
  private Table2 table2;

  public Table1Listener( Table1 table1, Table2 table2 ){
    this.table1 = table1;
    this.table2 = table2;
  }

  public void actionPerformed( ActionEvent e ){
    table2.machWas( 123 );
  }
}

// 2. Listener. Hauptsächlich ein Speicher der Daten - so kann diese abstrakte
// Klasse noch nicht sehr viel.
abstract class Table2Listener implements ActionListener{
  private JButton button;
  private Table2 table;

  public Table2Listener( Table2 table, JButton button ){
    this.table = table;
    this.button = button;
  }

  public void actionPerformed( ActionEvent e ){
    button.setEnabled( shouldEnable( table ));
  }

  protected abstract boolean shouldEnable( Table2 table );
}

// Panel mit den Buttons
class ButtonPanel extends JPanel{
  public ButtonPanel( Table2 table ){
     // Der ominöse Button instanziieren
    JButton knopf = new JButton( "alles löschen" );

    // Das Table2 und den Button "knopf" verbinden. Der Table2Listener ist 
    // abstrakt, deshalb müssen wir eine Unterklasse machen. Dazu reicht aber
    // eine anonyme Klasse wie hier. Die abstrakte Methode "shouldEnable"
    // muss noch implementiert werden - wir können hier gleich die Logik
    // für den Button "knopf" hinschreiben. 
    table.addActionListener( new Table2Listener( table, knopf ){
      protected boolean shouldEnable( Table2 table ){
        return tabel2.hatWasZumLöschen();
      }
    });

    // Der Knopf benötigt auch einen Listener, sonst passiert nichts, 
    // wenn man draufdrückt
    knopf.addActionListener( ... );



   JButton knopf2 = ... // nächster Knopf
  }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q Designfrage zur JMenuBar AWT, Swing, JavaFX & SWT 6
kaoZ Swing Designfrage AWT, Swing, JavaFX & SWT 21
R Swing Designfrage - Zusammenspiel Model / View AWT, Swing, JavaFX & SWT 10
Z Swing Actions Designfrage AWT, Swing, JavaFX & SWT 2
J Swing JApplet Designfrage AWT, Swing, JavaFX & SWT 4
Y Swing Designfrage (MVC) AWT, Swing, JavaFX & SWT 18
J Designfrage bei rechenintensiver Operation AWT, Swing, JavaFX & SWT 7
M SWT ComboBox mit DB-Inhalten Designfrage AWT, Swing, JavaFX & SWT 5
G designfrage zu 2 panels AWT, Swing, JavaFX & SWT 2
J Allgemeine Designfrage ! AWT, Swing, JavaFX & SWT 3
H Zugiff auf Swing Komonenten ? AWT, Swing, JavaFX & SWT 3
M effizient mehrere BufferedImage in eines schreiben AWT, Swing, JavaFX & SWT 6
O Swing Icon verschwindet beim Verschieben eines JLabels AWT, Swing, JavaFX & SWT 8
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
L paintComponent in Panel eines Borderlayouts hinzufügen AWT, Swing, JavaFX & SWT 3
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
Splayfer Umrandung eines AttributedStrings AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
news2swen automatisches erstellen eines Languagefiles AWT, Swing, JavaFX & SWT 1
B Stylen eines JTextPane funktioniert nicht AWT, Swing, JavaFX & SWT 1
MiMa Schliessen eines FXML Fensters? AWT, Swing, JavaFX & SWT 10
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
L AWT Ändern der Farbe eines BufferedImage mit Farbähnlichkeit AWT, Swing, JavaFX & SWT 5
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L JavaFX Validierung eines Spinner AWT, Swing, JavaFX & SWT 1
M Builden eines lauffähigen JAR Files AWT, Swing, JavaFX & SWT 3
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
M JavaFX rotieren eines Kreises mit konstanter Geschwindigkeit AWT, Swing, JavaFX & SWT 1
K JavaFX Allgemeine Fragen zu dem Aufbau eines Programms hinsichtlich der Klassen AWT, Swing, JavaFX & SWT 1
M JavaFX Auf ein UI Elemement eines anderen Controllers zugreifen AWT, Swing, JavaFX & SWT 0
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
Tronert JavaFX Linienstärke eines Separators ändern? AWT, Swing, JavaFX & SWT 3
N JavaFX Group: Gezieltes entfernen eines Objects (Rectangle) AWT, Swing, JavaFX & SWT 0
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Drag and Drop eines Buttons AWT, Swing, JavaFX & SWT 0
M NullPointerException bei Übergabe eines RadioButtons AWT, Swing, JavaFX & SWT 11
DaCrazyJavaExpert Swing Extern den Text eines nicht fetsgelegten Buttons bekommen. AWT, Swing, JavaFX & SWT 12
J JavaFX Rectangle innerhalb eines Rectangle oder Panes positionieren? AWT, Swing, JavaFX & SWT 1
C JavaFX Inhalt eines SplitPane's durch Menü-Auswahl ändern? AWT, Swing, JavaFX & SWT 13
J linken Bildausschnitt eines BufferedImage abschneiden AWT, Swing, JavaFX & SWT 4
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
D LookAndFeel Überschreiben eines UIDelegate AWT, Swing, JavaFX & SWT 0
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D TAB Taste innerhalb eines JSpinner AWT, Swing, JavaFX & SWT 2
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
Cromewell JavaFX Nur bestimmten Teil eines Canvas rendern und anzeigen AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
E Swing Copy und Paste eines einzelnen Knoten aus einem JTree AWT, Swing, JavaFX & SWT 1
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
I JavaFX Langes drücken eines Buttons AWT, Swing, JavaFX & SWT 4
B Swing Wie Witdh und Height eines GuiElements bekommen AWT, Swing, JavaFX & SWT 5
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
J JavaFX Zugriff auf FXML-Variablen eines anderen Controllers AWT, Swing, JavaFX & SWT 2
K Swing Inhalt eines JPanels lesen AWT, Swing, JavaFX & SWT 3
T Nur bestimmte Bereiche eines Fotos bearbeiten AWT, Swing, JavaFX & SWT 0
J Swing Erstellung eines User Interface AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
O Swing Aufbau eines JFrames AWT, Swing, JavaFX & SWT 2
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
A befüllen eines JTables mittels Methode AWT, Swing, JavaFX & SWT 10
javampir Swing Wanderung eines JFrames AWT, Swing, JavaFX & SWT 7
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
G Swing ComboBox: Auswahl eines Items der Liste durch Eingabe eines Buchstabens AWT, Swing, JavaFX & SWT 3
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0
I Erstellung eines kleinen Programmes AWT, Swing, JavaFX & SWT 8
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
T Swing Einzelne Teile eines Textes färben? AWT, Swing, JavaFX & SWT 10
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
HaukeG JavaFX JavaFX Resize und DragAndDrop eines Pane AWT, Swing, JavaFX & SWT 4
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
J Denkfehler bei Aktualisierung eines GUI AWT, Swing, JavaFX & SWT 4
J Logikfehler im erstellen eines GUI AWT, Swing, JavaFX & SWT 3
F JTabbedPane mit Button zum Hinzufügen eines neuen Tabs AWT, Swing, JavaFX & SWT 6
B Event Handling Mausbewegung auch außerhalb eines JFrames registrieren AWT, Swing, JavaFX & SWT 2
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0
C AWT die X koordinate eines Rectangles herrausfinden AWT, Swing, JavaFX & SWT 14
G 2D-Grafik Umrandung eines Winkels (drawArc(..)) AWT, Swing, JavaFX & SWT 4
V Ende eines Frames abwarten AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen


Oben