package captor.windowsystem; import java.awt.Frame; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.WindowEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.LookAndFeel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import captor.lib.intl.MyIntl; import captor.lib.util.StringUtil; import captor.modelsystem.Model; import captor.windowsystem.preferences.LookFeelType; /**@author Kicho * Janela que permite que o usu�rio configure as prefer�ncias de ferramenta */ public class PreferencesWindow extends CaptorFrame { public static final long serialVersionUID = 50458; JPanel jPanelBodyBar, jPanelHeaderBar; JButton jButtonOK, jButtonCancel; JLabel installPathLabel, lookAndFeelLabel, headerTitle; JTextField installPathText; JComboBox lookAndFeelComboBox; public PreferencesWindow(Model model) { super(model, model.getGui().getCaptorWindow()); } //------------------------------------------------------------------------- protected void init() throws Exception { jPanelBodyBar = new JPanel(); jPanelHeaderBar = new JPanel(); jButtonOK = new JButton(); jButtonCancel = new JButton(); makeHeaderBar(); makeBodyBar(); makePane(); } //------------------------------------------------------------------------- private void makePane() { this.getContentPane().setLayout(null); this.setCenterSize(427, 492); this.setLocale(java.util.Locale.getDefault()); this.setResizable(false); this.setState(Frame.NORMAL); this.setTitle(MyIntl.PREFERENCES_TITLE); this.addWindowListener(this); jButtonOK.setBounds(new Rectangle(223, 419, 80, 25)); jButtonCancel.setBounds(new Rectangle(320, 419, 80, 25)); jButtonOK.setText("OK"); jButtonCancel.setText(MyIntl.PREFERENCES_CANCEL); jButtonOK.addActionListener(this); jButtonCancel.addActionListener(this); this.getContentPane().add(jPanelHeaderBar); this.getContentPane().add(jPanelBodyBar); this.getContentPane().add(jPanelHeaderBar); this.getContentPane().add(jButtonOK); this.getContentPane().add(jButtonCancel); } //------------------------------------------------------------------------- private void makeHeaderBar() { jPanelHeaderBar.setBounds(new Rectangle(15, 10, 393, 45)); jPanelHeaderBar.setBackground(UIManager.getColor("Button.shadow")); jPanelHeaderBar.setBorder(BorderFactory.createLoweredBevelBorder()); jPanelHeaderBar.setLayout(null); headerTitle = new JLabel(MyIntl.PREFERENCES_GENERAL); headerTitle.setBounds(175,15, 150,13); jPanelHeaderBar.add(headerTitle); } //------------------------------------------------------------------------- private void makeBodyBar() { installPathLabel = new JLabel(MyIntl.PREFERENCES_INSTALL_PATH, JLabel.RIGHT); lookAndFeelLabel = new JLabel(MyIntl.PREFERENCES_LOOK_AND_FEEL, JLabel.RIGHT); installPathText = new JTextField(); lookAndFeelComboBox = new JComboBox(); UIManager.LookAndFeelInfo[] installed = UIManager.getInstalledLookAndFeels(); for (int i = 0; i < installed.length; i++) { LookFeelType lft = new LookFeelType(installed[i].getName(), installed[i].getClassName()); lookAndFeelComboBox.addItem(lft); } LookAndFeel lf = UIManager.getLookAndFeel(); for ( int i = 0; i < lookAndFeelComboBox.getItemCount(); i++ ) { LookFeelType lft = (LookFeelType) lookAndFeelComboBox.getItemAt(i); if ( lft.getId().equals(lf.getClass().getName()) ) lookAndFeelComboBox.setSelectedIndex(i); } lookAndFeelComboBox.addActionListener(this); String aux = model.getConfig().getSystemConfig().getInstallPath(); installPathText.setText(aux); jPanelBodyBar.setBorder(BorderFactory.createEtchedBorder()); jPanelBodyBar.setBounds(new Rectangle(15, 64, 393, 347)); jPanelBodyBar.setLayout(null); installPathLabel.setBounds(new Rectangle(10, 25, 100, 20)); installPathText.setBounds(new Rectangle(110, 25, 250, 20)); lookAndFeelLabel.setBounds(new Rectangle(10, 65, 100, 20)); lookAndFeelComboBox.setBounds(new Rectangle(110, 65, 250, 20)); jPanelBodyBar.add(installPathLabel); jPanelBodyBar.add(lookAndFeelLabel); jPanelBodyBar.add(installPathText); jPanelBodyBar.add(lookAndFeelComboBox); installPathText.setEnabled(false); } //------------------------------------------------------------------------- public void actionPerformed (ActionEvent e) { if ( e.getActionCommand().equals("OK") ) { close(); } else if ( e.getActionCommand().equals(MyIntl.PREFERENCES_CANCEL) ) { close(); } else if ( e.getActionCommand().equals("comboBoxChanged") ) { setLookAndFeel(); } } //------------------------------------------------------------------------- private void setLookAndFeel() { try { LookFeelType lft = (LookFeelType) lookAndFeelComboBox.getSelectedItem(); model.getConfig().getGuiConfig().setLookAndFeel(lft.getId()); UIManager.setLookAndFeel(lft.getId()); } catch (Exception e1) { String msgError = "<font color=\"#FF0000\"><b>Cannot install Look and Feel.</b></font><br>" + StringUtil.formatOutput(e1.toString()); model.getGui().getGuiView().setErrorView(msgError); } final JFrame root = model.getGui().getCaptorWindow(); try { UIManager.setLookAndFeel(model.getConfig().getGuiConfig().getLookAndFeel()); SwingUtilities.invokeLater( new Runnable() { public void run() { SwingUtilities.updateComponentTreeUI(root); } }); } catch (Exception e2) { String msgError = "Cannot install Look and Feel.\n" + e2; model.getGui().getGuiView().setErrorView(msgError); } final JFrame pref = this; try { UIManager.setLookAndFeel(model.getConfig().getGuiConfig().getLookAndFeel()); SwingUtilities.invokeLater( new Runnable() { public void run() { SwingUtilities.updateComponentTreeUI(pref); } }); } catch (Exception e2) { String msgError = "Cannot install Look and Feel.\n" + e2; model.getGui().getGuiView().setErrorView(msgError); } } //------------------------------------------------------------------------- protected void windowClosing2(WindowEvent e) { close(); } public void dispose() { close(); } //------------------------------------------------------------------------- }