Swing Language Menu

Having trouble implementing a menu that allows the user to choose a gui language. Never really used swing or swing menus for that matter and I really need help. This is what I have so far (am I headed in the right direction and where do I go from here)?:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

publicclass Menuimplements ActionListener{

JTextArea output;

JScrollPane scrollPane;

String newline ="\n";

static JMenuItem english, spanish, sicilian, italian;

public JMenuBar createMenuBar(){

JMenuBar menuBar;

JMenu menu;

//Create the menu bar.

menuBar =new JMenuBar();

//Build the first menu.

menu =new JMenu("Language");

menu.setMnemonic(KeyEvent.VK_A);

menuBar.add(menu);

//a group of JMenuItems

english =new JMenuItem("English",KeyEvent.VK_T);

english.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));

english.addActionListener(this);

menu.add(english);

//a group of JMenuItems

sicilian =new JMenuItem("Siciliano",KeyEvent.VK_T);

sicilian.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));

sicilian.addActionListener(this);

menu.add(sicilian);

italian =new JMenuItem("Italiano",KeyEvent.VK_T);

italian.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));

italian.addActionListener(this);

menu.add(italian);

spanish =new JMenuItem("Espanol",KeyEvent.VK_T);

spanish.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));

spanish.addActionListener(this);

menu.add(spanish);

return menuBar;

}

publicvoid actionPerformed (ActionEvent e){

Messages m;

JMenuItem b = (JMenuItem) e.getSource();

if (b == english) m =new Messages(Messages.ENGLISH);

elseif (b == sicilian) m =new Messages(Messages.SICILIAN);

elseif (b == spanish) m =new Messages(Messages.SPANISH);

else m =new Messages(Messages.ITALIAN);

((ScopaGUI) b.getTopLevelAncestor()).setMessage(m);

}

public Container createContentPane(){

//Create the content-pane-to-be.

JPanel contentPane =new JPanel(new BorderLayout());

contentPane.setOpaque(true);

//Create a scrolled text area.

output =new JTextArea(5, 30);

output.setEditable(false);

scrollPane =new JScrollPane(output);

//Add the text area to the content pane.

contentPane.add(scrollPane, BorderLayout.CENTER);

return contentPane;

}

privatestaticvoid createAndShowGUI(){

//Create and set up the window.

JFrame frame =new JFrame("Menu");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Create and set up the content pane.

Menu pane =new Menu();

frame.setJMenuBar(pane.createMenuBar());

frame.setContentPane(pane.createContentPane());

//Display the window.

frame.setSize(450, 260);

frame.setVisible(true);

}

}

[5338 byte] By [germans88a] at [2007-11-27 2:05:17]
# 1
How about ResourceBundle ? http://java.sun.com/developer/technicalArticles/Intl/ResourceBundles/
rym82a at 2007-7-12 1:50:27 > top of Java-index,Java Essentials,Java Programming...
# 2

Sorry for being so vague, I'm trying to implement a class to take the place of a button class which looks like this:

class LanguageButtonGroup extends ButtonGroup implements ActionListener {

private JRadioButton english, sicilian, italian, spanish;

public LanguageButtonGroup (int language, JPanel p) {

english = new JRadioButton("English");

sicilian = new JRadioButton("Siciliano");

italian = new JRadioButton("Italiano");

spanish = new JRadioButton("Espanol");

add(english); p.add(english);

add(sicilian); p.add(sicilian);

add(italian); p.add(italian);

add(spanish); p.add(spanish);

english.addActionListener(this);

sicilian.addActionListener(this);

italian.addActionListener(this);

spanish.addActionListener(this);

switch (language) {

case Messages.ENGLISH: english.setSelected(true); break;

case Messages.SICILIAN: sicilian.setSelected(true); break;

case Messages.ITALIAN: italian.setSelected(true); break;

case Messages.SPANISH: spanish.setSelected(true); break;

}

}

public void actionPerformed (ActionEvent e) {

Messages m;

JRadioButton b = (JRadioButton) e.getSource();

if (b == english) m = new Messages(Messages.ENGLISH);

else if (b == sicilian) m = new Messages(Messages.SICILIAN);

else if (b == spanish) m = new Messages(Messages.SPANISH);

else m = new Messages(Messages.ITALIAN);

((ScopaGUI) b.getTopLevelAncestor()).setMessage(m);

}

}

I'm not really sure how to go about changing the language when the user selects a menu item like spanish or english.

This is what the main class looks like:

public class Scopa {

public static void main (String[] arg) {

ScopaUI ui = null;

Messages messages = null;

boolean debug = false;

try {

for (int i = 0; i < arg.length; i++) {

if (arg[i].equals("-g")) ui = new ScopaGUI();

else if (arg[i].equals("-t")) ui = new ScopaTUI();

else if (arg[i].equals("-d")) debug = true;

else if (arg[i].equals("-l")) {

if (arg[++i].equals("Sicilian")) messages = new Messages(Messages.SICILIAN);

else if (arg[i].equals("Italian")) messages = new Messages(Messages.ITALIAN);

else if (arg[i].equals("Spanish")) messages = new Messages(Messages.SPANISH);

else if (!arg[i].equals("English"))

throw new IllegalArgumentException("Unsupported language -- " + arg[i]);

}

else throw new IllegalArgumentException("Invalid option -- " + arg[i] +

"; usage: Scopa [ -g | -t ] -l language");

}

final ScopaUI chosenUI = ui == null ? new ScopaGUI() : ui;

final Messages chosenLanguage = messages == null ? new Messages(Messages.ENGLISH) : messages;

final boolean debugging = debug;

if (chosenUI.getClass().getName().endsWith("TUI")) chosenUI.runUI(chosenLanguage, debugging);

else javax.swing.SwingUtilities.invokeLater(new Runnable () {

public void run () {

chosenUI.runUI(chosenLanguage, debugging);

chosenUI.createAndShowGUI();

}

});

}

catch (IllegalArgumentException e) { IO.stderr.println(e.getMessage()); }

}

}

-Thanks

germans88a at 2007-7-12 1:50:27 > top of Java-index,Java Essentials,Java Programming...
# 3

The scopagui class has this method for initializing the gui:

public void runUI (Messages m, boolean debug) {

message = m;

initPanels();

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setContentPane(main);

setResizable(false);

theGame = new Game(this, m);

if (debug) theGame.setDebugMode();

theGame.reset();

clearPickup();

pack();

setLocationRelativeTo(null);

setVisible(true);

}

All I need is to add the menu to the current gui, but I don't know how to add it to the runUI method.

germans88a at 2007-7-12 1:50:27 > top of Java-index,Java Essentials,Java Programming...