我问如何选择在组合框中的值而不会失去JEditorPane的重点/选择。
当您从组合框中选择一个项目时,不会丢失在编辑器窗格中选择的文本。选择依然存在,但只有在编辑器窗格重新获得焦点后才能进行绘制。
所以最简单的方法是使用JMenuItem。请阅读Swing教程Text Component Features中的一节,以获取相关示例。
如果你仍然想使用组合框,那么你可以在你的ActionListener
添加整数值组合框然后代码组合框看起来是这样的:
@Override
public void actionPerformed(ActionEvent e)
{
Integer value = (Integer)comboBox.getSelectedItem();
Action action = new StyledEditorKit.FontSizeAction("Font size", value);
action.actionPerformed(null);
}
的StyledEditorKit
行动从延长TextAction
。 TextAction
知道有焦点的最后一个文本组件,因此字体更改应用于该文本组件。
如果你真的想要的文本字段显示选择,那么你需要创建一个自定义Caret
和覆盖focusLost
方法不调用setSelectionVisible(false)
(这是默认的行为。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
public class DefaultCaretTest extends JFrame
{
public DefaultCaretTest()
{
JTextField textField1 = new JTextField("Text Field1 ");
JTextField textField2 = new JTextField("Text Field2 ");
textField1.setCaret(new SelectionCaret());
textField2.setCaret(new SelectionCaret());
textField1.select(5, 11);
textField2.select(5, 11);
((DefaultCaret)textField2.getCaret()).setSelectionVisible(true);
add(textField1, BorderLayout.WEST);
add(textField2, BorderLayout.EAST);
}
static class SelectionCaret extends DefaultCaret
{
public SelectionCaret()
{
setBlinkRate(UIManager.getInt("TextField.caretBlinkRate"));
}
public void focusGained(FocusEvent e)
{
setVisible(true);
setSelectionVisible(true);
}
public void focusLost(FocusEvent e)
{
setVisible(false);
}
}
public static void main(String[] args)
{
DefaultCaretTest frame = new DefaultCaretTest();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
当然。当焦点在任何其他组件,而不仅仅是组合框中选择将保持
您还可以使用:
comboBox.setFocusable(false);
由于组合框无法获得焦点,焦点将保留在文本组件上,但问题在于用户将无法使用键盘从组合框中选择字体大小。正确的GUI设计总是允许用户使用键盘或鼠标来执行操作。
[As really basic example](http://stackoverflow.com/questions/18948148/jeditorpane-set-foreground-color-for-different-words/18948340#18948340)如何将不同的样式应用到JEditorPane ' – MadProgrammer
感谢您的回应,我很喜欢实际应用样式(这里没有显示这些样例以保持较小的样式)。问题是在编辑器窗格中选择文本时获取组合框输入。 – Amber