Hallo,
Ich versuche ein recht komplexes Problem zu loesen. Dafuer brauche ich ein sehr genaues Verstaendnis der JTextField, seiner Actions, usw.
Ich habe ein Beispiel geschrieben, dass wenn ich es verstehen wuerde mir sehr weiterhelfen wuerde.
DISCLAIMER: ich weiss dass das Beispiel keinen Sinn macht und man eigentlich so keinen Text setzt, usw. Es geht mir ums Prinzip nicht um eine konkrete Aktion.
Meine Frage ist zunaechst einmal: Warum funktioniert das Pasten wenn ich vorher das JTextField sichtbar mache bzw. warum funktioniert es nicht wenn das JTextField nicht sichtbar ist? Kann mir jemand den Code zeigen in der JRE lib wo verhindert wird dass die PasteAction ausgefuehrt wird wenn das JTextField nicht sichtbar ist?
Ich habe einen Debugger bemueht scheine aber mein Problem nicht zu finden
Ich versuche ein recht komplexes Problem zu loesen. Dafuer brauche ich ein sehr genaues Verstaendnis der JTextField, seiner Actions, usw.
Ich habe ein Beispiel geschrieben, dass wenn ich es verstehen wuerde mir sehr weiterhelfen wuerde.
DISCLAIMER: ich weiss dass das Beispiel keinen Sinn macht und man eigentlich so keinen Text setzt, usw. Es geht mir ums Prinzip nicht um eine konkrete Aktion.
Meine Frage ist zunaechst einmal: Warum funktioniert das Pasten wenn ich vorher das JTextField sichtbar mache bzw. warum funktioniert es nicht wenn das JTextField nicht sichtbar ist? Kann mir jemand den Code zeigen in der JRE lib wo verhindert wird dass die PasteAction ausgefuehrt wird wenn das JTextField nicht sichtbar ist?
Ich habe einen Debugger bemueht scheine aber mein Problem nicht zu finden
Java:
public class PasteAction {
public static void main(String[] args) {
JTextField textField = new JTextField();
// funktioniert
showInWindow(textField);
Action pasteAction = textField.getActionMap().get(DefaultEditorKit.pasteAction);
textField.setText("abc");
textField.selectAll();
JButton button = new JButton(pasteAction);
button.doClick();
// funtioniert nicht (vorher obigen Aufruf von showInWindow auskommentieren)
// showInWindow(textField);
}
private static void showInWindow(JTextField textField) {
JFrame frame = new JFrame("Demo");
frame.setContentPane(textField);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(640,400));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}