Enter bei OK_CANCEL_OPTION auf dem Cancel Button deaktivieren?

membersound

Bekanntes Mitglied
Hallo,

wenn ich eine JOptionPane mit zB OK_CANCEL_OPTION erzeuge, dann wird mit ENTER immer OK bestätigt, selbst wenn ich mit Tab zum Cancel Button gesprungen bin.
Das ist schon ärgerlich, wenn es um so Dialoge wie "really delete?" geht.

Wie kann ich das ändern, dass wenn der Focus auf dem Cancel Button ist, auch wirklich Cancel gedrückt wird?

Danke
 
Zuletzt bearbeitet:
Nimm einen JDialog und bestücke diesen mit eigenen Komponenten, dann kannst du auch selbst bestimmen, wie sich alles verhalten soll.

Gruß Vanny
 
Java:
		Object[] options = {"Yes", "Cancel"};
		int n = JOptionPane.showOptionDialog(null,
			    "Do you really want to delete? ",
			    "Test",
			    JOptionPane.YES_NO_CANCEL_OPTION,
			    JOptionPane.QUESTION_MESSAGE,
			    null,
			    options,
			    options[1]);
		System.out.println("Option choosen:"+n);
 
Java:
...

Das ist nicht ganz das was ich meinte. Es sorgt ja dafür, dass als default option cancel gedrückt wird. Aber das möchte ich genauso wenig wie default option = ok. Ich möchte lediglich, dass wenn ich mit Tab zu einem Button gewechselt bin und Enter drücke, dann dieser auch gedrückt wird.
Default macht man das mit Space, den focused Button zu drücken. Aber ich möchte das eben mit Enter haben.
Kann ich das vl irgendwie überschreiben, dass nicht nur Space, sondern auch Enter immer den focused Button drücken?
 
Das Verhalten ist abhängig vom Look and Feel, siehe diesen Test:
Java:
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

public class JOptionPaneTest {
	public static void main(String[] args) throws Exception {
		final LookAndFeelInfo[] installedLookAndFeels = UIManager.getInstalledLookAndFeels();
		for (LookAndFeelInfo lookAndFeelInfo : installedLookAndFeels) {
			UIManager.setLookAndFeel(lookAndFeelInfo.getClassName());
			System.out.print(lookAndFeelInfo.getName() + ": ");
			switch (JOptionPane.showConfirmDialog(null, lookAndFeelInfo.getClassName(), null, JOptionPane.OK_CANCEL_OPTION)) {
			case JOptionPane.OK_OPTION:
				System.out.println("OK");
				break;
			case JOptionPane.CANCEL_OPTION:
				System.out.println("CANCEL");
				break;
			case JOptionPane.CLOSED_OPTION:
				System.out.println("CLOSED");
				break;
			}
		}
	}
}
Mit Tab und Enter erhielt ich dieses Ergebnis:
Code:
Metal: OK
Nimbus: OK
CDE/Motif: CANCEL
Windows: CANCEL
Windows Classic: CANCEL
 

Zurück
Oben