Schließen der GUI auf knopfdruck

Status
Nicht offen für weitere Antworten.

Don83

Bekanntes Mitglied
Hallo,
ich habe eine kleine GUI geschrieben. Jetzt bin ich aber gerade ein wenig am Rätseln.
Ich würde gerne beim drücken des Knopfes "Run" die GUI schließen.

[HIGHLIGHT="Java"]import gov.nih.nlm.kss.api.KSSRetrieverV5_0;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;

import org.w3c.dom.Document;



import rmi.RMIClient;
import rmi.XMLBaseGenerator;


public class UMLS_Test extends JFrame{

private String language="ENG";
private String manipType="Word";
private String method="getCUI";
private String sources="standard";
private String term="";

private String[] langOptions = { "ENG", "GER" };
private String[] manipOptions = { "Word", "NormalizeString","NormalizeWord","ExactMatch","TruncateRight","TruncateLeft","ApproxMatch" };
private String[] methodOptions = { "getCUI", "getConcept" };
private String[] vectorOptions = { "standard", "all" };


private JLabel termLabel = new JLabel("Term");
private JLabel langLabel = new JLabel("Lanuage");
private JLabel manipLabel = new JLabel("ManipType");
private JLabel methodLabel = new JLabel("Method");
private JLabel vectorLabel = new JLabel("Source") ;

private JTextField termField = new JTextField(35);
private JComboBox langBox = new JComboBox();
private JComboBox manipBox = new JComboBox();
private JComboBox methodBox = new JComboBox();
private JComboBox vectorBox = new JComboBox();

public UMLS_Test(String name){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle(name);
this.setSize(520, 130);
Container inhalt = this.getContentPane();
JTable oberEbene = new JTable();
oberEbene.setLayout(new FlowLayout());
inhalt.add(oberEbene);
JPanel ersteEbene = new JPanel(new GridLayout(2,4));
oberEbene.add(ersteEbene);
JButton Runbutton = new JButton("Run");
oberEbene.add(termLabel);
oberEbene.add(termField);
oberEbene.add(Runbutton);


ersteEbene.add(langLabel);
ersteEbene.add(manipLabel);
ersteEbene.add(methodLabel);
ersteEbene.add(vectorLabel);
// Sprach Optionen:
for (int i = 0; i < 2; i++){
this.langBox.addItem(langOptions);}
ersteEbene.add(langBox);
langBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
language=(String) ((JComboBox) e.getSource()).getSelectedItem();
}
});


// ManipType Optionen:
for (int j = 0; j < 7; j++){
this.manipBox.addItem(manipOptions[j]);}
ersteEbene.add(manipBox);
manipBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
manipType=(String) ((JComboBox) e.getSource()).getSelectedItem();
}
});

//Method Optionen:
for (int k = 0; k < 2; k++){
this.methodBox.addItem(methodOptions[k]);}
ersteEbene.add(methodBox);
methodBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
method=(String) ((JComboBox) e.getSource()).getSelectedItem();
}
});

//Vector Optionen:
for (int l = 0; l < 2; l++){
this.vectorBox.addItem(vectorOptions[l]);}
ersteEbene.add(vectorBox);
vectorBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sources=(String) ((JComboBox) e.getSource()).getSelectedItem();
}
});

termField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
term=(String) ((JTextField) e.getSource()).getText();
System.out.println("Search Term: \""+term+"\"");
}
});

Runbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Run Method \""+ method+"\" in language \""+language+"\" with manipType set to \""+manipType+"\" and with usage of "+sources+ " sources.");

}
});

// display the GUI
this.setVisible(true);
}


public static void main(String[] args) {
UMLS_Test gui = new UMLS_Test("LRSMed-Tester");
//String search_fulltext = "ACUTE PULMONARY HEART DISEASE NOS"; //sollte klappen
//String search_fulltext ="ACUTE RHEUMATIC HEART DISEASE";
//String search_fulltext = "Heart";

//String language = "ENG"; // oder GER... vom Formular kommt hier eine
//Vector vecSabs = null;
//XMLBaseGenerator xmlParser= null;
/* 1(GER) oder 2(ENG)
// Wenn Sprache englisch oder Deutsch werden mit "getSabsVectorDe", oder
// "getSabsVectorEn" folgende Vectoren angelegt:
// Also die Vectoren werden mit den jeweils 10 aktuellen Quellabkürzungen
gefüllt.*/

//Vector sabsDe = new Vector();
//Vector sabsEn = new Vector();
// jeweils 10 Werte noch einfügen => TODO: mal in umls_data.xml nachsehen
//sabsDe.add("MSHGER");
//sabsEn.add("MSH");
//sabsEn.add("WHO");
//sabsEn.add("");
// Wenn der Vector ganz leer ist => Endlosschleife
// hier wird dann wenn Englisch der englische vector genommen bzw deutsche
// vecSabs= sabsEn; // das is jetzt der englische vector einfach.
/* DOM = Document Object Model=>
* Den Document teil verstehe ich noch nicht.
* */

//RMIClient c= new RMIClient();
//c.connectedUmlsks();
//String result=c.findConcept( search_fulltext, vecSabs, language ,KSSRetrieverV5_0.NormalizeWord);
//String result=c.findCUI( search_fulltext, vecSabs, language ,KSSRetrieverV5_0.Word);//TruncateRight,ExactMatch
//String result=c.getContext(search_fulltext);
// c.disconnectedUmlsks();
//System.out.println(result);

}
}[/HIGHLIGHT]


Desweiteren würde ich gerne mit dem Actionlistener den Text aus dem JField (termField) direkt übernehmen.
Momentan ist es so, dass man den Text eintippen muss, dann enter drückt und erst dann wird der String term aktualisiert. Schöner fänd ichs wenn man kein enter drücken müsste. Aber ist nur ein testmodul für mich selber, also egal, allerdings, das mit dem close button fände ich schon gut, weiß jemand was man da genau anzustellen hat?
 
Zuletzt bearbeitet von einem Moderator:

mvitz

Top Contributor
Um den JFrame zu schließen, musst du im ActionListener die Methode [HIGHLIGHT="Java"]dispose()[/HIGHLIGHT] aufrufen.
Das Problem mit dem Textfield, wirst du wohl mit einem ActionListener nicht lösen können. Dafür muss man afaik an das Document, dass das Textfield verwendet einen Listener anhängen, aber da kann dir bestimmt wer adneres bei helfen.
 

Hadernlump

Mitglied
Füg doch dem Textfeld einen Keylistener hinzu, so das die Aktuallisierung nach jedem eingegebenen oder gelöschten Zeichen vorgenommen wird.

Gruß Hadernlump
 

Ebenius

Top Contributor
Um den JFrame zu schließen, musst du im ActionListener die Methode [HIGHLIGHT="Java"]dispose()[/HIGHLIGHT] aufrufen.
Wenn Du das Fenster nur verstecken und dann wieder anzeigen willst, nimm setVisible(false), wenn Du's gar nicht mehr (oder längere Zeit nicht) benötigst, dann nimm dispose().

Ebenius
 

Mostly_Harmless

Aktives Mitglied
Wenn Du das Fenster nur verstecken und dann wieder anzeigen willst, nimm setVisible(false), wenn Du's gar nicht mehr (oder längere Zeit nicht) benötigst, dann nimm dispose().

Was genau macht dispose() eigentlich?
Ich meine, man kann ja nach dem Aufruf von dispose() trotzdem noch setVisible(true) aufrufen und das Fenster wird rekonstruiert.
Nur was heißt hier rekonstruiert?
Wird der Konstruktor neu aufgerufen?
Oder klappt die Rekonstruierung nur, wenn man Glück hat und der mit dispose() freigegebene Speicher noch nicht mit anderen Daten überschrieben wurde?
 

Ebenius

Top Contributor
Wird der Konstruktor neu aufgerufen?
:shock: Was? Ein Konstruktor erzeugt ein Objekt. Ist es einmal da, kann man ihn nie wieder aufrufen.

Dispose gibt Resourcen frei die über AWT-Peers (native) gebunden sind. Vielleicht vergisst es auch den DoubleBuffer (weiß nicht, hat sich mit JRE 6 ohnehin ein bisschen geändert). Diese Dinge werden bei setVisible(true) dann wieder aufgebaut. Das ist natürlich verglichen mit setVisible(false) mehr Aufwand, spart dafür aber Resourcen. Also hängt es vom Anwendungsfall ab, welcher Weg besser ist.

Ebenius
 

Mostly_Harmless

Aktives Mitglied
:shock: Was? Ein Konstruktor erzeugt ein Objekt. Ist es einmal da, kann man ihn nie wieder aufrufen.

Wieso nicht? Dann würde halt ein neues Objekt erstellt werden. Aber das dies hier nicht gerade zweckmäßig wäre, seh ich ein. Hab ehrlich gesagt auch nicht lange drüber nachgedacht, als mir eben die Idee mit dem Konstruktor kam. ;-)

Jedenfalls danke für die Erklärung. :)
 

Don83

Bekanntes Mitglied
Ah, danke für die vielen Antworten.
Das mit dispose() klappt schonmal, den key listener werd ich dann denke ich gleich noch einbauen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
S GUI Schließen Button auf der linken Seite AWT, Swing, JavaFX & SWT 2
emma_louisa JavaFX MenuBar Zweitfenster; bei Button "Abbrechen" nur das Zweitfenster schließen AWT, Swing, JavaFX & SWT 2
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T Fenster schließen AWT, Swing, JavaFX & SWT 4
R JFrame schließen AWT, Swing, JavaFX & SWT 9
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
D JavaFX Beim Schließen (Rotes X) Code ausführen AWT, Swing, JavaFX & SWT 1
D Geöffnetes Dialogfenster schließen AWT, Swing, JavaFX & SWT 11
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
T Event Handling JDialog schließen, sobald ein neuer erzeugt wird AWT, Swing, JavaFX & SWT 3
O Neuen JFrame öffnen und alten schließen AWT, Swing, JavaFX & SWT 7
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
E JavaFX JavaFX Fenster nicht schließen AWT, Swing, JavaFX & SWT 4
thet1983 offne Fenster gemeinsam schließen AWT, Swing, JavaFX & SWT 8
F Swing JDialog schließen - WindowListener bekommt dispose nicht mit AWT, Swing, JavaFX & SWT 0
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
W SWT Dialog richtig schließen? AWT, Swing, JavaFX & SWT 0
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
U Mehrere Oberflächeninstanzen seperat schließen AWT, Swing, JavaFX & SWT 5
VfL_Freak AWT Browser öffnen und schließen via java.awt.Desktop AWT, Swing, JavaFX & SWT 4
L Event Handling windowAdapter - NullPointerException beim Schließen AWT, Swing, JavaFX & SWT 5
R SWT Wizard schließen AWT, Swing, JavaFX & SWT 2
M Swing Einzelne Fenster schließen AWT, Swing, JavaFX & SWT 2
L SWT Eingabefelder beim Schließen des Forms auslesen AWT, Swing, JavaFX & SWT 3
M Swing ButtonListener Fenster schließen AWT, Swing, JavaFX & SWT 15
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J Swing JInternalFrame schließen ändern? AWT, Swing, JavaFX & SWT 7
S JDialog per Button schließen AWT, Swing, JavaFX & SWT 2
M Fenster schließen - Listener AWT, Swing, JavaFX & SWT 5
D Neues Frame öffnen - und dazu altes schließen AWT, Swing, JavaFX & SWT 5
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
S Fremdes Fenster schließen AWT, Swing, JavaFX & SWT 2
E Fenster schließen und ein anderes öffnen AWT, Swing, JavaFX & SWT 9
L Frame Schließen und neustarten AWT, Swing, JavaFX & SWT 4
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
Madlip SWT DateTime Widget Schließen AWT, Swing, JavaFX & SWT 4
K beim Schließen des JFrames, Methode aufrufen AWT, Swing, JavaFX & SWT 3
X Öffnen Schließen Fenster AWT, Swing, JavaFX & SWT 4
J Schließen über x soll zwei Prozesse beenden AWT, Swing, JavaFX & SWT 7
J Programm schließen AWT, Swing, JavaFX & SWT 4
H Anwendung schließen ohne System.exit AWT, Swing, JavaFX & SWT 5
0 Fenster schließen AWT, Swing, JavaFX & SWT 2
B AWT mehrere Fenster schließen AWT, Swing, JavaFX & SWT 8
S JPopupMenu schließen in SystemTray AWT, Swing, JavaFX & SWT 2
D Fenster schließen AWT, Swing, JavaFX & SWT 7
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
F Swing JFrame Methode beim Schließen aufrufen AWT, Swing, JavaFX & SWT 5
2 Zusätzliches Fenster mit OK-Button schließen AWT, Swing, JavaFX & SWT 7
B Fenster schließen AWT, Swing, JavaFX & SWT 4
N Swing Von 2 dimensionalem Array auf JTextfield schließen und färben AWT, Swing, JavaFX & SWT 6
E JWindow bewegen, minimieren, vergrößern und schließen AWT, Swing, JavaFX & SWT 5
W Swing Event bei Schließen des Fensters AWT, Swing, JavaFX & SWT 6
I Fenster schließen - Button AWT, Swing, JavaFX & SWT 13
S Swing JPopupMenu nicht schließen AWT, Swing, JavaFX & SWT 2
G Swing Fenster schließen AWT, Swing, JavaFX & SWT 6
R WindowClosing Event - Schließen rückgängig machen? AWT, Swing, JavaFX & SWT 2
aze FlowLayout:Lücken "schließen" AWT, Swing, JavaFX & SWT 2
D Swing Dialog schließen verhindern bei Fehleingabe AWT, Swing, JavaFX & SWT 2
T Schließen eines JDialogs setzen den JFrame in den Hintergrund AWT, Swing, JavaFX & SWT 2
N JInternalFrame minimieren und schließen AWT, Swing, JavaFX & SWT 2
M JWindow schließen wenn Frame sich ändert AWT, Swing, JavaFX & SWT 2
E Fenster schließen über X AWT, Swing, JavaFX & SWT 8
DStrohma JFrame mit WindowListener schließen AWT, Swing, JavaFX & SWT 12
M Main Frame schließen und neue Klasse aufrufen? AWT, Swing, JavaFX & SWT 2
T AWT Vollbild öffnen und schließen AWT, Swing, JavaFX & SWT 3
D Swing JMenu wieder schließen lassen AWT, Swing, JavaFX & SWT 7
ModellbahnerTT Neuer JFrame schließen AWT, Swing, JavaFX & SWT 4
U Tab schließen durch Button in Panel AWT, Swing, JavaFX & SWT 7
D aktuells fenster + letztes fenster schließen AWT, Swing, JavaFX & SWT 5
S Frames schließen AWT, Swing, JavaFX & SWT 6
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
J Swing Anwendung schließen im Listener AWT, Swing, JavaFX & SWT 3
C Swing Schließen, Maximieren, Minimieren entfernen AWT, Swing, JavaFX & SWT 6
T Views bedingt öffnen oder schließen AWT, Swing, JavaFX & SWT 6
L JFrame-Verhalten bei Klick auf Schließen-Kreuz ändern AWT, Swing, JavaFX & SWT 3
klattiator Icon und Button zum Schließen in einem Tab AWT, Swing, JavaFX & SWT 3
M JFileChooser schließen AWT, Swing, JavaFX & SWT 2
T JPopupMenu "schließen" AWT, Swing, JavaFX & SWT 7
W Problem bei awt und Swing mit Schließen des Fensters AWT, Swing, JavaFX & SWT 2
T JDiaolog schließen. AWT, Swing, JavaFX & SWT 5
P Schließen-Button bei JTabbedPane? AWT, Swing, JavaFX & SWT 2
V JFrame schließen und Programmzeile(n) ausführen AWT, Swing, JavaFX & SWT 3
A Eins von zwei offnen Fenster/Frames schließen AWT, Swing, JavaFX & SWT 2
S methode aufrufen beim Schließen von GUI AWT, Swing, JavaFX & SWT 7
A Bei Klick auf disabled JMenuItem JMenu nicht schließen AWT, Swing, JavaFX & SWT 2
J Fenster schließen ohne das Programm zu beenden AWT, Swing, JavaFX & SWT 3
S JFrame per Button schließen AWT, Swing, JavaFX & SWT 3
D WindowEvent beim Schließen eines JFrame AWT, Swing, JavaFX & SWT 20
G ein AWT-Frame schließen . AWT, Swing, JavaFX & SWT 8
A Schließen eines JOptionPane.showConfirmDialog AWT, Swing, JavaFX & SWT 6
C Beim Schließen eines fensters, schließen sich alle AWT, Swing, JavaFX & SWT 5
F Programmiertes Fenster schließen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben