如何将文本绑定到Java中的JLabel?
发布时间:2020-12-15 02:32:01 所属栏目:Java 来源:网络整理
导读:我的 java应用程序中有几个GUI表单.所有表格都有文字.我从一个名为dictionary的共享对象中为我的组件设置了文本.我的程序中需要一个功能;按用户需要切换语言;这样所有形式的所有文本都可以用另一种语言替换.我在共享的Dictionary对象中有所有文本.是否有干净
我的
java应用程序中有几个GUI表单.所有表格都有文字.我从一个名为dictionary的共享对象中为我的组件设置了文本.我的程序中需要一个功能;按用户需要切换语言;这样所有形式的所有文本都可以用另一种语言替换.我在共享的Dictionary对象中有所有文本.是否有干净的方式以干净的方式改变语言?
我知道netbeans国际化工具,但我想使用另一种方法. 编辑:例如:
和Dictionary类定义为: public class Dictionary { public static String Hello = "hello"; } 而另一种语言: public class DictionaryPersian extends Dictionary { public DictionaryPersian(){ Hello = "????"; } } 我想找到一种方法将字段Dictionary.hello绑定到jlabel1,这样当变量值改变时,它会反映在jlabel1文本中. 解决方法
例如,您可以将JLabel子类化,使用一些id直接从字典设置文本.它还可以充当文本或语言更改的监听器,以相应地自动更改显示的文本.
为了解释一些代码剪断(未经测试,也未完成,如果您愿意,字典标签可以以不同方式实现,您的字典也应该实现IDictionary) public interface IDictionaryListener { void dictionaryChanged(IDictionary from,IDictionary to); } public interface IDictionary { String getString(String forKey); } public final class DictionaryManager { private static final DictionaryManager INSTANCE=new DictionaryManager(); private final List<IDictionaryListener> listeners=new ArrayList<>(); private IDictionary dictionary; private DictionaryManager() {}; public static synchronized void setDictionary(IDictionary dict) { IDictionary old = INSTANCE.dictionary; INSTANCE.dictionary=dict; fireDictionaryChanged(old,dict); } public static synchronized IDictionary getDictionary() { return INSTANCE.dictionary; } public static synchronized void addDictionaryListener(IDictionaryListener l) { INSTANCE.listeners.add(l); } public static synchronized void removeDictionaryListener(IDictionaryListener l) { INSTANCE.listeners.remove(l); } private static void fireDictionaryChanged(IDictionary from,IDictionary to) { for (IDictionaryListener l:INSTANCE.listeners) { l.dictionaryChanged(from,to); } } } public class DictionaryLabel extends JLabel implements IDictionaryListener { private String key; public DictionaryLabel(String dictKey) { super(); key = dictKey; DictionaryManager.addDictionaryListener(this); super.setText(DictionaryManager.getDictionary().getString(key)); } @Override public final void setText(String text) { throw new RuntimeException("Not supported! Dictionary is used for this!"); } @Override public void dictionaryChanged(final IDictionary from,final IDictionary to) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { DictionaryLabel.super.setText(to.getString(key)); } }); } } 正如我所说,只是一些例子剪断了我希望你能得到这个想法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |