Swing Frage zu jDialog

gottfried

Mitglied
Hallo
ich habe einen jDialog mit einer jTable erstellt, in die Daten aus einer Datenbank geladen werden. Der Dialog dient zur Auswahl eines Datensatzes. Dazu muss eine Zeile markiert sein. Ergibt die Suche nur einen Datensatz in der Tabelle, wird das Markieren gern vergessen. Dann muss der Dialog jedesmal neu aufgerufen werden. Ich hatte nun die Idee, den Button, der den Dialog schließt und die Auswahl speichert inaktiv zu schalten und erst zu aktivieren, wenn ein Datensatz markiert wurde. Das scheint aber mit der speziellen dispose(); Funktion des Buttons nicht realisierbar zu sein. Der Konstruktor:
Java:
public DialogVE(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        buttonA.addActionListener((ActionEvent e) -> {
            dispose();
        });
        buttonC.addActionListener((ActionEvent e) -> {
            LabelC.setText("C");
            dispose();
        });
    }
buttonC ist zum Abbrechen, wenn "C" für Cancel im versteckten Feld eingefügt wurde wird nach dem Schließen kein weiterer Code ausgeführt.
Gibt es unter den gegebenen Umständen eine Möglichkeit, das Schließen des Dialoges zu verhindern, wenn kein Datensatz in der Tabelle ausgewählt ist?
vielen Dank
Gottfried
 

KonradN

Super-Moderator
Mitarbeiter
Hie musst Du auf die Events reagieren, die bei Änderungen der Auswahl entstehen.

Das wäre dann etwas in der Art:
Java:
ListSelectionModel selectionModel = table.getSelectionModel(); // table wäre die jTable
selectionModel.addListSelectionListener(e -> {
    if (selectedRow != -1) {
        buttonA.setEnabled(true);
    } else {
        buttonA.setEnabled(false);
    }
});

Wenn es keine Auswahl gibt, dann wird der JButton deaktiviert und wenn eine Reihe selektiert wurde, dann wird der JButton aktiviert.

Und da am Anfang ja nichts markiert wurde, wäre der Knopf auch direkt zu deaktivieren.
 

gottfried

Mitglied
Hallo KonrradN
"Und da am Anfang ja nichts markiert wurde, wäre der Knopf auch direkt zu deaktivieren."
Genau das habe ich als ersten Schritt probeweise mal gemacht und es hatte keine Wirkung.
Java:
buttonA.setEnabled(false);
war gesetzt und man konnte ihn trotzdem wie gewohnt betätigen. Deswegen habe ich ja auf die Details im Konstruktor verwiesen.
Die Frage ist, ob man zwischen
Code:
dialog.setVisible(true);
und
Code:
dispose();
überhaupt Zugriff auf die Eigenschaften hat.
 

Robert Zenz

Top Contributor
Der Dialog dient zur Auswahl eines Datensatzes. Dazu muss eine Zeile markiert sein. Ergibt die Suche nur einen Datensatz in der Tabelle, wird das Markieren gern vergessen.
Waere es vielleicht gut dann bei nur einem Datensatz immer diesen zu nehmen? Klingt so als wuerden die Benutzer so ein Verhalten ohnehin erwarten. Also um Konrads Anwort aufzugreifen waere das sowas wie:

Java:
// Init
if (table.getRowCount() != 1) {
    buttonA.setEnabled(false);
}

// ...

ListSelectionModel selectionModel = table.getSelectionModel(); // table wäre die jTable
selectionModel.addListSelectionListener(e -> {
    if (table.getRowCount() == 1) {
        return;
    }

    if (selectedRow != -1) {
        buttonA.setEnabled(true);
    } else {
        buttonA.setEnabled(false);
    }
});

Das wuerde den Benutzern zumindest etwas Frust ersparen.
 

KonradN

Super-Moderator
Mitarbeiter
Die Frage ist, ob man zwischen
Code:
dialog.setVisible(true);
und
Code:
dispose();
überhaupt Zugriff auf die Eigenschaften hat.
Also hier ist die Frage, wie dein Code genau aussieht. Du musst natürlich aufpassen, was für einen Ablauf Du genau hast und ob Code ausgeführt wird. Generell kannst Du selbstverständlich die Elemente anpassen und ein Anpassen ändert auch die entsprechenden Attribute. Aber Wenn Du einen Dialog modal aufrufen solltest, dann ist natürlich der Ablauf an der Stelle sozusagen angehalten.

Aber den modalen Dialog baust Du ja irgendwo auf und das sollte eigentlich in sich gekapselt sein. Du hast also mindestens eine Methode, die Dir den dialog aufbaut, wenn nicht eine eigene Klasse. Und da hast Du dann halt die Erstellung des buttonA mit drin also eine Stelle wie
buttonA = new JButton("OK");
oder so. Und da kannst Du direkt anschliessen:
buttonA.setEnabled(false);
Das gehört ja mit zum Aufbau Deines Dialoges.

Bezüglich des Hinweises von @Robert Zenz: Das ging mit auch durch den Kopf. Bei der Lösung nur der Hinweis: Das muss dann natürlich auch geprüft werden ehe Du den Button deaktivierst. Sprich: die Prüfung würde ich schon bei Erstellung des Dialogs machen um dann diesen SelectionListener und das Deaktivieren des Knopfes nur zu machen, wenn mehr wie ein Element vorhanden ist.
 

gottfried

Mitglied
Hallo, danke für eure Hilfe
der Button ist nun in der Klasse der Dialog Erstellung deaktiviert. Ich habe es mit dem ListSelectionModel versucht, konnte die Bibliothek dazu aber nicht importieren. Deshalb habe ich der Tabelle ein Mouse Event hinzugefügt:
Java:
private void jTableAMouseClicked(java.awt.event.MouseEvent evt) {                                     
             buttonA.setEnabled(true);   
    }
Das aktiviert den Button beim Markieren einer Zeile.
viele Grüße
Gottfried
 

KonradN

Super-Moderator
Mitarbeiter
Ich habe es mit dem ListSelectionModel versucht, konnte die Bibliothek dazu aber nicht importieren.
Da ist keine Bibliothek zu importieren. Wenn Du JTable nutzt, dann hast Du auch ListSelectionModel bereits mit drin. Das ist alles in dem Java Framework enthalten. Und ebenso wie JTable ist die Klasse im java.desktop Modul im Package javax.swing:

Und wenn der Benutzer die Selektion wieder entfernt, dann bleibt der Button bei Deiner Lösung aktiv. Und wenn der Benutzer die Maus nicht nutzt sondern den Dialog per Tastatur nutzt, dann wird der Knopf nicht aktiviert. (Ich weiss jetzt nicht, ob ein Benutzer beides per default direkt kann, letzteres sollte immer möglich sein!)
 

gottfried

Mitglied
Hallo KonradN
da ich mit Netbeans arbeite, muss ich die Änderungen an der Dialog-Klasse in der Design-Ansicht des Dialogs im Kontextmenü der Tabelle mit
Customize Code machen. Ich hatte den Code dort wohl an der falschen Stelle eingefügt. Ich habe es jetzt nochmal versucht und so siehts aus:
Java:
ListSelectionModel selectionModel = jTableA.getSelectionModel();
        selectionModel.addListSelectionListener(e -> {
            int row = jTableA.getSelectedRow();
            if (row != -1) {
                buttonA.setEnabled(true);
            } else {
                buttonA.setEnabled(false);
            }
und es funktioniert, auch mit der Tastatur.
vielen Dank nochmal
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
N Swing Frage zu modalem JDialog. AWT, Swing, JavaFX & SWT 16
F Frage zu Dialogen mit JDialog -Erstellung des Konstruktors AWT, Swing, JavaFX & SWT 3
L Eine Frage zu JPanel + eine weitere zu JDialog AWT, Swing, JavaFX & SWT 6
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
MJannek Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben