当前位置: 首页 > 知识库问答 >
问题:

如何编辑在JEditorPane中选择文本的JComboBox

邢思淼
2023-03-14

我有一个包含两个组件的UI--一个JEditorPane和一个JComboBox。我的目标是能够在JEditorPane中键入一些内容,选择文本的一部分,并且当它仍然被选中时,在可编辑的JComboBox中键入和/或选择一个值。

这是一个文本编辑器类型的程序,我想在其中只更改编辑器窗格中选定文本的字体大小。字体大小来自“可编辑”组合框。为了澄清一下,我不是在问如何对文本应用样式,我是在问如何在组合框中选择一个值,而不丢失JeditorPane中的焦点/选择。

这是UI的代码,但我不确定从哪里开始处理焦点...

public static void main(String [] args)
{
    JFrame frame = new JFrame();
    JPanel contentPane = new JPanel();

    JComboBox<String> combo = new JComboBox(new String [] {"Hello", "World"});
    contentPane.add(combo);

    JEditorPane editor = new JEditorPane();
    contentPane.add(editor);

    frame.setContentPane(contentPane);
    frame.pack();
    frame.setVisible(true);
}

共有1个答案

魏鸿禧
2023-03-14

我在问如何在组合框中选择一个值而不丢失JeditorPane中的焦点/选择。

当您从组合框中选择一个项目时,您不会丢失编辑器窗格中对文本的选择。所选内容仍然保留,但在编辑器窗格重新获得焦点之前不会对其进行绘制。

所以最简单的方法就是使用JMenuItem。阅读Swing教程中关于文本组件特性的一节,以获得这样做的示例。

@Override
public void actionPerformed(ActionEvent e)
{
    Integer value = (Integer)comboBox.getSelectedItem();
    Action action = new StyledEditorKit.FontSizeAction("Font size", value);
    action.actionPerformed(null);
}
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设计总是允许用户使用键盘或鼠标执行操作。

 类似资料:
  • 我当前正在开发一个程序,允许您使用更改从中选定文本的颜色,但它仅在我使用光标运行时临时更改文本。 我想知道如何设置或更改它,以及

  • 问题内容: 我想让可编辑JTables中的编辑器在开始编辑时选择单元格中的所有文本。我已经尝试了几件事,都是围绕从TableCellEditor.getTableCellEditorComponent方法返回的组件上调用JTextComponent.selectAll()进行的。我尝试过的所有方法均无济于事。 在最近的尝试中,我从Swing教程更改了SimpleTableDemo类,以使用自定义T

  • 如何在JeditorPane中设置字体/粗体/斜体/下划线? 我试图创建一个简单的文档编辑器,但我只能弄清楚如何设置整个JEditor/JText窗格中的FONT/Bold/Italic/Whatever。 RTF是首选的,HTML也可以。

  • 问题内容: 如何在JTextPane中轻松编辑所选文本的样式?似乎没有很多资源。即使您可以引导我获得大量有用的资源,我也将不胜感激。 另外,如何获得所选文本的当前样式?我试过了,但似乎没有用。 问题答案: 在此pastebin中查看以下代码: http://pbin.oogly.co.uk/listings/viewlistingdetail/d6fe483a52c52aa951ca15762ed

  • 我正在android studio中使用java开发和应用程序,希望在RecyclerView函数中编辑文本。我该怎么做?

  • 问题内容: 在JavaScript中,可以通过编程方式选择或元素中的文本。您可以使用来集中输入,然后使用来选择其内容。您甚至可以使用选择特定范围。 我的问题是:在元素中也有任何方法可以这样做吗? 我发现我可以这样做,可以将插入符号放入元素中,但是随后运行不起作用(也不行)。我在网上找不到任何有关它的信息,但也许我在寻找错误的信息… 顺便说一下,如果有什么不同,我只需要它在Google Chrome