JDesktopPane bei Button-Klick anzeigen geht nicht

Studdi23

Mitglied
Hallo zusammen,

ich habe ein JDesktopPane in dem ein JInternalframe gepackt ist welches wiederum ein JLabel mit einfachem Text enthält. Das ganze soll beim Klick auf einen Button innerhalb eines JFrames angezeigt werden, bevor eine Klasse aufgerufen wird, die Tabellendaten aus einer Datenbank ließt. Die JDesktopPane-Komponente soll in der Ebene alle anderen Komponenten des JFrame überdecken, was ich mit der Methode "setComponentZOrder" auch hinbekommen hab. Gleichzeitig wird das JFrame mit "setEnabled" deaktiviert, damit der Benutzer während die Datenbankverbindung aufgebaut wird keine anderen Aktionen ausführen kann. Das JLabel zeigt einfach nur einen Hinweis das gerade eine Verbindung hergestellt wird. Ein- und Ausblenden des JDesktopPane wird mit "setVisible()" realisiert. Solange ich den Auruf der Klasse für die Db-Connection auskommentiert lasse klappt auch alles einwandfrei. Ich denke das es etwas mit dem Zustand des Buttons zu tun hat. Solange dieser auf gedrückt steht, können keine bestehenden oder hinzugefügte Komponenten neu gerendered werden. Liege ich in der Annahme richtig? Wie kann ich das Problem umgehen?

Hier ein paar Code-Schnipsel. [EDIT]Hab weiter unten auch noch ein Bild angehängt:[/EDIT]

Java:
private JButton getJButton() {
		JButton jButton = new JButton();
		jButton.setBackground(Color.LIGHT_GRAY);
		jButton.setText("Execute");
		jButton.setToolTipText("SQL Befehl ausführen");
		jButton.setOpaque(true);
		jButton.setFocusable(false);
		jButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String location = locationInput.getText();
				String statement = selectInput.getText();
				if (statement.length() == 0 || statement.equals(JTA_INIT))
					return;
				if (location.length() != 0)
					infoBean.setPersistence_unit_name(location);
				infoBean.setSql_statement(statement);
				showConnectionLabel(true); //Hier soll das JDesktopPane eingeblendet werden
				new DatabaseConnection(infoBean); //Daten werden geholt
				showConnectionLabel(false); //wieder ausblenden
				if (infoBean.getMessages() != null)
					JOptionPane.showMessageDialog(jContentPane,
							infoBean.getMessages());
				dbData.setModel(new AmazonTableModel(infoBean.getResult(),
						columnNames));
			}
		});
		return jButton;
	}

Java:
private void showConnectionLabel(boolean flag) {
		if (flag) {
			this.setEnabled(false);
			connectLabel.setVisible(true);
		} else {
			this.setEnabled(true);
			connectLabel.setVisible(false);
		}
	}

Java:
private JDesktopPane getJDesktopPane() {
		JDesktopPane jDesktopPane = new JDesktopPane();
		jDesktopPane.setPreferredSize(new Dimension(250, 150));
		JInternalFrame jInternalFrame = new JInternalFrame("");
		jInternalFrame.setResizable(false);
		jInternalFrame.setSize(250, 150);
		// jInternalFrame.putClientProperty("JInternalFrame.isPalette",
		// Boolean.TRUE);
		jInternalFrame.setOpaque(true);
		((BasicInternalFrameUI) jInternalFrame.getUI()).setNorthPane(null);
		JLabel jLabel = new JLabel();
		jLabel.setText("Datenbankverbindung wird hergestellt...\n");
		jLabel.setForeground(Color.BLUE);
		jLabel.setFont(new Font("Arial", Font.BOLD, 12));
		jInternalFrame.add(jLabel);
		jInternalFrame.setVisible(true);
		jDesktopPane.add(jInternalFrame);
		jDesktopPane.setVisible(false);
		jDesktopPane.setFocusable(false);
		return jDesktopPane;
	}
 

Anhänge

  • gui.jpg
    gui.jpg
    75,8 KB · Aufrufe: 31
Zuletzt bearbeitet:

Michael...

Top Contributor
Die Datenbankabfrage muss in einem separaten Thread ablaufen, sonst wird der EDT und somit das Zeichen des UI solange blockiert bis die Datenbankabfrage abgeschlossen ist.

Wenn ich das richtig verstehe willst Du mit Deinem Konstrukt aus JLayeredPane, JDesktopPane und JInternalFrame Deine Oberfläche solange "Sperren". Da gibt es bessere Varianten:
- einzelne Elemente gezielt deaktivieren
- mittels CardLayout eine andere Komponente anzeigen
- blockieren mittels einer GlassPane (JFrame.setGlassPane(Component c))
 

Studdi23

Mitglied
Hi und danke erstmal für die Antwort,

woher weiß ich denn wann die Datenbankabfrage im zweiten Thread beendet ist, damit ich die UI-Komponente wieder ausblenden und die interaktiven Elemente wieder freigeben kann? Hab gedacht
Swing läuft generell synchron und blockiert grundsätzlich jede weitere Operation.
Hab mir aber schon gedacht das ich die Applikation in einem separaten Thread ausführen muß. Irgendwelche Anregungen wie ich das am besten umsetzen kann?

Ein GlassPane wäre sicherlich die elegantere Lösung gewesen, aber ich wollte zunächst einmal austesten ob es überhaupt funktioniert bevor ich mir weiter Gedanken über das Layout mache :)

Gruß
Mario
 

Studdi23

Mitglied
So das ging jetzt schneller als erwartet. Hab zwischenzeitlich eine Library für asynchrones Swing gefunden. Mit folgender Implementierung funktionierts hervorragend (Just 4 Info):

Java:
@Override
			public void actionPerformed(ActionEvent e) {
				String location = locationInput.getText();
				String statement = selectInput.getText();
				if (statement.length() == 0 || statement.equals(JTA_INIT))
					return;
				if (location.length() != 0)
					infoBean.setPersistence_unit_name(location);
				infoBean.setSql_statement(statement);
				showConnectionLabel(true);
				AsynchronousOperation<Object> callback = new AsynchronousOperation<Object>(){

					@Override
					protected Object performOperation() throws Exception {
						showConnectionLabel(true);
						new DatabaseConnection(infoBean);
						return null;
					}
					
					@Override
					protected void onComplete()
					{
						showConnectionLabel(false);
					}

					@Override
					protected void onSuccess(Object result){
						dbData.setModel(new AmazonTableModel(infoBean.getResult(),columnNames));
						if (infoBean.getMessages() != null)
							JOptionPane.showMessageDialog(jContentPane,
									infoBean.getMessages());
					}
				};
				SwingUtilities.invokeLater(callback);
			}
		});
		return jButton;
	}

:toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
olfibits Swing JavaFX-Frame in JDesktopPane darstellen? AWT, Swing, JavaFX & SWT 2
D JinternaFrame Steuerung in JDesktopPane AWT, Swing, JavaFX & SWT 5
J Swing Z-Order in einer JDesktopPane AWT, Swing, JavaFX & SWT 15
H Swing JInternalFrame, JDesktopPane und ein BorderLayout AWT, Swing, JavaFX & SWT 2
J JDesktopPane: Aero für JInternalFrames AWT, Swing, JavaFX & SWT 3
M JDesktopPane AWT, Swing, JavaFX & SWT 4
M JDesktopPane "bestücken" AWT, Swing, JavaFX & SWT 4
M width und height bei JDesktopPane AWT, Swing, JavaFX & SWT 3
A JDesktopPane + Interne Programmicons AWT, Swing, JavaFX & SWT 5
M4nuel Warum überlagert JDesktopPane mein JMenuBar? AWT, Swing, JavaFX & SWT 5
S JDesktopPane wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 3
DeeDee0815 JDesktopPane scrollbar AWT, Swing, JavaFX & SWT 2
S Problem mit JDesktopPane AWT, Swing, JavaFX & SWT 11
C JdesktopPane Hintergrundbild AWT, Swing, JavaFX & SWT 6
S JDesktopPane mit JSplitPane und JTree AWT, Swing, JavaFX & SWT 3
G 2 Fragen JDesktopPane AWT, Swing, JavaFX & SWT 4
G kleine JDesktopPane problem AWT, Swing, JavaFX & SWT 2
F Bild in JInternalFrame in JDesktopPane - GrößenProblem ?! AWT, Swing, JavaFX & SWT 4
J jinternalframe ohne jdesktoppane AWT, Swing, JavaFX & SWT 3
C Button ActionListener funktioniert nicht AWT, Swing, JavaFX & SWT 1
G Button auswerten und ausgeben ob richtig oder falsch AWT, Swing, JavaFX & SWT 1
D Button und Textfeld Darstellung AWT, Swing, JavaFX & SWT 3
H Button / Design Ideen AWT, Swing, JavaFX & SWT 2
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
B JavaFX Sprachumschaltung mit Button auf der HMI AWT, Swing, JavaFX & SWT 6
T TableView Button onAction AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
JavaBeginner22 Button Hilfe AWT, Swing, JavaFX & SWT 0
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
J Button-Keyboard Interaktion AWT, Swing, JavaFX & SWT 7
EinNickname9 Swing Button mittig positionieren AWT, Swing, JavaFX & SWT 4
L actionListener für Button AWT, Swing, JavaFX & SWT 97
melaniemueller Verschiebung eines Fensters über Button AWT, Swing, JavaFX & SWT 27
I JavaFX Hover-Effekt bei Button AWT, Swing, JavaFX & SWT 11
Zeppi Swing Button soll Spiel zurücksetzen AWT, Swing, JavaFX & SWT 5
G Button Strings Effektiver setzen AWT, Swing, JavaFX & SWT 3
CptK windowClosed() nur aufrufen, wenn Fenster nicht über Button geschlossen wird AWT, Swing, JavaFX & SWT 1
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
B Text mit Absatz + OK-Button, der Fenster wieder schließt AWT, Swing, JavaFX & SWT 7
T Button für GUI programmieren AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
W JavaFX Button - optimale Breite berechnen AWT, Swing, JavaFX & SWT 1
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
VPChief Swing Eclipse: Nach Exportieren, Button funktioniert nicht mehr AWT, Swing, JavaFX & SWT 26
Z Button bewegen und Plätze tauschen AWT, Swing, JavaFX & SWT 4
Z Swing Button anklicken und bewegen AWT, Swing, JavaFX & SWT 2
K JavaFX Button verbinden AWT, Swing, JavaFX & SWT 6
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
M JavaFX Button action abhängigkeit von Tab AWT, Swing, JavaFX & SWT 1
A Swing JTextField an Button übergeben für Popup-Fenster funktioniert nicht AWT, Swing, JavaFX & SWT 3
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
L Button Funktion zuweisen in WindowBuilder AWT, Swing, JavaFX & SWT 22
A Button mit Speicher-Funktion AWT, Swing, JavaFX & SWT 8
krgewb Swing Icon von Button AWT, Swing, JavaFX & SWT 12
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
Bluedaishi JavaFX Button Image aus Datenbank AWT, Swing, JavaFX & SWT 13
CptK Swing Button: ImageIcon unter den Text AWT, Swing, JavaFX & SWT 4
Ø Swing Button in anderer Klassen ausführen AWT, Swing, JavaFX & SWT 6
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
cool_brivk24 Swing Button Farbe ändern AWT, Swing, JavaFX & SWT 2
K JavaFX TextInputDialog Button Text ändern AWT, Swing, JavaFX & SWT 1
L ActionListener zu Button in Panel hinzufügen AWT, Swing, JavaFX & SWT 10
J Aus welchen Grund wird der Button nicht angezeigt im GridPane? AWT, Swing, JavaFX & SWT 1
S GUI Schließen Button auf der linken Seite AWT, Swing, JavaFX & SWT 2
J Swing Bild in Button AWT, Swing, JavaFX & SWT 11
das_leon AWT Button Design ändern AWT, Swing, JavaFX & SWT 5
J Thread per Button starten AWT, Swing, JavaFX & SWT 10
E Button verschwindet nachdem ein Rechteck gezeichnet wurde AWT, Swing, JavaFX & SWT 5
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
emma_louisa JavaFX MenuBar Zweitfenster; bei Button "Abbrechen" nur das Zweitfenster schließen AWT, Swing, JavaFX & SWT 2
I JavaFX: "globaler Button" AWT, Swing, JavaFX & SWT 0
M JavaFX ActionEvent Button AWT, Swing, JavaFX & SWT 6
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
Q AWT TicTacToe Image auf Button hinzufügen AWT, Swing, JavaFX & SWT 5
H JavaFX - Button und Text - Falsche Darstellung AWT, Swing, JavaFX & SWT 3
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
it_is_all Swing Button, ComboBox,... -- Unterschied: NetBeans Design <-> Ausführung AWT, Swing, JavaFX & SWT 2
B FXML GUI - Button ausblenden AWT, Swing, JavaFX & SWT 1
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
L Suchergebnisse variabel mit Button anzeigen lassen AWT, Swing, JavaFX & SWT 3
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
J Event Handling Button "enablen" wenn Eingaben in Textfeldern korrekt sind AWT, Swing, JavaFX & SWT 1
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
U JavaFX Wechsel der Scene nach betätigen eines Button AWT, Swing, JavaFX & SWT 2
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
E Fehler bei Button AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
GreenTeaYT Button funktioniert nicht für Ein-und Auszahlungen? AWT, Swing, JavaFX & SWT 8
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
S per Button Variableninhalt aus anderer Klasse holen AWT, Swing, JavaFX & SWT 3
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
MaxG. Swing Bild Button AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen


Oben