**结束。**此问题需要详细的调试信息。它目前不接受答案。**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
5个月前关门了。改进这个问题我需要在应用程序的所有文本区域将默认语言更改为希伯来语。我试着用set local,但没用。你知道吗?
w46czmvw1#
下面的代码演示了我所知道的配置 JTextComponent (哪个 JTextArea 是的一个子类),以便在获得输入焦点时显示希伯来文字符。换句话说,用户不需要在 JTextComponent 在用户开始输入文本之前获得焦点。
JTextComponent
JTextArea
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() 方法。我在 JTextArea 当 JTextArea 获得焦点。事实上 focusGained() 方法执行配置 JTextArea 用于在用户开始向其中输入文本时显示希伯来语。请注意 focusGained() 方法可用于配置 JTextArea 显示任何[支持的]语言。你所需要改变的就是 Locale 传递给 selectInputMethod() 方法。还要注意,我只设置了 ComponentOrientation 所以希伯来文在 JTextArea 看起来很“自然”。不需要它来配置 JTextArea 显示希伯来语。
JButton
focusGained()
Locale
selectInputMethod()
ComponentOrientation
1条答案
按热度按时间w46czmvw1#
下面的代码演示了我所知道的配置
JTextComponent
(哪个JTextArea
是的一个子类),以便在获得输入焦点时显示希伯来文字符。换句话说,用户不需要在JTextComponent
在用户开始输入文本之前获得焦点。我只添加了
JButton
因此将有多个[gui]组件,以便允许将焦点从一个组件转移到另一个组件。以上代码的相关部分是
focusGained()
方法。我在JTextArea
当JTextArea
获得焦点。事实上focusGained()
方法执行配置JTextArea
用于在用户开始向其中输入文本时显示希伯来语。请注意
focusGained()
方法可用于配置JTextArea
显示任何[支持的]语言。你所需要改变的就是Locale
传递给selectInputMethod()
方法。还要注意,我只设置了
ComponentOrientation
所以希伯来文在JTextArea
看起来很“自然”。不需要它来配置JTextArea
显示希伯来语。