Swing Bei MenuSelectionManager auf Ausführung warten?

Dumdidum

Mitglied
Hallo liebe Java-Forum Gemeinde,

ich habe in meinem Menü einen Screenshot-Eintrag. Das Problem ist hierbei, dass ich eben gerne das Menü wieder ausgeblendet haben will, bevor der Screenshot gemacht wird.

Ich rufe momentan:

Java:
MenuSelectionManager.defaultManager().clearSelectedPath();

auf. Allerdings hat das wohl nicht schnell genug eine Wirkung.
Ich habe versucht den Thread schlafen zu lassen und immer wieder abzufragen ob der Selectionspfad null ist. Das hat leider zu einer Endlosschleife geführt.

Auch habe ich es über den ChangeListener probiert. Allerdings wird bei clearSelectedPath wohl garkein changeEvent ausgelöst. Wenn ich "setSelectedPath(null)" setzte wird zwar das Event aufgerufen aber zu dem Zeitpunkt ist leider wohl eben es noch nicht neu gezeichnet.


Hat jemand einen Tipp wie ich es versuchen könnte?! Das offene Menü ist leider doch sehr unschön auf dem Screenshot.
 

strußi

Top Contributor
hast du schon probiert, durch den klick einen neuen thread zu starten, der als erste aktion einen sleep macht?

mit etwas mehr code können wir besser nachvollziehen, wie der programmablauf ist.
 

Dumdidum

Mitglied
hast du schon probiert, durch den klick einen neuen thread zu starten, der als erste aktion einen sleep macht?

Ja hatte ich nach der Erstellung des Threads gemacht. Bei etwa 1s funktioniert es zwar. Aber letztendlich besteht ja dabei das Risiko, dass es abunzu doch nicht funktioniert... die 1s verzögerung allerdings wäre ja prinzipiell schon zu verkraften.

Und mehr Code... naja...

Java:
    private void jMenuItem13ActionPerformed(java.awt.event.ActionEvent evt) {                                            
        Rectangle bounds = this.getBounds();
        ChangeListener tempListener = new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {

                new Thread(new Runnable() {
                    @Override

                    public void run() {
                        try {
                            Thread.sleep(1000);
                            Robot robot;
                            try {
                                robot = new Robot();
                                BufferedImage screenshot = robot.createScreenCapture(bounds);
                                JFrame testFrame = new JFrame();
                               // LAUTER GUI ZEUGS....

                                testFrame.setVisible(true);
                            } catch (AWTException ex) {
                                Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
                            }
                            MenuSelectionManager.defaultManager().removeChangeListener(null);
                        } catch (InterruptedException ex) {
                            Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                }).start();
            }
        };
        MenuSelectionManager.defaultManager().addChangeListener(tempListener);
        this.repaint();
        MenuSelectionManager.defaultManager().setSelectedPath(null);

(Also bei dem Code funktionierts... aber vllt kennt jemand eine bessere Lösung wie die "gut Glück" Verzögerung?
 
Zuletzt bearbeitet:

strußi

Top Contributor
ich bin gerade über eine andere möglichkeit gestolpert. wie wäre es, wenn du einen keylistener die arbeit übernehmen lässt? leg eine bestimmte taste oder tastenkombination fest mit der du den screenshot ausführst

EDIT:
dann fällt der weg übers menü weg

EDIT2:
oder du setzt das menu.setVisibel( false); dann müsste es auch weg sein, und am ende der Methode wieder auf true setzen
 
Zuletzt bearbeitet:

Dumdidum

Mitglied
Also ich fände es schon schönere als Menü-Eintrag, weil bei Shortcuts halt immer das Problem ist, dass man das erst allem im Projket kommunizieren muss ;)

menu.setVisible(false) reagiert leider auch nicht schnell genug ;)
 

BRoll

Bekanntes Mitglied
nach dem schlißen des menüs das gesamte Frame (wo alles drin ist) neu zeichnen / gebenfalls revalidate und dann erst screenshot hilft auch nicht?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
it_is_all Swing Button, ComboBox,... -- Unterschied: NetBeans Design <-> Ausführung AWT, Swing, JavaFX & SWT 2
T Javafx Ausführung AWT, Swing, JavaFX & SWT 7
I Fataler Error bei GUI-Ausführung AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
C JFileChooser hängt bei Ausführung mit Terminal AWT, Swing, JavaFX & SWT 2
W Swing Ausführung einer .jar zeigt keine Reaktion AWT, Swing, JavaFX & SWT 4
A Swing Vokabeltrainer zeigt in einfacher Ausführung nichts an AWT, Swing, JavaFX & SWT 5
B Problem bei JAR Ausführung AWT, Swing, JavaFX & SWT 7
M Swing JList Item in andere JList während Ausführung AWT, Swing, JavaFX & SWT 4
X Applet Java Applet Datei Ausführung AWT, Swing, JavaFX & SWT 9
B MouseMotionListener stotterhafte Ausführung AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing kann ich einen laufenden Timer mitten in der Ausführung abbrechen? AWT, Swing, JavaFX & SWT 6
D Mehrfach ausführung der GUI AWT, Swing, JavaFX & SWT 5
O Doppelte Ausführung von KeyPressed AWT, Swing, JavaFX & SWT 7
A AWT Button verhindert ausführung vom Keylistener AWT, Swing, JavaFX & SWT 4
R doppelte Ausführung bei einfachem Mausklick! AWT, Swing, JavaFX & SWT 12
G Problem mit zeitlicher Ausführung AWT, Swing, JavaFX & SWT 4
E mehrere repaint() Aufrufe - NUR eine Ausführung. Warum? AWT, Swing, JavaFX & SWT 59
F polygon object "stirbt" vor Ausführung in paint() AWT, Swing, JavaFX & SWT 4
izoards JavaFX Background Task warten auf Knopfdruck AWT, Swing, JavaFX & SWT 4
G FX warten bis ein anderes GUI Element ausgewählt wurde AWT, Swing, JavaFX & SWT 8
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
kodela Swing Anzeige des Warten-Cursors AWT, Swing, JavaFX & SWT 8
H Eigener Dialog mit Rückgabe -> Warten auf Button AWT, Swing, JavaFX & SWT 3
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
W JavaFX Webview warten bis Seite geladen geladen ? AWT, Swing, JavaFX & SWT 0
U Java FX Warten auf Textfield eingabe AWT, Swing, JavaFX & SWT 17
M JavaFX FadeTransition, warten bis beendet AWT, Swing, JavaFX & SWT 10
O Swing JDialog öffnen und dann warten bis er geschlossen wurde AWT, Swing, JavaFX & SWT 2
H Event Handling JavaFx - auf Event warten AWT, Swing, JavaFX & SWT 4
Thallius Auf Swingworker warten? AWT, Swing, JavaFX & SWT 5
gamebreiti auf usereingabe warten mit GUI(nur Labels, Buttons etc. keine Texteingaben) AWT, Swing, JavaFX & SWT 3
P Warten auf komponente AWT, Swing, JavaFX & SWT 2
H AWT Auf Bestätigung warten AWT, Swing, JavaFX & SWT 6
B Timer, TimerTask und Warten AWT, Swing, JavaFX & SWT 4
L JavaFX Wait/Sleep/postedDelay - Einfach nur warten AWT, Swing, JavaFX & SWT 4
C Swing SwingWorker: Auf beendigung eines Formulars / einer Arbeit warten AWT, Swing, JavaFX & SWT 10
F JFrame nach Buttonklick 3 Sekunden warten, bevor es sich ändert AWT, Swing, JavaFX & SWT 2
C Schleife auf Mausklick warten lassen AWT, Swing, JavaFX & SWT 6
A Auf Tastendruck warten AWT, Swing, JavaFX & SWT 9
A Auf eingabe warten AWT, Swing, JavaFX & SWT 5
S auf paintComponent() warten AWT, Swing, JavaFX & SWT 34
B Warten bis neues ImageIcon zugewiesen ist AWT, Swing, JavaFX & SWT 3
S Swing Bild (Gif) in Bitte warten JDialog AWT, Swing, JavaFX & SWT 6
K Vom Gui aus auf einen Thread warten AWT, Swing, JavaFX & SWT 4
M Hauptprogramm pausieren und auf Ergebnis eines JDialogs warten AWT, Swing, JavaFX & SWT 7
I Swing Warten, bis eine GUI-Komponente aktualisiert ist? AWT, Swing, JavaFX & SWT 4
A Swing Warten bis JDialog fertig AWT, Swing, JavaFX & SWT 3
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
pinerski Swing Frame 1 soll auf Frame 2 warten AWT, Swing, JavaFX & SWT 4
0x7F800000 Allg. Frage zum ev. dispatch thread, wie korrekt auf reaktion der Listener warten? AWT, Swing, JavaFX & SWT 4
R JDialog "Bitte warten..." durchsichtig AWT, Swing, JavaFX & SWT 5
G JTable warten bis Spalte verschoben wurde AWT, Swing, JavaFX & SWT 2
C Warten auf Rückgabewert im EventDispatchingThread AWT, Swing, JavaFX & SWT 8
A Bitte warten Dialog AWT, Swing, JavaFX & SWT 4
G Auf Ergebnis vom Thread warten AWT, Swing, JavaFX & SWT 3
O Zwei Listener auf Komponente, warten auf Beendigun? AWT, Swing, JavaFX & SWT 2
R Warten auf Ergebnisse eines untergeordneten JFrame AWT, Swing, JavaFX & SWT 2
C Auf Ereignis warten AWT, Swing, JavaFX & SWT 7
L Warten, aber trotzdem "lebende" UI AWT, Swing, JavaFX & SWT 2
K Textfeld Programm soll auf Eingabe warten! AWT, Swing, JavaFX & SWT 4
B Auf Frame/Dialog warten AWT, Swing, JavaFX & SWT 2
A Programmunterbrechung und warten auf Benutzereingabe AWT, Swing, JavaFX & SWT 6
J Warten auf einen Dialog? AWT, Swing, JavaFX & SWT 2
J Programm warten, bis GUI geschlossen ist AWT, Swing, JavaFX & SWT 4
F Auf Thread warten ohne alles andere zu blockieren AWT, Swing, JavaFX & SWT 5
W Auf eine Eingabe warten? AWT, Swing, JavaFX & SWT 2
N malen => 1 Sekunde warten => malen AWT, Swing, JavaFX & SWT 2
m@nu Dialog während warten anzeigen AWT, Swing, JavaFX & SWT 3
U Auf Swings Reaktion warten AWT, Swing, JavaFX & SWT 3
C JFrame warten lassen AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen

Neue Themen


Oben