2010-11-21 8 views
0

Ich mache einen ziemlich einfachen Texteditor, und ich habe eine Frage zu meinen Stil-Schaltflächen. Wenn ich Text hervorhebe und auf meinen "fett" -Button klicke, wird der Text wie erwartet fett, aber meine Auswahl ist nicht mehr sichtbar. Ich kann die Auswahl immer noch aufheben, kursiv darstellen oder unterstreichen, aber Sie können einfach nicht sehen, was ausgewählt ist. Also, ich frage mich, ob es eine Einstellung gibt, die es mir erlaubt, auf die Schaltfläche zu klicken, aber meine Auswahl beibehalten? Ich habe versucht, ein JMenuItem anstelle eines JButton, und das schien zu funktionieren, aber dann machte es meine Symbolleiste ziemlich schlecht aussehen. Beispielcode unten.Auswahl beibehalten nach dem Klicken auf ein JButton, um Text zu formatieren

//frame and pane creation up here 
JToolBar tool = new JToolBar(); 
JToggleButton boldButton = new JToggleButton("Bold"); 
boldButton.addActionListener(new StyledEditorKit.BoldAction()); 
tool.add(boldButton); 

Jede Hilfe wird geschätzt.

Antwort

5

Also, ich frage mich, ob es eine Einstellung gibt, die es mir erlaubt, auf die Schaltfläche klicken, aber meine Auswahl beibehalten?

boldButton.setFocusable(false); 
+0

Dies funktionierte auch und war viel einfacher zu implementieren. Vielen Dank. – Samsquanch

+0

+1, ich suchte nach dieser Methode, konnte sie aber irgendwie nicht finden. – casablanca

1

Wie Sie bemerkt haben, ist die Auswahl immer noch vorhanden, aber wenn Sie auf die Schaltfläche in der Symbolleiste klicken, wird der Fokus aus dem Textbereich entfernt und die Auswahl ausgeblendet. Sie müssen den Fokus mit requestFocus zurücksetzen. Sie müssen jedoch Ihren eigenen Aktionslistener schreiben, um den Fokuscode hinzuzufügen - Sie können dazu BoldAction erweitern.

+0

Wie würde ich mich darüber erstreckt? Ich versuchte gerade boldButton.addActionListener (neue StyledEditorKit.BoldAction() { public void actionPerformed (ActionEvent e) {// Funktioniert nicht, zu beheben pane.requestFocus(); } }) ;, aber das dann verliert die Fettdruck-Aktion. Danke für die Antwort. – Samsquanch

+0

@ user485418: Vergessen Sie nicht, 'super.actionPerformed (e);' – casablanca

+0

anzurufen Ich wusste, dass es so etwas trivial sein würde. Vielen Dank. – Samsquanch

Verwandte Themen