AWT-Alternative gesucht - Problem mit AWT+JDialogPane

CodeKrieger

Mitglied
Hallo liebe Community,

ich weiß ja, dass man nicht Swing und AWT zusammen benutztn soll. Aber ich weiß leider keine Alternative dafür.

Doch leider führt folgender Code
Java:
public void userInteraction(){
        if(userInteractionCounter % 2 == 0){
                    String msg = JOptionPane.showInputDialog(_vc, 
                    "Enter a message for the user interaction", 
                    "Enter Message", 
                    JOptionPane.QUESTION_MESSAGE);	
            newStage(userInteractionCounter, "UserInteractionBegin", msg);
            userInteractionCounter++;
            forceSyncPointCreation = true;
            System.out.println("Begin");
            syncCenter();
        }
        else { 
            syncCenter();
            newStage(userInteractionCounter, "UserInteractionEnd", "");
            forceSyncPointCreation = false;
            userInteractionCounter++;
            correctDelay = true;
            System.out.println("End");
            idleTime = 0; 
        }
        
    }
Gibt mir folgendes aus
Begin
End
Begin

was natürlich unerwünscht ist-.

Kommentiere ich in der oberen Hälfte das JOptionPane aus (uns rufe newStage mit "") auf, dann läuft es korrekt:
Begin
End
Die Methode wird also aus irgendeinem Grund nochmal aufgerufen. Wobei ich dazu sagen muss, dass sie durch eine Tastenkombination ausgelöst wird. Möglicherweise wird auch diese Tastenkombination nochmal wiederholt. Von mir gedrückt wurde der Shortcut genau 2x (Begin und end).

Hat jemand eine Idee, wie man das verhindern kann? Oder wie könnte ich etwas ähnliches nur mit AWT erreichen?

Danke schonmal im Vorraus.

Edit: Habe den Titel mal etwas aussagekräftiger gemacht.
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Warum benutzt du dann nicht gleich Swing? Dein Code sagt leider nichts aus, außer dass die Variable _vc schlecht benannt ist. Der Aufrufer selbst wäre wohl wichtiger.
 

CodeKrieger

Mitglied
Geht nicht, das ist ein riesiges Projekt, ich mache hier "nur" meine Masterarbeit. Kann also unmöglich alles auf Swing umstellen.

_vc ist ein VncCanvas-Object, welches Canvas erweitert.

Mit dem Aufrufer selbst könnt ihr auch nichts anfangen. Das ist alles sehr speziell.

Gibts denn in AWT eine Methode, das zu realisieren?
 

CodeKrieger

Mitglied
Aus der Hauptklasse VncViewer
Java:
public void startUserInteractionMode(){
      if(vc.getState() == 1){
          inputRecorder.userInteraction();
        vc.saveMousePos();
        pauseRecording(false);
        
      }
      
  }
  public void stopUserInteractionMode(){
      if(vc.getState() == 3){
          vc.correctMousePos();
          resumeRecording();
          inputRecorder.userInteraction();
          
      }
  }
Aus der Methode processCtrlAltCommands (mouseEvent evt, Set<Integer> pressed), die die Tastenkombinationen verarbeitet. Die Tastenkombination hier ist Strg-Alt-I

Java:
if(pressed.contains(KeyEvent.VK_I)){
            if(vc.getState() == 1){
                startUserInteractionMode();
            }
            else if(vc.getState() == 3) {
                
                stopUserInteractionMode();
            }

Und diese Methode wird wiederum vom KeyListener aufgerufen.

Glaub aber nicht, dass ihr damit was anfangen könnt. Ich wollte eher von dem Punkt ausgehen, dass es mit JOptionPane nicht geht, ohne aber schon. Das deutet doch darauf hin, dass es offenbar ein Problem zwischen Swing und AWT gibt, oder? Ohne das JOptionPane wird der Tastendruck korrekt verarbeitet und danach verworfen. Mit klappt das irgendwie nicht. Der Tastendruck wird nicht gelöscht.
 
Zuletzt bearbeitet:

bERt0r

Top Contributor
Bastel dir doch selber einen Dialog der eine Eingabemaske liefert, in AWT. JOptionPane is ja nur eine Convenience Klasse. Vielleicht musst du aber auch nur deinen Dialog schon vor der Funktion userInteraction aufrufen, das kann man ohne weiteren Einblick in die Materie nicht sagen.
 

Volvagia

Top Contributor
Falls es nur der KeyListener ist, das funktioniert bei mir problemlos:

Java:
public static void main(String[] args) {
	Frame frame = new Frame();
	frame.addWindowListener(new WindowAdapter() {
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	});
	frame.addKeyListener(new KeyAdapter() {
		public void keyPressed(KeyEvent e) {
			if(e.getKeyCode() == KeyEvent.VK_ENTER) {
				String msg = JOptionPane.showInputDialog(null, "Test", null,
						JOptionPane.QUESTION_MESSAGE);
				System.out.println(msg);
			}
		}
	});
	frame.setSize(400, 400);
	frame.setVisible(true);
}

Falls du aber wirklich auf JOptionPanes verzichten willst, gäbe es die Möglichkeit:

Java:
public static void main(String[] args) {
	frame = new Frame();
	frame.addWindowListener(new WindowAdapter() {
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	});
	frame.addKeyListener(new KeyAdapter() {
		public void keyPressed(KeyEvent e) {
			if(e.getKeyCode() == KeyEvent.VK_ENTER) {
				String s = showQuestion(frame, "Please input your choose.", null);
				System.out.println(s);
			}
		}
	});
	frame.setSize(400, 400);
	frame.setVisible(true);
}
private static String showQuestion(Frame parent, String msg, String title) {
	final Dialog dialog = new Dialog(parent, title, true);
	dialog.addWindowListener(new WindowAdapter() {
		public void windowClosing(WindowEvent e) {
			dialog.dispose();
		}
	});
	dialog.add(new JLabel(msg), BorderLayout.NORTH);
	
	Panel inputPanel = new Panel(new BorderLayout());
	dialog.add(inputPanel, BorderLayout.CENTER);
	
	inputPanel.add(new Label("Input:"), BorderLayout.WEST);
	
	TextField field = new TextField();
	field.addKeyListener(new KeyAdapter() {
		public void keyPressed(KeyEvent e) {
			int keyCode = e.getKeyCode();
			if(keyCode == KeyEvent.VK_ENTER || keyCode == KeyEvent.VK_ESCAPE) {
				dialog.dispose();
			}
		}
	});
	inputPanel.add(field, BorderLayout.CENTER);
	
	Panel buttonPanel = new Panel(new FlowLayout(FlowLayout.CENTER));
	dialog.add(buttonPanel, BorderLayout.SOUTH);
	
	Button okButton = new Button("OK");
	okButton.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			dialog.dispose();
		}
	});
	buttonPanel.add(okButton);
	
	
	dialog.pack();
	dialog.setLocationRelativeTo(dialog.getParent());
	dialog.setVisible(true);
	
	return(field.getText());
}
 

CodeKrieger

Mitglied
Ok, also grundsätzlich scheint das schon zu gehen. Die Frage ist jetzt also warum es bei mir nicht geht. Meine Vermutung ist, dass das JOptionPane den Listener an sich reisst und danach nicht korrekt zurücksetzt. Dadurch wird möglicherweise das gesamte Programm gestört, weil es darauf ausgelegt ist Benutzerinteraktionen zu jeder Zeit zu verarbeiten. Muss da morgen mal weiterexperimenteiren :)
 

CodeKrieger

Mitglied
Weitere Nachforschungen haben ergeben:

mit dem JDialogPane passiert folgendes
1. Strg-Alt-I -> Meldung erscheint -> korrekt
2. Strg-Alt -> Modus wird beendet, OBWOHL kein "I" gedrückt wurde -> Falsch!!!

Für die Verarbeitung der Tastendrücke benutze ich folgende Funktionen.
Java:
public void keyPressed(KeyEvent evt) {   
    pressed.add(evt.getKeyCode());
    if (!inputBlocked) processLocalKeyEvent(evt);
    evt.consume();
       
  }
  @Override
  public void keyReleased(KeyEvent evt) {        
    pressed.remove(evt.getKeyCode());
    if (!inputBlocked) processLocalKeyEvent(evt);
    evt.consume();        
  }
  @Override
  public void keyTyped(KeyEvent evt) {
    evt.consume();
  }

pressed wird an die Funktion ProcessCtrlAltCommands() übergeben, wenn es Strg und Alt enthält. Inm obigen Fall 2 enthält pressed aber auch das I obwohl dieses nicht gedrückt wurde.

Das wirklich seltsame ist, dass ohne den JDialog alles einwandfrei funktioniert, Am Listener kann es ja eigentlich auch nicht liegen, denn wenn der Listener nicht korrekt zurückgegeben wird, dann würde ja garnichts passieren, wenn ich Strg-Alt-drücke. Ich kann das System aber ganz normal bedienen. Nur wenn ich Strg-Alt drücke, kommt diese Fehlfunktion zu Tage.

Ich habe auch versucht, das ganze vor dem Aufruf des JDialogPane in einen fest definierten Pause-Zustand zu versetzen, in dem es keine Eingaben erlaubt. Aber das hilft auch nix :-(
Any Ideas?

Edit: Nachdem ich das hier geschrieben hatte wurde es mir klar: Die DialogBox verhindert, dass keyReleased ausgelöst wird. Gefixt habe ich das etwas unschön durch eine Methode clearPressed(). Hauptsache es geht jetzt endlich!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Alternative JavaFX TableView AWT, Swing, JavaFX & SWT 1
Aruetiise Schnellere Alternative zu awt.robot AWT, Swing, JavaFX & SWT 3
A JavaFX Webview Alternative AWT, Swing, JavaFX & SWT 2
M SWT Alternative zu AWT/Swing? AWT, Swing, JavaFX & SWT 6
M Arbeiten mit actionPerformed(ActionEvent) oder Alternative AWT, Swing, JavaFX & SWT 7
A 2D-Grafik Repaint - Alternative? AWT, Swing, JavaFX & SWT 3
E Swing JTextArea Alternative? AWT, Swing, JavaFX & SWT 5
K Alternative zu Applet mit HTML-Einbindung AWT, Swing, JavaFX & SWT 11
C Alternative zu getFontMetrics um Stringlänge zu berechnen AWT, Swing, JavaFX & SWT 2
G Swing Alternative Fensterdekoration? AWT, Swing, JavaFX & SWT 7
J Alternative für SwingUtilities Schachteln AWT, Swing, JavaFX & SWT 2
hdi FlowLayout Alternative AWT, Swing, JavaFX & SWT 10
GilbertGrape Alternative zu TableRowSorter in 1.5 AWT, Swing, JavaFX & SWT 3
E JList tabellarisch aufbauen oder alternative? AWT, Swing, JavaFX & SWT 5
G Alternative zu JFileChooser AWT, Swing, JavaFX & SWT 4
B alternative zu setVisible() AWT, Swing, JavaFX & SWT 2
S Alternative zu paint in JApplet AWT, Swing, JavaFX & SWT 3
B Eine Alternative zur Steuerung einer ProgressBar? AWT, Swing, JavaFX & SWT 5
C Alternative GUI zu Swing AWT, Swing, JavaFX & SWT 5
W Alternative zu JFrame? AWT, Swing, JavaFX & SWT 14
L Hilfebutton in Titelleiste oder gute Alternative AWT, Swing, JavaFX & SWT 2
G Alternative zum JColorChooser AWT, Swing, JavaFX & SWT 4
T Swing Tetraeder - mehrere Punkte verbinden? - Ansätze gesucht AWT, Swing, JavaFX & SWT 2
temi JavaFX Lösungsansatz für Umsetzung gesucht AWT, Swing, JavaFX & SWT 4
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2
R Low-Res OCR einzelner Buchstaben und mehrstelliger Zahlen - Ideen gesucht AWT, Swing, JavaFX & SWT 2
P Ansatz für 2D Animation gesucht AWT, Swing, JavaFX & SWT 2
W Java AWT/GUI Implementierung gesucht AWT, Swing, JavaFX & SWT 3
K Jogl tutorial gesucht AWT, Swing, JavaFX & SWT 2
J 3D-Grafik Native Java 3D Tutorial gesucht AWT, Swing, JavaFX & SWT 5
yvesdaeschle Outline Control gesucht AWT, Swing, JavaFX & SWT 5
C LayoutManager Passendes Layout gesucht AWT, Swing, JavaFX & SWT 2
L Swing Hilfe bei JTabelModel gesucht AWT, Swing, JavaFX & SWT 4
W Swing gute Ide für GUI Erstellung gesucht AWT, Swing, JavaFX & SWT 3
S Beispiel für Kollisionserkennung gesucht AWT, Swing, JavaFX & SWT 24
G LayoutManager LayoutManager gesucht AWT, Swing, JavaFX & SWT 2
I Idee gesucht: jList optisch aufbessern AWT, Swing, JavaFX & SWT 6
B "Alte" Swing ICONs gesucht AWT, Swing, JavaFX & SWT 2
S LayoutManager Fehler gesucht 18.6.2011 AWT, Swing, JavaFX & SWT 4
E Swing Tutorial Buch blättern Effekt gesucht AWT, Swing, JavaFX & SWT 2
padde479 Komponente gesucht AWT, Swing, JavaFX & SWT 2
N Alternativen zu JavaHelp gesucht AWT, Swing, JavaFX & SWT 13
F SWT Resizer für Sections gesucht (siehe plugin.xml) AWT, Swing, JavaFX & SWT 3
D Informationen über JEditorPane gesucht AWT, Swing, JavaFX & SWT 2
0 2D-Grafik 2D Bibliothek zum Zeichnen und Zoomen gesucht AWT, Swing, JavaFX & SWT 4
A rcp-mvc tuturial/example gesucht AWT, Swing, JavaFX & SWT 2
G Swing Komponente gesucht (Textfeld mit Liste) AWT, Swing, JavaFX & SWT 2
F Swing Framework gesucht (Swing, Chart, "Scheduling" Grafik) AWT, Swing, JavaFX & SWT 2
D Image Viewer gesucht AWT, Swing, JavaFX & SWT 5
C Bestimmtes Layout gesucht AWT, Swing, JavaFX & SWT 6
C passender layoutmanager gesucht AWT, Swing, JavaFX & SWT 2
X Swing Swing Element gesucht -> um als Konsole zu fungieren AWT, Swing, JavaFX & SWT 4
E Layoutmanager mit fester Breite gesucht AWT, Swing, JavaFX & SWT 9
C gute Grafik-Bibliotheken gesucht AWT, Swing, JavaFX & SWT 6
J Java-Klasse gesucht AWT, Swing, JavaFX & SWT 2
G SWT SWT Componente gesucht AWT, Swing, JavaFX & SWT 2
S Methode gesucht... AWT, Swing, JavaFX & SWT 8
K passendes Layout gesucht AWT, Swing, JavaFX & SWT 2
C Spaltenorientierte Komponente, ähnlich JTabbed gesucht AWT, Swing, JavaFX & SWT 4
M Zeilenumbruch bei MessageFormat gesucht AWT, Swing, JavaFX & SWT 10
G Menu Vorlage gesucht. AWT, Swing, JavaFX & SWT 4
I GESUCHT: Lösung für "Notizzettel / Post-Its / Pinnwand& AWT, Swing, JavaFX & SWT 3
sliwalker Idee gesucht! Komponente die aus 3 Komponenten b3steht AWT, Swing, JavaFX & SWT 6
N GUI Komponenten für Anwesenheitsplaner gesucht AWT, Swing, JavaFX & SWT 2
F ActionListener pragmatischer Ansatz gesucht AWT, Swing, JavaFX & SWT 4
S Methode zum vergrößern des Fensters gesucht AWT, Swing, JavaFX & SWT 3
K Gutes Buch gesucht (Graphics Only) Kennt jemand eins? AWT, Swing, JavaFX & SWT 5
oliver1974 StatusBar gesucht. AWT, Swing, JavaFX & SWT 7
A Zeile in JTable einfügen/löschen- Tutorial gesucht AWT, Swing, JavaFX & SWT 9
N Ausgabemöglichkeit für Verlauf gesucht AWT, Swing, JavaFX & SWT 11
G Durchsichtiger verschiebbarer Container gesucht AWT, Swing, JavaFX & SWT 6
Wildcard Inspriration gesucht AWT, Swing, JavaFX & SWT 4
M treetable einfaches beispiel gesucht AWT, Swing, JavaFX & SWT 6
G hübschere JPanels gesucht AWT, Swing, JavaFX & SWT 13
B Spezieller Button gesucht AWT, Swing, JavaFX & SWT 10
P Prefuse: Beispiel mit beschrifteten Kanten gesucht? AWT, Swing, JavaFX & SWT 9
M Layout Problem, Ideen gesucht AWT, Swing, JavaFX & SWT 7
R Termin Kalender Bibliothek gesucht AWT, Swing, JavaFX & SWT 4
M Texteditor Komponente gesucht AWT, Swing, JavaFX & SWT 5
A Gridbag Mensch gesucht! AWT, Swing, JavaFX & SWT 2
R RAD Oberfläche für Eclipse gesucht AWT, Swing, JavaFX & SWT 4
G RGB gesucht AWT, Swing, JavaFX & SWT 2
R Selectable Graphics Objekt gesucht. AWT, Swing, JavaFX & SWT 5
M Hilfs-Komponenten für die Terminauswahl gesucht AWT, Swing, JavaFX & SWT 2
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben