加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何将文本绑定到Java中的JLabel?

发布时间:2020-12-15 02:32:01 所属栏目:Java 来源:网络整理
导读:我的 java应用程序中有几个GUI表单.所有表格都有文字.我从一个名为dictionary的共享对象中为我的组件设置了文本.我的程序中需要一个功能;按用户需要切换语言;这样所有形式的所有文本都可以用另一种语言替换.我在共享的Dictionary对象中有所有文本.是否有干净
我的 java应用程序中有几个GUI表单.所有表格都有文字.我从一个名为dictionary的共享对象中为我的组件设置了文本.我的程序中需要一个功能;按用户需要切换语言;这样所有形式的所有文本都可以用另一种语言替换.我在共享的Dictionary对象中有所有文本.是否有干净的方式以干净的方式改变语言?
我知道netbeans国际化工具,但我想使用另一种方法.

编辑:例如:

label1.setText(Dictionary.Hello);

和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));
      }

    });
  }
}

正如我所说,只是一些例子剪断了我希望你能得到这个想法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读