我通过扩展JLabel并覆盖getText来返回对语言选择的评估来解决这个问题。
您还需要一些发布/订阅机制来“告诉”您的标签语言已更改。
在这里我使用updateLanguage
当用户更改语言时,您将触发事件:
import mon.eventbus.EventBus;
public class EventBusHolder {
private static EventBus bus = new EventBus();
public static EventBus get() {
return bus;
}
}
要使用的标签组件:
JComboBox cboLanguage = new JComboBox();
cboLanguage.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox)e.getSource();
Lang l = (Lang)cb.getSelectedItem();
// this is the event fire
ChangeEvent event = getChangeEvent(l);
EventBusHolder.get().post(event);
}
});
当您实例化标签时,您必须传递密钥进行翻译:
public class MyLabel extends JLabel {
private static final long serialVersionUID = 1L;
public MyLabel (String key) {
super(key);
// register this in event bus
EventBusHolder.get().register(this);
}
@Override
public String getText() {
return Messages.getString(super.getText());
}
@Subscribe
public void recordCustomerChange(ChangeEvent e) {
revalidate();
}
}
有关JLabel lbl = new JLabel("App.lblLanguage.text");的更多用法示例