软件界面要支持多语言,每选一种语言都需要调用界面上的所有控件setText(),麻烦死了,有没有简单的方法呀,多多赐教。

解决方案 »

  1.   

    Swing做多语言是很容易的,自己定义一个类管理语言资源文件,然后setText()中统一从这个类的键值对中取值(例如:setText(MultiLanguage.getString("btn.OK"));)切换语言的时候递归刷新所有组件就行了。
      

  2.   

    怎样递归刷新呢?举一个例子吧,比如一个panel panel是有title的,它里面有10个按钮btn1 btn2 ... btn10,如何递归刷新?
      

  3.   

    public interface MultiLanguagable {
      public void updateString();
    }
    你的Panel应该实现MultiLanguagable接口,然后在updateString()里写所有赋值,例如btn1.setText(MultiLanguage.getString("btn.OK"));btn2.setText(MultiLanguage.getString("btn.OK"));btn3.setText(MultiLanguage.getString("btn.OK"))...切换语言时调用MultiLanguage.executeUpdateString(this.getContentPane()); //循环子组件,执行实现Multilanguagable组件的updateString方法,如果子组件没有实现Multilanguagable,
       //且是容器,则进行递归。
       public static void executeUpdateString(Container container) {
           int size = container.getComponentCount();
           Component component;
           for (int i = 0; i < size; i++) {
               component = container.getComponent(i);
               if (component instanceof MultiLanguagable) {
                   ((MultiLanguagable)component).updateString();
               } else if (component instanceof Container) {
                   executeUpdateString((Container)component);
               }// 否则不作任何事情
           }
       }