Quiero cambiar el idioma de una aplicación SWT en tiempo de ejecución. ¿Como hacer eso?

Estoy desarrollando una aplicación para mi clase de ingeniería de software y uno de los requisitos es que tenga 2 o más idiomas en la interfaz. Ya lo implementé. Por otro lado, se requiere que el usuario pueda cambiar el idioma por su propia voluntad eligiendo desde un cuadro combinado o algo así.

Como estoy usando AWT y Netbeans, no puedo editar el método initComponents del formulario, ya que se genera automáticamente. Tengo en mente la siguiente opción, pero no sé si funcionarían, así que estoy pidiendo ayuda.

-Edita el constructor de mi clase para que se vea así:

public JFmyConstructor() {
    initComponents(); //auto-generated
    myInitMethod();
}

El problema que creo que voy a encontrar es que necesito llamar al constructor una vez que la interfaz ya se está ejecutando (y, por lo tanto, todos los objetos instanciados. ¿Hay alguna solución para esto?

Respuesta 1

Probablemente mi respuesta llegue un poco tarde (lástima que hayas puesto un título incorrecto) ...

Obviamente no tiene que llamar a ningún constructor para cambiar el idioma en tiempo de ejecución. En aplicaciones Java Desktop es tan fácil como:

Locale brazilian = new Locale("pt", "BR");
Locale.setDefault(brazilian);

Por supuesto, si desea cambiarlo a través de JComboBox, probablemente lo haga un poco diferente. Lo que haría, en realidad crearía un modelo (Swing promueve el patrón de diseño MVC) que contendrá datos (diferentes configuraciones regionales) y establecería la configuración regional predeterminada en ActionListener correcto. Sin embargo, no es fácil.

Por supuesto, preferiría usar nombres nativos para Locales. Si los tiene construidos, puede obtener fácilmente el nombre nativo Nombre de la configuración regional simplemente llamando a getDisplayName () pasándose a sí mismo como un parámetro:

String brazilianNativeName = brazilian.getDisplayName(brazilian);

El resultado puede ser insatisfactorio para ciertas configuraciones regionales (creo que el portugués brasileño es lamentablemente una de ellas), pero no hay mucho que pueda hacer al respecto (a menos que use su propia cadena).

Para ser honesto, para solo dos idiomas, probablemente usaría algunos enlaces en su lugar. Puede usar JLabels simples para hacer eso, solo configure las propiedades de fuente y el color correctos y asigne ActionListener común. A continuación, puede consultar en qué se hizo clic y crear y establecer la configuración regional adecuadamente. Para la tarea que debería ser suficiente.

Respuesta: 2

SWT y NetBeans es una combinación extraña. Si puede hacer las cosas de la manera "normal" con SWT y usar Eclipse, entonces hay un poderoso conjunto de herramientas para administrar la localización, todo integrado. Vea, por ejemplo, esta introducción.

Respuesta: 3

Tengo una matriz de bytes [] que contiene datos ráster BGRA (por ejemplo, primer byte = componente azul, segundo = verde, quinto = siguiente píxel, azul) y me gustaría jugar con él. Específicamente, ¿hay una clase Java ...

Estoy ejecutando el código Java del Directorio A, y también hay un archivo myBat.bat allí. Quiero usar Java para ejecutar el archivo bat. El contenido de myBat.bat es: svn update C: \ DirectoryB \ file.txt I ...

Puedo hacer esto cuando conozco los tipos de objetos en tiempo de compilación: int obj1 = 3; float obj2 = (float) obj1; int obj3 = (int) obj1; short obj4 = (short) obj1; ¿Cuál es la forma más eficiente y sencilla de producir ...

Quiero crear una columna e instalar un botón en esta última columna de esta tabla. pinakas públicas de JPanel (String [] pinaka) {int sr = 0; // int ari8mos = 0; Cuerda[] ...