![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 13.10.2005
Beiträge: 5
|
hallo, Wie kann man verhindern, dass ein JInternalFrame ein zweites Mal geöffnet wird? Ich habe z.B ein Info und ein Hilfe-Fenster. Diese kann ich jedoch mehrfach öffnen. Code-Ausschnitt: ... Code: JLayeredPane desktop;
desktop = getLayeredPane();
JEditorPane editorPane = new JEditorPane();
editorPane.setEditable(false);
editorPane.setContentType("text/html");
editorPane.setText(text);
JInternalFrame internalFrame = new JInternalFrame( "Hilfe", false, true, false, false)
internalFrame.setSize(400, 300);
internalFrame.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
internalFrame.setLocation((int)(super.getWidth()/2) - (int)(internalFrame.getWidth() / 2), (int)(super.getHeight()/2) - (int)(internalFrame.getHeight() / 2));
internalFrame.getContentPane().add( new JScrollPane(editorPane) );
desktop.add(internalFrame, desktop.DEFAULT_LAYER);
internalFrame.setVisible(true);
Geändert von Ben (16.02.2006 um 00:26 Uhr). Grund: Code-Tags hinzugefügt |
| | |
| | Nach oben #2 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.471
|
Hi, was meinst Du denn mit Zitat:
Der Thread wurde verschoben, wegen ... ... Postings im falschen Forum. Bitte beim nächsten Mal darauf achten., | |
| | |
| | Nach oben #3 |
| Sesselkleber Registriert seit: 17.01.2005
Beiträge: 575
|
Das Fenster wird ja jedesmal neu instaniziert, deshalb kommt immer ein neues. Leider kenne ich deinen Code nicht nähe, du könntest prüfen ob es schon offen bzw. visible ist. Noch einfacher: du legst im DesktopPane eine boolean-variable für das entsprechende Frame an. Zum Beispiel Code: public boolean helpvisible=false; Dann sorgst du dafür, dass das JInternalFrame beim öffnen diese Variable auf true setzt und beim schließen auf false. Ist zwar nicht die schönste Methode, geht aber. Gruß Sparrow |
| | |
| | Nach oben #4 |
| Neuer Benutzer Registriert seit: 13.10.2005
Beiträge: 5
|
Hallo, vieln Dank zunächst für Eure Antworten. So eine boolean-Variable habe ich gesetzt, weiß aber leider nicht wie ich die Schließen-Aktion abfangen kann, um somit die Variable wieder auf false setzen kann. Aufruf in einer Funktion createMenu //? - Hilfe actHelp = new AbstractAction("Help", new ImageIcon("images/Help"+iconSize+".gif")){ public void actionPerformed(ActionEvent ae){ if (helpWin == false){ showHelp(); } jtfStatus.setText("\"? - Hilfe\" gewählt."); } }; keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0); actHelp.putValue(Action.ACCELERATOR_KEY, keyStroke); actHelp.putValue(Action.SHORT_DESCRIPTION, TTT_HELP); jmiHelp = menuHelp.add(actHelp); jmiHelp.setMnemonic('p'); } ... die eingntliche Funktion: // Hile-Fenster public void showHelp(){ String text = "<htlm><body>Dies ist ein <b>Hilfetext</b> zur Swing-Applikation SwingFrame</boy></html>"; JLayeredPane desktop; desktop = getLayeredPane(); JEditorPane editorPane = new JEditorPane(); editorPane.setEditable(false); editorPane.setContentType("text/html"); editorPane.setText(text); JInternalFrame internalFrame = new JInternalFrame( "Hilfe", // title false, // resizable true, // closeable false, // maximizable false ); // iconifiable internalFrame.setSize(400, 300); internalFrame.setLocation((int)(super.getWidth()/2) - (int)(internalFrame.getWidth() / 2), (int)(super.getHeight()/2) - (int)(internalFrame.getHeight() / 2)); internalFrame.getContentPane().add( new JScrollPane(editorPane) ); desktop.add(internalFrame, desktop.DEFAULT_LAYER); internalFrame.setVisible(true); helpWin = true; } Wie fange ich das Close-Event ab und setze die Variable helpWin = false ? An einer eleganteren Methode wäre ich auch sehr interessiert! - denn wer möchte sich nicht verbessern?! Gruß Carsten |
| | |
| | Nach oben #5 |
| Sesselkleber Registriert seit: 17.01.2005
Beiträge: 575
|
Ich werd heute Abend mal über enie elegantere Methode nachdenken. Abfangen kannst du indem du sagst. JInternalFrame.addWindowListener(new WindowListener); Du mußt dann nur einen Window-Listener implementieren, also die 3 oder 5 Methoden die der braucht einfügen. Eclipse ist dir da ja sehr hilfreich was sowas angeht, ansonsten nochmal posten (bin gerade in Eile) oder in die API schauen. Gruß Sparrow |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Bild in JinternalFrame mit JSrollPane | taskin73 | Allgemeine Java-Programmierung | 5 | 08.08.2005 22:53 |
| JInternalFrame und JDialog | taskin73 | Allgemeine Java-Programmierung | 17 | 03.08.2005 20:57 |
| von JInternalFrame erben | xeon | Desktop-Applikationen und Grafik | 5 | 07.07.2005 12:34 |
| JInternalFrame und Canvas bezüglich Reihenfolge | Hot-Thunder | Desktop-Applikationen und Grafik | 10 | 06.07.2005 20:56 |
| Kindfenster im JInternalFrame -> max. Größe | Ben | Desktop-Applikationen und Grafik | 12 | 16.06.2005 20:50 |