import java.awt.*; import java.awt.event.*; import java.text.*; import java.util.*; import javax.swing.*; import javax.swing.border.TitledBorder; public class SimpleExample extends JPanel { static JFrame frame; static Font smallFont; static Font mediumFont; static Font bigFont; private ResourceBundle resources; private ComponentOrientation co; private static void applyComponentOrientation(Component c, ComponentOrientation o) { c.setComponentOrientation(o); if (c instanceof JMenu) { JMenu menu = (JMenu)c; int ncomponents = menu.getMenuComponentCount(); for (int i = 0 ; i < ncomponents ; ++i) { applyComponentOrientation( menu.getMenuComponent(i), o ); } } else if (c instanceof Container) { Container container = (Container)c; int ncomponents = container.getComponentCount(); for (int i = 0 ; i < ncomponents ; ++i) { applyComponentOrientation( container.getComponent(i), o ); } } } private void loadResources() { try { resources = ResourceBundle.getBundle("resources.Simple", Locale.getDefault()); } catch (MissingResourceException mre) { mre.printStackTrace(); System.exit(1); } } private static JFrame getFrame() { return frame; } public SimpleExample() { // Load our resource bundle loadResources(); JRadioButton oneButton, twoButton, threeButton; JButton button; GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); ge.getAllFonts(); // Setup the fonts smallFont = new Font("Bitstream Cyberbit", Font.PLAIN, 14); mediumFont = new Font("Bitstream Cyberbit", Font.PLAIN, 18); bigFont = new Font("Bitstream Cyberbit", Font.PLAIN, 20); co = ComponentOrientation.getOrientation(Locale.getDefault()); setLayout(new BoxLayout(this,BoxLayout.Y_AXIS)); String language = Locale.getDefault().getLanguage(); // Create the buttons button = new JButton(resources.getString("Hello")); button.setToolTipText(resources.getString("HelloToolTip")); button.setFont(mediumFont); // Setup the buttons oneButton = new JRadioButton(resources.getString("One")); oneButton.setFont(mediumFont); oneButton.setMnemonic(resources.getString("OneMnemonic").charAt(0)); oneButton.setHorizontalAlignment(JButton.TRAILING); oneButton.setHorizontalTextPosition(JButton.TRAILING); twoButton = new JRadioButton(resources.getString("Two")); twoButton.setFont(mediumFont); twoButton.setMnemonic(resources.getString("TwoMnemonic").charAt(0)); twoButton.setHorizontalAlignment(JButton.TRAILING); twoButton.setHorizontalTextPosition(JButton.TRAILING); threeButton = new JRadioButton(resources.getString("Three")); threeButton.setFont(mediumFont); threeButton.setMnemonic(resources.getString("ThreeMnemonic").charAt(0)); threeButton.setHorizontalAlignment(JButton.TRAILING); threeButton.setHorizontalTextPosition(JButton.TRAILING); // Group the radio buttons ButtonGroup group = new ButtonGroup(); group.add(oneButton); group.add(twoButton); group.add(threeButton); // Register a listener for the radio buttons RadioListener myListener = new RadioListener(); oneButton.addActionListener(myListener); twoButton.addActionListener(myListener); threeButton.addActionListener(myListener); // Setup the button panel JPanel buttonPanel = new JPanel(); buttonPanel.setMaximumSize(new Dimension(Short.MAX_VALUE,100)); TitledBorder tb = new TitledBorder(resources.getString("Numbers")); tb.setTitleFont(smallFont); tb.setTitleJustification( co.isLeftToRight() ? TitledBorder.LEFT : TitledBorder.RIGHT); buttonPanel.setBorder(tb); buttonPanel.setLayout(new FlowLayout()); buttonPanel.add(button); buttonPanel.add(oneButton); buttonPanel.add(twoButton); buttonPanel.add(threeButton); add(buttonPanel, BorderLayout.CENTER); // Setup the date panel JPanel datePanel = new JPanel(); datePanel.setMaximumSize(new Dimension(Short.MAX_VALUE,100)); tb = new TitledBorder(resources.getString("Dates")); tb.setTitleFont(smallFont); tb.setTitleJustification( co.isLeftToRight() ? TitledBorder.LEFT : TitledBorder.RIGHT); datePanel.setBorder(tb); datePanel.setLayout(new BoxLayout(datePanel,BoxLayout.X_AXIS)); datePanel.add(Box.createRigidArea(new Dimension(5,1))); DateFormatSymbols dfs = new DateFormatSymbols(); JComboBox months = new JComboBox(dfs.getMonths()); months.setFont(mediumFont); String weekDays[] = dfs.getWeekdays(); JComboBox days = new JComboBox(); days.setFont(mediumFont); // Determine what day is the first day of the week GregorianCalendar cal = new GregorianCalendar(); int firstDayOfWeek = cal.getFirstDayOfWeek(); int dayOfWeek; for (dayOfWeek = firstDayOfWeek; dayOfWeek < weekDays.length; dayOfWeek++) days.addItem(weekDays[dayOfWeek]); for (dayOfWeek = 0; dayOfWeek < firstDayOfWeek; dayOfWeek++) days.addItem(weekDays[dayOfWeek]); if (!co.isLeftToRight()) { datePanel.add(days); datePanel.add(Box.createRigidArea(new Dimension(5,1))); datePanel.add(months); datePanel.add(Box.createRigidArea(new Dimension(5,1))); } else { datePanel.add(months); datePanel.add(Box.createRigidArea(new Dimension(5,1))); datePanel.add(days); datePanel.add(Box.createRigidArea(new Dimension(5,1))); } add(datePanel); // Setup the formatting panel JPanel formatPanel = new JPanel(); formatPanel.setMaximumSize(new Dimension(Short.MAX_VALUE,100)); tb = new TitledBorder(resources.getString("Formats")); tb.setTitleFont(smallFont); tb.setTitleJustification(co.isLeftToRight() ? TitledBorder.LEFT : TitledBorder.RIGHT); formatPanel.setBorder(tb); formatPanel.setLayout(new BoxLayout(formatPanel,BoxLayout.X_AXIS)); formatPanel.add(Box.createRigidArea(new Dimension(5,1))); double theNumber = 1234.56; NumberFormat nFormat = NumberFormat.getInstance(); NumberFormat cFormat = NumberFormat.getCurrencyInstance(); NumberFormat pFormat = NumberFormat.getPercentInstance(); DateFormat dFormat = DateFormat.getDateInstance(); JLabel numberLabel = new JLabel(nFormat.format(theNumber)); numberLabel.setForeground(Color.black); numberLabel.setFont(bigFont); JLabel percentLabel = new JLabel(pFormat.format(theNumber)); percentLabel.setForeground(Color.black); percentLabel.setFont(bigFont); JLabel currencyLabel = new JLabel(cFormat.format(theNumber)); currencyLabel.setForeground(Color.black); currencyLabel.setFont(bigFont); JLabel dateLabel = new JLabel(dFormat.format(new Date())); dateLabel.setForeground(Color.black); dateLabel.setFont(bigFont); formatPanel.add(Box.createRigidArea(new Dimension(25,1))); if (co.isLeftToRight()) { formatPanel.add(numberLabel); formatPanel.add(Box.createRigidArea(new Dimension(25,1))); formatPanel.add(percentLabel); formatPanel.add(Box.createRigidArea(new Dimension(25,1))); formatPanel.add(currencyLabel); formatPanel.add(Box.createRigidArea(new Dimension(25,1))); formatPanel.add(dateLabel); } else { formatPanel.add(dateLabel); formatPanel.add(Box.createRigidArea(new Dimension(25,1))); formatPanel.add(currencyLabel); formatPanel.add(Box.createRigidArea(new Dimension(25,1))); formatPanel.add(percentLabel); formatPanel.add(Box.createRigidArea(new Dimension(25,1))); formatPanel.add(numberLabel); } formatPanel.add(Box.createRigidArea(new Dimension(25,1))); add(formatPanel); } public JMenuBar createMenuBar() { JMenuBar menuBar = new JMenuBar(); JMenu file = (JMenu) menuBar.add(new JMenu(resources.getString("FileMenu"))); file.setFont(mediumFont); file.setMnemonic(resources.getString("FileMenuMnemonic").charAt(0)); JMenuItem exitItem = (JMenuItem) file.add(new JMenuItem(resources.getString("FileMenuExit"))); exitItem.setFont(mediumFont); exitItem.setMnemonic(resources.getString("FileMenuExitMnemonic").charAt(0)); exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); menuBar.add(new LocaleChanger()); return menuBar; } public void reloadResources() { try { resources = ResourceBundle.getBundle("resources.Simple", Locale.getDefault()); } catch (MissingResourceException mre) { mre.printStackTrace(); System.exit(1); } } /** * An ActionListener that listens to the radio buttons */ class RadioListener implements ActionListener { public void actionPerformed(ActionEvent e) { String lnfName = e.getActionCommand(); Object[] options = { resources.getString("OK"), resources.getString("CANCEL") }; Object[] arguments = { new Integer(3), lnfName }; JOptionPane.sho*****tionDialog(null, MessageFormat.format(resources.getString("WarningMsg"), arguments), resources.getString("WarningTitle"), JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); try { } catch (Exception exc) { JRadioButton button = (JRadioButton)e.getSource(); button.setEnabled(false); } } } /** * A class to change the locale for the application */ class LocaleChanger extends JMenu implements ItemListener { public LocaleChanger() { super(); setText(resources.getString("LanguageMenu")); setFont(mediumFont); setMnemonic(resources.getString("LanguageMenuMnemonic").charAt(0)); ButtonGroup langGroup = new ButtonGroup(); String language = Locale.getDefault().getLanguage(); // Sort the language names according to the rules specific to each locale RuleBasedCollator rbc = (RuleBasedCollator)Collator.getInstance(); ArrayList al = new ArrayList(); al.add(resources.getString("Arabic")); al.add(resources.getString("Chinese")); al.add(resources.getString("English")); al.add(resources.getString("German")); al.add(resources.getString("Italian")); al.add(resources.getString("French")); al.add(resources.getString("Hebrew")); al.add(resources.getString("Japanese")); al.add(resources.getString("Russian")); Collections.sort(al, rbc); String langName = Locale.getDefault().getDisplayLanguage(); for (int i = 0; i < al.size(); i++) { JRadioButtonMenuItem mi; mi = (JRadioButtonMenuItem) add(new JRadioButtonMenuItem((String)al.get(i))); mi.setFont(mediumFont); if (langName.equalsIgnoreCase((String)al.get(i))) mi.setSelected(true); mi.addItemListener(this); langGroup.add(mi); } } public void itemStateChanged(ItemEvent e) { JRadioButtonMenuItem rb = (JRadioButtonMenuItem) e.getSource(); if (rb.isSelected()) { String selected = rb.getText(); if (selected.equals(resources.getString("Arabic"))) { Locale.setDefault(new Locale("ar", "EG")); co = ComponentOrientation.RIGHT_TO_LEFT; } else if (selected.equals(resources.getString("English"))) { Locale.setDefault(Locale.US); co = ComponentOrientation.LEFT_TO_RIGHT; } else if (selected.equals(resources.getString("German"))) { Locale.setDefault(Locale.GERMANY); co = ComponentOrientation.LEFT_TO_RIGHT; } else if (selected.equals(resources.getString("Italian"))) { Locale.setDefault(Locale.ITALY); co = ComponentOrientation.LEFT_TO_RIGHT; } else if (selected.equals(resources.getString("French"))) { Locale.setDefault(Locale.FRANCE); co = ComponentOrientation.LEFT_TO_RIGHT; } else if (selected.equals(resources.getString("Hebrew"))) { Locale.setDefault(new Locale("iw", "IL")); co = ComponentOrientation.RIGHT_TO_LEFT; } else if (selected.equals(resources.getString("Chinese"))) { Locale.setDefault(Locale.CHINA); co = ComponentOrientation.LEFT_TO_RIGHT; } else if (selected.equals(resources.getString("Japanese"))) { Locale.setDefault(Locale.JAPAN); co = ComponentOrientation.LEFT_TO_RIGHT; } else if (selected.equals(resources.getString("Russian"))) { Locale.setDefault(new Locale("ru", "RU")); co = ComponentOrientation.LEFT_TO_RIGHT; } } SimpleExample panel = new SimpleExample(); SimpleExample.frame.setVisible(false); SimpleExample.frame.getContentPane().removeAll(); SimpleExample.frame.setJMenuBar(panel.createMenuBar()); SimpleExample.frame.getContentPane().add("Center", panel); SimpleExample.frame.pack(); SimpleExample.frame.show(); applyComponentOrientation(SimpleExample.getFrame(), co); } } public static void main(String [] argv) { SimpleExample panel = new SimpleExample(); frame = new JFrame("Simple Example"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); frame.setJMenuBar(panel.createMenuBar()); frame.getContentPane().add("Center", panel); frame.pack(); frame.setVisible(true); } } //源代码片段来自云代码http://yuncode.net