如何在swing中设置文本区域的语言?

soat7uwm  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(394)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

5个月前关门了。
改进这个问题
我需要在应用程序的所有文本区域将默认语言更改为希伯来语。我试着用set local,但没用。
你知道吗?

w46czmvw

w46czmvw1#

下面的代码演示了我所知道的配置 JTextComponent (哪个 JTextArea 是的一个子类),以便在获得输入焦点时显示希伯来文字符。换句话说,用户不需要在 JTextComponent 在用户开始输入文本之前获得焦点。

import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.im.InputContext;
import java.util.Locale;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class DfltHbrw implements ActionListener, FocusListener, Runnable {
    private static final Locale  HEBREW = new Locale("iw", "IL");
    private static final String  EXIT = "\u05E1\u05D2\u05D5\u05E8";

    private JFrame  frame;
    private JTextArea  textArea;

    @Override // java.awt.event.ActionEvent
    public void actionPerformed(ActionEvent event) {
        String actionCommand = event.getActionCommand();
        if (EXIT.equals(actionCommand)) {
            System.exit(0);
        }
    }

    @Override // java.awt.event.FocusListener
    public void focusGained(FocusEvent event) {
        InputContext ic = textArea.getInputContext();
        ic.selectInputMethod(HEBREW);
    }

    @Override // java.awt.event.FocusListener
    public void focusLost(FocusEvent event) {
        // Do nothing.
    }

    @Override // java.lang.Runnable
    public void run() {
        showGui();
    }

    private JPanel createButtons() {
        JPanel buttonsPanel = new JPanel();
        JButton button = new JButton(EXIT);
        button.addActionListener(this);
        buttonsPanel.add(button);
        return buttonsPanel;
    }

    private JScrollPane createTextArea() {
        textArea = new JTextArea(20, 60);
        textArea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        textArea.addFocusListener(this);
        JScrollPane scrollPane = new JScrollPane(textArea);
        scrollPane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
        return scrollPane;
    }

    private void showGui() {
        frame = new JFrame("Hebrew");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(createTextArea(), BorderLayout.CENTER);
        frame.add(createButtons(), BorderLayout.PAGE_END);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    /**
     * Start here.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new DfltHbrw());
    }
}

我只添加了 JButton 因此将有多个[gui]组件,以便允许将焦点从一个组件转移到另一个组件。
以上代码的相关部分是 focusGained() 方法。我在 JTextAreaJTextArea 获得焦点。事实上 focusGained() 方法执行配置 JTextArea 用于在用户开始向其中输入文本时显示希伯来语。
请注意 focusGained() 方法可用于配置 JTextArea 显示任何[支持的]语言。你所需要改变的就是 Locale 传递给 selectInputMethod() 方法。
还要注意,我只设置了 ComponentOrientation 所以希伯来文在 JTextArea 看起来很“自然”。不需要它来配置 JTextArea 显示希伯来语。

相关问题