Swing Action

Hi,
Can anyone help me with Swing Action?
In my application main class, I am using Swing Actions.
This is sample code,
Action clearMeasure =
//code to create action we are using our own API which contains getAction(..)
//After creating action to put name and description
clearMeasure.putValue(Action.NAME, "Remove Measure");
clearMeasure.putValue(Action.SMALL_ICON,null);
//Menu Item is associated with this action
JMenuItem clear = new JMenuItem(clearMeasure);
removePopup.add(clear);
So when I add this action to menu item, every thing is working fine.
Now my problem is to call another method when this menu item is selected.
We are not using actionPerformed method and whenever we select menu items, these actions are generated.
So how can I call another method when this menu is selected? Where should I add the code to call method which doesn't contain actionPerformed()?
Is there any we can call methods in putValue()?
Thanks in advance
nmadhava

You can add another ActionListener to your menuitem. JMenuItem clear = new JMenuItem(clearMeasure);
clear.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent e){
        //call some other methods
});

Similar Messages

  • Swing action events....a moment of doubt.

    Here I am, merrily hammering away on my first Swing application, listening to Pink Floyd "Shine On You Crazy Diamond" on my MP3 player, Diet Coke on hand, when my typing pauses and a fearful dread overtakes me.....
    I'm implementing the AbstractAction interface in one of my classes ("MainAction") because I want to share these events with a toolbar and some menu items. All well and good. However, how do you usually distinquish between different components when entering the actionPerformed method? I'll admit I know very little about the ActionEvent object, so if you want me to RTFM I won't hate you. :)
    At the moment I'm using the setActionCommand() to give the component its unique identity and then checking for this using: -
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("SOME_UNIQUE_STRING")) {
            // Do something here.
    }Its just that I've got a horrible idea that this is a really bad way to do it (based on no evidence at all, BTW). All the documentation I've read only deals with events for one button or something, while I'd like a way to distinquish between, say, two buttons.
    Don't get me wrong, the way I've done it works fine.....so I've no real problem. But if I'm doing things badly, I'd like to know now before I get too far down the development road with this.
    Thanks for any insights. :) Sorry if this is confusing between Actions and ActionListeners........I've only really used Actions at the moment and am not really at the stage where I have to use ActionListeners or anything like that just yet (Although I probably will get to that tomorrow).

    OR have a different Listener for each event source instead of just making the Panel implement ActionListener.
    That feels more object-oriented to me. "if/then/else" is usually a sign that you could rework the design to take better advantage of objects.
    The downside is that you have to write more objects. Clients of your code will have to look in more places to understand what you're doing.
    I like this approach because it decouples the GUI from what's done. If you give your UI class a constructor that takes the appropriate Listeners as arguments you can completely decouple the View from the Controller. I like that, too. Now you can keep the same UI and change what's done simply by passing in different Listeners.
    Just thought I'd offer this as another idea. It's not commonly presented in books.
    MOD

  • 1.4.2 Java Swing problems

    I have a swing application with 2 JComboBox 's, 1 JPanel (for pictures), 1 JButton and a scroll pane. Basicall the JComboBoxes have an action listener that changes the pictures when I cahnge the names. However, I would like the Jbutton when pressed to display the name chosen (from the JComboBox) and display it in the textArea. See code below.
    import javax.swing.*;
    import javax.swing.Action;
    import java.awt.event.ActionEvent;
    import  java.awt.event.ItemListener;
    import java.awt.*;
    import java.awt.event.*;
    * @author Administrator
    * TODO To change the template for this generated type comment go to
    * Window - Preferences - Java - Code Style - Code Templates
    public class choice_in2 extends JPanel implements ActionListener{
         private JLabel contender1FieldLabel;
         private JLabel contender2FieldLabel;
         private JButton runButton;
         JLabel picture1;
         JLabel picture2;
         //Text area which shows the result
         private JTextArea textArea;
         private JLabel textAreaLabel;
         public choice_in2(){
              //          Create a ChoiceField for the input of first contender
              contender1FieldLabel = new JLabel("Contender1 ",4);
              String[] contender1Strings = { "Bill", "Bob", "Don", "Michael", "John" };
              JComboBox contender1List = new JComboBox(contender1Strings);
              contender1List.setSelectedIndex(1);
              contender1List.addActionListener(new Eavesdropper1(picture1));
              //          Create a ChoiceField for the input of second contender
              contender2FieldLabel = new JLabel("Contender2 ",4);
              String[] contender2Strings = { "Philip", "Timothy", "Tom", "Kenneth", "Stone" };
              JComboBox contender2List = new JComboBox(contender2Strings);
              contender2List.setSelectedIndex(2);
              contender2List.addActionListener(new Eavesdropper2(picture2));
            //Set up the first picture.
            picture1 = new JLabel();
            picture1.setFont(picture1.getFont().deriveFont(Font.ITALIC));
            picture1.setHorizontalAlignment(JLabel.CENTER);
            updateLabel1(contender1Strings[contender1List.getSelectedIndex()]);
            picture1.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));
            //Set up the second picture.
            picture2 = new JLabel();
            picture2.setFont(picture1.getFont().deriveFont(Font.ITALIC));
            picture2.setHorizontalAlignment(JLabel.CENTER);
            updateLabel2(contender2Strings[contender2List.getSelectedIndex()]);
            picture2.setBorder(BorderFactory.createEmptyBorder(10,0,0,0));
            //The preferred size is hard-coded to be the width of the
            //widest image and the height of the tallest image + the border.
            //A real program would compute this.
            picture1.setPreferredSize(new Dimension(200, 220+10));
            picture2.setPreferredSize(new Dimension(200, 220+10));
              // Create a JButton that will compute
              runButton = new JButton("Compute");
              runButton.addActionListener(new Eavesdropper3(textArea));
              // Create a JTextArea that will display the results
              textAreaLabel = new JLabel("Results");       
              textArea = new JTextArea(10,70);
              textArea.setFont(new Font("Courier",Font.PLAIN,12));
              JScrollPane scrollPane =  new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
              textArea.setEditable(false);
            //Lay out the demo.
            add(contender1List, BorderLayout.WEST);
            add(picture1, BorderLayout.WEST);
            add(contender2List, BorderLayout.EAST);       
            add(picture2, BorderLayout.EAST);
            add(runButton, BorderLayout.EAST);
            add(textAreaLabel, BorderLayout.SOUTH);
            add(scrollPane, BorderLayout.SOUTH);
            setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
        /** Listens to the combo box. */
        public void actionPerformed(ActionEvent e) {
        public void updateLabel1(String name1) {
            ImageIcon icon1 = createImageIcon( name1 + ".jpg");
            picture1.setIcon(icon1);
            picture1.setToolTipText("A drawing of a " + name1.toLowerCase());
            if (icon1 != null) {
                picture1.setText(null);
            } else {
                picture1.setText("Image not found");
        public void updateLabel2(String name2) {
             ImageIcon icon2 = createImageIcon( name2 + ".jpg");
            picture2.setIcon(icon2);
            picture2.setToolTipText("A drawing of a " + name2.toLowerCase());
            if (icon2 != null) {
               picture2.setText(null);
            } else {
                picture2.setText("Image not found");
        /** Returns an ImageIcon, or null if the path was invalid. */
        public ImageIcon createImageIcon(String path) {
            java.net.URL imgURL = choice_in2.class.getResource(path);
            if (imgURL != null) {
                return new ImageIcon(imgURL);
            } else {
                System.err.println("Couldn't find file: " + path);
                return null;
        class Eavesdropper2 implements ActionListener {
            JLabel myTextArea;
            public Eavesdropper2(JLabel ta) {
                 myTextArea = ta;
            public void actionPerformed(ActionEvent e) {
                JComboBox contender2List = (JComboBox)e.getSource();
                String contender2ListName = (String)contender2List.getSelectedItem();
                updateLabel2(contender2ListName);
                Eavesdropper3 code;
                code = new Eavesdropper3(contender2ListName);
        class Eavesdropper1 implements ActionListener {
            JLabel myTextArea;
            public Eavesdropper1(JLabel tt) {
                 myTextArea = tt;
            public void actionPerformed(ActionEvent e) {
                JComboBox contender1List = (JComboBox)e.getSource();
                String contender1ListName = (String)contender1List.getSelectedItem();
                updateLabel1(contender1ListName);
        class Eavesdropper3  implements ActionListener  {
             String contender22;
            JTextArea myTextArea;
            public Eavesdropper3(JTextArea bb) {
                 myTextArea = bb;
            public Eavesdropper3(String contender2ListName){
                 contender22 = contender2ListName;
               * @return Returns the contender22.
              public String getContender22() {
                   return contender22;
            public void actionPerformed(ActionEvent e) {
                 textArea.setText("Wild Test");
                 textArea.append("\n      OUTCOME    \n\n " +getContender22());
    }

    weebib
    We are using Windows XP , Nvidia graphics card, with Multiview. I hope the problem is not specific to the platform.
    It is reproducible with 1.4.2 and absent in 1.4.1
    camickr
    I am new to this forum. didn't know about code blocks.

  • Swing jdk1.4 is a buggy release !!!

    Hi Gurus !!!
    I'm wondering if anyone in the forums could solve this problem:
    I have a JDialog class with a swing textfield added with an ActionListener (JDK_1.4.2_04). When I press down the Enter Key, actionEvent is continuously being fired while the ENTER key is down !!!!. this BAD behaviour occurs also when the user clicks on a button repeadetely !!! . I've been working for 2 days trying to solve it with no luck. In jdk1.3.1 release the behaviour is what I expected but I connot switch back to solve it.
    Has anybody in the forums solved this ?????????????
    I noticed that if I register an action with keystroke KeyStroke.getKeyStroke(KeyEvent.VK_F1,0,true); released the behaviour is correct, But how can I replace the default swing actions ?
    Here's the code to test: (I found it in another post in the forum but the solution did'nt appeared )
    public class SimpleDialog extends JDialog implements java.awt.event.ActionListener
    class MyAction extends AbstractAction {
    public void actionPerformed(ActionEvent e) {
    System.out.println("TECLA PRESSEED----");
    //private JButton jButton1 = new JButton("button");
    private JTextField jButton1 = new JTextField("prova") {
    protected boolean processKeyBinding(KeyStroke ks,KeyEvent e,int condition,boolean pressed) {
    InputMap map = getInputMap(condition);
    ActionMap am = getActionMap();
    if(map != null && am != null && isEnabled()) {
    System.out.println(pressed);
    Object binding = map.get(ks);
    Action action = (binding == null) ? null : am.get(binding);
    if (action != null) {
    return SwingUtilities.notifyAction(action, ks, e, this,
    e.getModifiers());
    return false;
    public SimpleDialog()
    MyAction action = new MyAction();
    KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_F1,0,true);
    jButton1.getInputMap().put(ks, "ajuda");
    jButton1.getActionMap().put("ajuda", action);
    UIManager.getDefaults().put("Text.focusInputMap", new
    UIDefaults.LazyInputMap(new Object[] {
    "released HOME", JTextField.notifyAction
    this.getContentPane().add(jButton1);
    //this.getRootPane().setDefaultButton(jButton1);
    jButton1.addActionListener(this);
    this.pack();
    public void actionPerformed(ActionEvent e)
    if (e.getSource() == jButton1)
    System.out.println("button pressed");
    public static void main(String[] args)
    new SimpleDialog().show();

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class DialogTest extends JDialog implements ActionListener
        private JTextField tf;
        boolean okayToProcess;
        public DialogTest()
            super(new JFrame(), "tab and press enter");
            tf = new JTextField("prova", 16);
            okayToProcess = true;
            tf.addActionListener(this);
            tf.addFocusListener(new FieldListener());
            JPanel p = new JPanel();
            p.add(tf);
            getContentPane().add(p, "North");
            getContentPane().add(new JTextField(16), "South");
            setSize(200,125);
            setLocation(400,400);
        public void actionPerformed(ActionEvent e)
            if (e.getSource() == tf && okayToProcess)
                System.out.println("text field action event");
                okayToProcess = false;
        private class FieldListener extends FocusAdapter
            public void focusLost(FocusEvent e)
                okayToProcess = true;
        public static void main(String[] args)
            new DialogTest().show();
    }

  • Plz help me in creating swing interface

    Hi,
    Iam new to swing.I have one Interface on swing.Now I want to add Jfilechooser object in my interface for selecting file from hard drive.So that I can upload this file through my servlet uploading programme.I want to set remote url also for saving the file.But I confused how I can do that.Plz guide me.
    I try to create one interface but iam sure it is not the correct way.Can u plz try with my codes. Below r my codes:
    import javax.swing.AbstractAction;
    import javax.swing.Action;
    import javax.swing.JToolBar;
    import javax.swing.JButton;
    import javax.swing.ImageIcon;
    import javax.swing.JMenuItem;
    import javax.swing.JCheckBoxMenuItem;
    import javax.swing.JMenu;
    import javax.swing.JFrame;
    import javax.swing.JMenuBar;
    import javax.swing.JTextArea;
    import javax.swing.JPanel;
    import javax.swing.JLabel;
    import javax.swing.JScrollPane;
    import javax.swing.JProgressBar;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;
    import java.util.*;
    import javax.swing.*;
    import java.util.*;
    import java.io.*;
    import java.net.*;
    import javax.swing.accessibility;
    public class ActionDemo1 extends JFrame implements ActionListener
         JTextArea textArea,textArea1,textArea2,textArea3,textArea4,textArea5,textArea6,textArea7,
         textArea8,textArea9,textArea10,textArea11,textArea12,textArea13,textArea14,textArea15;
         private JProgressBar progressBar;          
         private JButton Button,Button1,Button2;     
         URL url;
         BufferedReader in;
         String str;
    public ActionDemo1()
                        setTitle("Upload Interface");                               
                        addWindowListener(new WindowAdapter()
                             public void windowClosing(WindowEvent e)
                                  System.exit(0);
         Container contentPane = getContentPane();          
         JMenuItem menuItem = null;
    JToolBar toolBar = new JToolBar();
         JToolBar toolBar1 = new JToolBar();     
         JToolBar toolBar2 = new JToolBar();
         JToolBar toolBar3 = new JToolBar();
         JToolBar toolBar4 = new JToolBar();
         JToolBar toolBar5 = new JToolBar();
         JToolBar toolBar6 = new JToolBar();
         JToolBar toolBar7 = new JToolBar();
         JToolBar toolBar8 = new JToolBar();
         JToolBar toolBar9 = new JToolBar();
         JToolBar toolBar10 = new JToolBar();
         JMenu FirstMenu = new JMenu("File");
    FirstMenu.setMnemonic(KeyEvent.VK_F);     
    textArea = new JTextArea(5, 20);
         textArea1 = new JTextArea(2, 15);     
         textArea2 = new JTextArea(2, 15);
         textArea3 = new JTextArea(2, 15);     
         textArea4 = new JTextArea(7, 15);
         textArea5 = new JTextArea(7, 15);     
         textArea6 = new JTextArea(7, 15);
         textArea7 = new JTextArea(7, 15);
         textArea8 = new JTextArea(2, 15);
         textArea9 = new JTextArea(7, 15);
         textArea10 = new JTextArea(2, 15);
         textArea11 = new JTextArea(7, 15);
         textArea12 = new JTextArea(2, 15);
         textArea13 = new JTextArea(7, 15);
         textArea14 = new JTextArea(2, 15);
         textArea15 = new JTextArea(7, 15);
         JScrollPane scrollPane = new JScrollPane(textArea);
         progressBar=new JProgressBar();
         progressBar.setStringPainted(true);     
    contentPane.setLayout(new GridLayout(2,3));
         JPanel panel1 = new JPanel();
         panel1.setLayout(new BorderLayout());
         panel1.setBackground(Color.blue);
         contentPane.add(panel1);
    panel1.add(BorderLayout.NORTH, toolBar);
         panel1.add(scrollPane, BorderLayout.CENTER);
         panel1.add(progressBar,BorderLayout.SOUTH);     
         JPanel panel2 = new JPanel();     
         JLabel statusBar= new JLabel();
         panel2.setLayout(new GridLayout(1,1));     
         panel2.setBackground(Color.gray);     
         contentPane.add(panel2);
         JPanel panel3 = new JPanel();
         panel3.setLayout(new GridLayout(1,1));     
         panel3.setBackground(Color.blue);
         panel2.add(panel3);
         JPanel panel7 = new JPanel();
         panel7.setLayout(new BorderLayout());     
         panel7.setBackground(Color.blue);
         panel7.add(textArea2, BorderLayout.NORTH);     
         panel7.add(BorderLayout.CENTER, toolBar2);
         panel7.add(BorderLayout.SOUTH, textArea4);
         panel3.add(panel7);
         JPanel panel8 = new JPanel();
         panel8.setLayout(new BorderLayout());     
         panel8.setBackground(Color.blue);
         panel8.add(textArea3, BorderLayout.NORTH);     
         panel8.add(BorderLayout.CENTER, toolBar3);
         panel8.add(BorderLayout.SOUTH, textArea5);
         panel3.add(panel8);
         JPanel panel5 = new JPanel();
         panel5.setLayout(new BorderLayout());
         panel5.add(textArea1, BorderLayout.NORTH);
         panel5.add(BorderLayout.CENTER, toolBar5);
         panel5.add(BorderLayout.SOUTH, textArea7);          
         panel5.setBackground(Color.blue);
         panel3.add(panel5);
         JPanel panel6 = new JPanel();
         panel6.setLayout(new BorderLayout());
         panel6.add(toolBar1, BorderLayout.NORTH);          
         panel6.setBackground(Color.blue);
         panel6.setSize(new Dimension(5,5));
         panel6.add(BorderLayout.CENTER, toolBar4);
         panel6.add(BorderLayout.SOUTH, textArea6);
         panel3.add(panel6);
         JPanel panel4 = new JPanel();
         panel4.setLayout(new GridLayout(1,1));
         panel4.setBackground(Color.blue);     
         panel2.add(panel4);
         JPanel panel9 = new JPanel();
         panel9.setLayout(new BorderLayout());     
         panel9.setBackground(Color.blue);
         panel9.add(textArea8, BorderLayout.NORTH);     
         panel9.add(BorderLayout.CENTER, toolBar6);
         panel9.add(BorderLayout.SOUTH, textArea9);
         panel4.add(panel9);
         JPanel panel10 = new JPanel();
         panel10.setLayout(new BorderLayout());     
         panel10.setBackground(Color.blue);
         panel10.add(textArea10, BorderLayout.NORTH);     
         panel10.add(BorderLayout.CENTER, toolBar7);
         panel10.add(BorderLayout.SOUTH, textArea11);
         panel4.add(panel10);
         JPanel panel11 = new JPanel();
         panel11.setLayout(new BorderLayout());
         panel11.add(textArea12, BorderLayout.NORTH);
         panel11.add(BorderLayout.CENTER, toolBar8);
         panel11.add(BorderLayout.SOUTH, textArea13);          
         panel11.setBackground(Color.blue);
         panel4.add(panel11);
         JPanel panel12 = new JPanel();
         panel12.setLayout(new BorderLayout());
         panel12.add(toolBar9, BorderLayout.NORTH);          
         panel12.setBackground(Color.blue);
         panel12.setSize(new Dimension(5,5));
         panel12.add(BorderLayout.CENTER, toolBar10);
         panel12.add(BorderLayout.SOUTH, textArea15);
         panel4.add(panel12);
         //contentPane.setMaximumSize(new Dimension(600, 400));
         /*contentPane.setLayout(new BorderLayout());
         contentPane.setPreferredSize(new Dimension(400, 150));
         contentPane.add(toolBar, BorderLayout.NORTH);     
    statusBar = new JLabel(" ");     
         contentPane.add(scrollPane, BorderLayout.CENTER);
         setContentPane(contentPane);*/     
         JMenuBar mb = new JMenuBar();
         setJMenuBar(mb);
    mb.add(FirstMenu);     
    menuItem = new JMenuItem("Quick connect", KeyEvent.VK_Q);
    FirstMenu.add(menuItem);
         JMenu SecondMenu = new JMenu("Edit");
         SecondMenu.setMnemonic(KeyEvent.VK_E);     
    menuItem = new JMenuItem("Suspend", KeyEvent.VK_S);
    SecondMenu.add(menuItem);
    mb.add(SecondMenu);
    JMenu ThirdMenu = new JMenu("Compress");
         ThirdMenu.setMnemonic(KeyEvent.VK_C);     
    menuItem = new JMenuItem("By Percentage", KeyEvent.VK_B);
    ThirdMenu.add(menuItem);
    mb.add(ThirdMenu);
    JMenu FourthMenu = new JMenu("Help");
         FourthMenu.setMnemonic(KeyEvent.VK_H);     
    menuItem = new JMenuItem("Help", KeyEvent.VK_B);
    FourthMenu.add(menuItem);
    mb.add(FourthMenu);
    ImageIcon QuickConnect=new ImageIcon("images/Q_connect.gif");
    JButton button=new JButton(QuickConnect);
    button.setActionCommand("QuickConnect");
    button.setToolTipText("Quick Connect");
    button.addActionListener(this);
    toolBar.add(button);
    ImageIcon Reconnect=new ImageIcon("images/Reconnect.gif");
    button=new JButton(Reconnect);
    button.setActionCommand("Reconnect");
    button.setToolTipText("Reconnect");
    button.addActionListener(this);
    toolBar.add(button);
    ImageIcon Disconnect=new ImageIcon("images/Disconnect.gif");
    button=new JButton(Disconnect);
    button.setActionCommand("Disconnect");
    button.setToolTipText("Disconnect");
    button.addActionListener(this);
    toolBar.add(button);
    ImageIcon Upload=new ImageIcon("images/Upload.gif");
    Button=new JButton(Upload);
    Button.addActionListener(new ActionListener()
    public void actionPerformed(ActionEvent ae)
    String strCommand=ae.getActionCommand();
    if(str.equals("Upload"))
    /* this is where you write the code to call that servlet.
    control reaches this point when the button is pressed */
    try{
    // you communicate with the servlet here
    url = new URL("http://127.0.0.1:7001/servletUpload");
    in = new BufferedReader(new InputStreamReader(url.openStream()));
    str = in.readLine();
    in.close();
    }//end try
    catch (Exception e1){}
    toolBar.add(Button);
    ImageIcon Suspend=new ImageIcon("images/Suspend.gif");
    Button1=new JButton(Suspend);
    //Button1.setActionCommand("Suspend");
    Button1.setToolTipText("Suspend");
    Button1.addActionListener(this);
    toolBar.add(Button1);
    ImageIcon Refresh=new ImageIcon("images/Refresh.gif");
    button=new JButton(Refresh);
    button.setActionCommand("Refresh");
    button.setToolTipText("Refresh");
    button.addActionListener(this);
    toolBar.add(button);
    ImageIcon DeleteItem=new ImageIcon("images/DeleteItem.gif");
    button=new JButton(DeleteItem);
    button.setActionCommand("DeleteItem");
    button.setToolTipText("DeleteItem");
    button.addActionListener(this);
    toolBar.add(button);
    ImageIcon Resume=new ImageIcon("images/Resume.gif");
    Button2=new JButton(Resume);
    //button.setActionCommand("Resume");
    Button2.setToolTipText("Resume");
    Button2.addActionListener(this);
    toolBar.add(Button2);
    ImageIcon FilePriority=new ImageIcon("images/FilePriority.gif");
    button=new JButton(FilePriority);
    button.setActionCommand("FilePriority");
    button.setToolTipText("FilePriority");
    button.addActionListener(this);
    toolBar.add(button);
    ImageIcon View=new ImageIcon("images/View.gif");
    button=new JButton(View);
    button.setActionCommand("View");
    button.setToolTipText("View");
    button.addActionListener(this);
    toolBar.add(button);
    ImageIcon Rename=new ImageIcon("images/Rename.gif");
    button=new JButton(Rename);
    button.setActionCommand("Rename");
    button.setToolTipText("Rename");
    button.addActionListener(this);
    toolBar.add(button);
    ImageIcon Scrolling=new ImageIcon("images/left.gif");
    button=new JButton(Scrolling);
    button.setActionCommand("Scrolling");
    button.setToolTipText("Scrolling");
    button.addActionListener(this);
    toolBar1.add(button);
    ImageIcon UScrolling=new ImageIcon("images/right.gif");
    button=new JButton( UScrolling);
    button.setActionCommand(" UScrolling");
    button.setToolTipText("UScrolling");
    button.addActionListener(this);
    toolBar1.add(button);
    ImageIcon Name=new ImageIcon("images/Name.gif");
    button=new JButton( Name);
    button.setActionCommand("Name");
    button.setToolTipText("Name");
    button.addActionListener(this);
    toolBar2.add(button);
    ImageIcon Date=new ImageIcon("images/Date.gif");
    button=new JButton( Date);
    button.setActionCommand("Date");
    button.setToolTipText("Date");
    button.addActionListener(this);
    toolBar3.add(button);
    ImageIcon Time=new ImageIcon("images/Time.gif");
    button=new JButton( Time);
    button.setActionCommand("Time");
    button.setToolTipText("Time");
    button.addActionListener(this);
    toolBar4.add(button);
    ImageIcon Size=new ImageIcon("images/Size.gif");
    button=new JButton(Size);
    button.setActionCommand("Size");
    button.setToolTipText("Size");
    button.addActionListener(this);
    toolBar5.add(button);
    ImageIcon TScrolling=new ImageIcon("images/left.gif");
    button=new JButton(TScrolling);
    button.setActionCommand("TScrolling");
    button.setToolTipText("TScrolling");
    button.addActionListener(this);
    toolBar9.add(button);
    ImageIcon DScrolling=new ImageIcon("images/right.gif");
    button=new JButton( DScrolling);
    button.setActionCommand(" DScrolling");
    button.setToolTipText("DScrolling");
    button.addActionListener(this);
    toolBar9.add(button);
    ImageIcon Name1=new ImageIcon("images/Name.gif");
    button=new JButton( Name1);
    button.setActionCommand("Name1");
    button.setToolTipText("Name1");
    button.addActionListener(this);
    toolBar6.add(button);
    ImageIcon Date1=new ImageIcon("images/Date.gif");
    button=new JButton( Date1);
    button.setActionCommand("Date1");
    button.setToolTipText("Date1");
    button.addActionListener(this);
    toolBar7.add(button);
    ImageIcon Time1=new ImageIcon("images/Time.gif");
    button=new JButton( Time1);
    button.setActionCommand("Time1");
    button.setToolTipText("Time1");
    button.addActionListener(this);
    toolBar10.add(button);
    ImageIcon Size1=new ImageIcon("images/Size.gif");
    button=new JButton(Size1);
    button.setActionCommand("Size1");
    button.setToolTipText("Size1");
    button.addActionListener(this);
    toolBar8.add(button);
    public void actionPerformed(ActionEvent e)
    textArea.setText(e.getActionCommand());
    public static void main(String[] args) {
    ActionDemo1 frame = new ActionDemo1();
    frame.pack();
    frame.setSize(new Dimension(650, 400));
    frame.setVisible(true);
    Regards
    Bikash

    You may find this suggestion useless, but I thnk you should seriously consider tossing your IDE in the trash and getting a good text editor and hand coding Swing until you understand how Swing components work.
    Take shortcuts when you understand where they will lead. You will find that hand coding really leads to a deeper understanding of any programming language.
    While you're at it, why don't you consider whether you really need eleven (!) toolbars in your GUI. A GUI generally needs only one toolbar -- save some for later.

  • Swing flat button

    Is there a way to render JButtons in swing as flat buttons? For a JToolbar you can use
    JToolBar toolBar = new JToolBar();
    toolBar.setRollover(true);So there's certainly some code to do this rendering already. But I don't find any such option on a JButton.
    It's not my intention to create my own extension of a JButton to handle this.
    If the toolbar can render buttons like this without changes, it should also be possible to render a plain button exactly the same without changes.
    Thanks in advance

    Fjoerie wrote:
    Is there a way to render JButtons in swing as flat buttons? For a JToolbar you can use
    JToolBar toolBar = new JToolBar();
    toolBar.setRollover(true);So there's certainly some code to do this rendering already. But I don't find any such option on a JButton.
    It's not my intention to create my own extension of a JButton to handle this.
    If the toolbar can render buttons like this without changes, it should also be possible to render a plain button exactly the same without changes.
    Thanks in advanceHi,
    I noticed the same problem. The API doc says:
    "The implementation of a look and feel may choose to ignore this property."
    And I think the Metal Look & Feel does ignore it! :-(
    I've written a controller to support this. Maybe you find it usefull (the library is Open Source):
    [http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/CoolButtonController.html|http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/CoolButtonController.html]
    Or use one of the XAction utility methods:
    [http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/action/XActions.html|http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/action/XActions.html]
    Homepage:
    [http://www.softsmithy.org|http://www.softsmithy.org]
    Download:
    [http://sourceforge.net/project/showfiles.php?group_id=64833|http://sourceforge.net/project/showfiles.php?group_id=64833]
    Source:
    [http://sourceforge.net/svn/?group_id=64833|http://sourceforge.net/svn/?group_id=64833]
    [http://softsmithy.svn.sourceforge.net/viewvc/softsmithy/trunk/lib/src/org/softsmithy/lib/|http://softsmithy.svn.sourceforge.net/viewvc/softsmithy/trunk/lib/src/org/softsmithy/lib/]
    API:
    [http://softsmithy.sourceforge.net/lib/docs/api/index.html|http://softsmithy.sourceforge.net/lib/docs/api/index.html]
    -Puce

  • ACCELERATOR_KEY problem with Actions

    on creation of my app, I set Accelerator_keys for all of my javax.swing.Actions. ex: putValue(ACCELERATOR_KEY, KeyStroke) and it works fine but when my app is running and I try to change an Accelerator on an ACtion or add one to an Action that didn't have one before, I basically do it the same way wiht putValue() and the Action thinks its Accelerator is set but when I actually test the Accelerator it won't recognize it, only the original ones work. are there problems changing them on the fly?
    Thanks
    -noob

    I've writen context-sensitive actions that change their NAME or
    SHORT_DESCRIPTION (tool tip) on the fly, and i've never had to do anything
    special other than revalidate/repaint. But i've not tried to change the accelerator.Taking a look at the source code for AbstractButton I found this code in a PropertyChangeListener:
    if (e.getPropertyName().equals(Action.NAME)) {
    } else if (e.getPropertyName().equals(Action.SHORT_DESCRIPTION)) {
    } else if (propertyName.equals("enabled")) {
    } else if (e.getPropertyName().equals(Action.SMALL_ICON)) {
    } else if (e.getPropertyName().equals(Action.MNEMONIC_KEY)) {
    } else if (e.getPropertyName().equals(Action.ACTION_COMMAND_KEY)) {
    So it looks like accelerators are not automatically updated but the other properties are.
    other than revalidate/repaint. By the way the code in the PropertyChangeListener does invalidate / repaint.

  • SwingWorker and Action - not playing well together

    I have a long running task. I also like using AbstractAction. But since these are both classes, and Java won't let you extend more than a single class, I figured I'd build a new abstract "SwingAction" class. This extends SwingWorker and implements Action. I leave the SwingWorker classes out and leave the actionPerformed method from Action out. Here's what I'm left with:
    import java.beans.PropertyChangeListener;
    import java.util.HashMap;
    import javax.swing.Action;
    import javax.swing.event.SwingPropertyChangeSupport;
    import org.geotools.gui.swing.worker.SwingWorker;
    public abstract class SwingAction extends SwingWorker implements Action {
         private HashMap map = new HashMap();
         private boolean enabled = true;
         private SwingPropertyChangeSupport changer = new SwingPropertyChangeSupport(this);
         public Object getValue(String key) {
              return map.get(key);
         public void putValue(String key, Object value) {
              if (value!=null){
                   Object o = map.get(key);
                   if (o==null || !o.equals(value)){
                        map.put(key, value);
                        changer.firePropertyChange(key, o, value);
         public void setEnabled(boolean enabled) {
              if (enabled!=this.enabled){
                   this.enabled=enabled;
                   changer.firePropertyChange("enabled", new Boolean(!enabled), new Boolean(enabled));
         public boolean isEnabled() {
              return enabled;
         public void addPropertyChangeListener(PropertyChangeListener listener) {
              changer.addPropertyChangeListener(listener);
         public void removePropertyChangeListener(PropertyChangeListener listener) {
              changer.removePropertyChangeListener(listener);
    }I've implemented this in a class and it works great - the first time! It seems like once I hit "start", I'm not able to call it again. I've tried calling interrupt in the finished method, but that has no affect.
    I'm including the class that implements SwingAction - you'll need to change it to do something else and hook it up to a button to try it out, but if you have any idea why it's failing to run a second time, I'd love to hear it.
    Thanks!
    P.S. Here's the class that implements SwingAction:
    import java.awt.Cursor;
    import java.awt.event.ActionEvent;
    import javax.swing.ImageIcon;
    import javax.swing.JLabel;
    public class EnlargeImageAction extends SwingAction {
         private WMSViewer wmsViewer;
         private JLabel mapImage;
         private Cursor cursor;
         public EnlargeImageAction(WMSViewer wmsViewer, JLabel mapImage){
              this.wmsViewer=wmsViewer;
              this.mapImage = mapImage;
         public Object construct() {
              System.out.println("Calling action");
              return wmsViewer.getEnlargedImage();
         public void finished() {
              mapImage.setIcon((ImageIcon)get());
              mapImage.setEnabled(true);
              wmsViewer.setCursor(cursor);
              this.setEnabled(true);
         public void actionPerformed(ActionEvent e) {
              mapImage.setEnabled(false);
              cursor = wmsViewer.getCursor();
              wmsViewer.setCursor(new Cursor(Cursor.WAIT_CURSOR));
              this.setEnabled(false);
              start();
    }

    Thread can't be reused.
    If you want to reuse it after its run() method returned, you should re-instantiate it.

  • Is there any way to know how much time swing client is on open state?

    Is there any way to know how much time swing client is on open state? My requirement is to show a message some time after the swing client open i.e., 4-5 hours.

    You could also consider using javax.swing.Timer and java.awt.event.ActionListener (or javax.swing.Action) which takes care of running the actionPerformed code on the EDT.
    db

  • Moving a TextField in Swing.Possible?please help

    Hi all,
    I'm working on this application to create textfields in a page and resize and reposition them as necessary using the mouse(Just like dragging and dropping components in Visual Basic). Is it possible to provide such a functionality for a Textfield in java? If so how? If you do have some reference sites, please let me know. Any help will be appreciated. Thanks.

    Hi,
    if you just need a simple framework:
    I've created a customizer framework for such tasks: Move and resize components with the mouse and allow further customizations. "Snap-to-grid"-feature included! Maybe you find it useful as a base. (It's open source!)
    I started to write a tutorial (still under construction!):
    http://softsmithy.sourceforge.net/lib/docs/tutorial/swing/customizer/index.html
    For adding components see:
    http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/CustomizerBar.html
    To customize properties use:
    http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/JCustomizerPropertyTable.html
    Register it to the SelectionManager of the JCustomizerPane and set the CustomizableProperties-property of the JCustomizer objects.
    Also have a look at the subclasses of JCustomizer.
    E.g. there are
    customizers for images & shapes:
    http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/JXIconCustomizer.html
    a label customizer with inline editing:
    http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/JLabelCustomizer.html
    a line customizer:
    http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/JLine2DCustomizer.html
    And there are many classes providing support for menu- and toolbar-actions. (Incuding support for some of the "Java Look and Feel Graphics Repository" actions.)
    Look at the *.swing and the *.swing.action packages.
    Just ask me if you don't find them.
    Homepage:
    http://www.softsmithy.org
    Download:
    http://sourceforge.net/project/showfiles.php?group_id=64833
    Source:
    http://sourceforge.net/svn/?group_id=64833
    http://softsmithy.svn.sourceforge.net/viewvc/softsmithy/trunk/lib/src/org/softsmithy/lib/
    API:
    http://softsmithy.sourceforge.net/lib/docs/api/index.html
    If you have questions just ask me!
    -Puce

  • Adding an Icon to a JButton Component - Not working

    Hi all,
    Please help me by saying, why the below gevon SSCE doesnt work.
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import javax.swing.AbstractAction;
    import javax.swing.AbstractButton;
    import javax.swing.Action;
    import javax.swing.BorderFactory;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.UIManager;
    public class CreateWindow {
        public CreateWindow(String module, String id){
             if(module.equals("mail")){
                  JPanel mail = new JPanel(null);
                  mail.setPreferredSize(new Dimension(500, 350));
                  //Color colr = new Color(222, 236, 255);
                  mail.setBackground(Color.WHITE);
                  JLabel file = new JLabel("File Name:");
                  file.setBounds(18,25,75,50);
                  // Retrieve the icon
                 Icon icon = new ImageIcon("ei0021-48.gif");
                 // Create an action with an icon
                 Action action = new AbstractAction("Button Label", icon) {
                     // This method is called when the button is pressed
                     public void actionPerformed(ActionEvent evt) {
                         // Perform action
                 // Create the button; the icon will appear to the left of the label
                 JButton button = new JButton(action);
                  mail.add(button);
                  buildGUI(mail,500, 350);
        public void buildGUI(JPanel panel, int width, int height)
            JFrame.setDefaultLookAndFeelDecorated(true);
            UIManager.put("activeCaption", new javax.swing.plaf.ColorUIResource(Color.LIGHT_GRAY));
            JFrame f = new JFrame("Propri�t�s:");
            f.setIconImage(new ImageIcon("save.gif").getImage());//need an image file with black background
            changeButtonColor(f.getComponents());
            f.getContentPane().setBackground(Color.WHITE);
            f.getContentPane().add(panel);
            f.getRootPane().setBorder(BorderFactory.createLineBorder(Color.PINK,2));
            f.setSize(width,height);
            f.setLocationRelativeTo(null);
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.setVisible(true);
          public void changeButtonColor(Component[] comps)
            for(int x = 0, y = comps.length; x < y; x++)
              if(comps[x] instanceof AbstractButton)
                ((AbstractButton)comps[x]).setBackground(Color.LIGHT_GRAY);
                ((AbstractButton)comps[x]).setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
              else if (comps[x] instanceof Container)
                changeButtonColor(((Container)comps[x]).getComponents());
    }I call the above given class constructor as given
    public class Test {
         public static void main(String args[]){
              CreateWindow cw = new CreateWindow("mail","Test.doc");
    }Rony

    RonyFederer wrote:
    I have the images and class files inside
    F:\Testing3\Application\src\booodrive
    Do you have the class files or java files here?
    You should put the gif where the .class files are located, and use getResource as Encephalopathic wrote, or:
    Icon icon = new ImageIcon(ClassLoader.getSystemResource("ei0021-48.gif"));
    When I did as you said using System.out.println(new File("ei0021-48.gif").getAbsolutePath());, I got the following output.
    F:\Testing3\Application\ei0021-48.gif
    That's the current running directory.

  • What's wrong with my component?

    i make a new component which is a dragable icon here is my piece of code
    //class: DragAbleComponent.the father of my component
    import java.awt.Graphics;
    import java.awt.event.FocusEvent;
    import java.awt.event.FocusListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import javax.accessibility.Accessible;
    import javax.swing.JComponent;
    public abstract class DragAbleComponent extends JComponent implements MouseListener,
              FocusListener, Accessible ,MouseMotionListener{
         private int X;
         private int Y;
         private static final long serialVersionUID = 1L;
         public void mouseClicked(MouseEvent e) {
              this.requestFocusInWindow();
         public void mouseEntered(MouseEvent e) {}
         public void mouseExited(MouseEvent e) {}
         public void mousePressed(MouseEvent e) {}
         public void mouseReleased(MouseEvent e) {}
         public void focusGained(FocusEvent e) {
              this.repaint();}
         public void focusLost(FocusEvent e) {
         this.repaint();}
         protected abstract void paintComponent(Graphics graphics);
         public int getX() {
              return X;
         public void setX(int x) {
              X = x;
         public int getY() {
              return Y;
         public void setY(int y) {
              Y = y;
    //class:DragableIcon the component
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.event.InputEvent;
    import java.awt.event.MouseEvent;
    import javax.swing.Action;
    import javax.swing.ActionMap;
    import javax.swing.InputMap;
    import javax.swing.JComponent;
    import javax.swing.KeyStroke;
    import javax.swing.TransferHandler;
    public class DragableIcon extends DragAbleComponent {
         private Image image;
         private MouseEvent firstMouseEvent = null;
         private static boolean installKeyBordMapings = true;
         private static final long serialVersionUID = 1L;
         public DragableIcon(Image image) {
              super();
              this.image = image;
              this.setFocusable(true);
              this.addMouseListener(this);
              this.addFocusListener(this);
              this.addMouseMotionListener(this);
              this.initKeyBordMaping();
         private void initKeyBordMaping(){
              if (installKeyBordMapings) {
         InputMap imap = this.getInputMap();
    //     imap.put(KeyStroke.getKeyStroke("ctrl X"),
    //     TransferHandler.getCutAction().getValue(Action.NAME));
         imap.put(KeyStroke.getKeyStroke("ctrl C"),
         TransferHandler.getCopyAction().getValue(Action.NAME));
         imap.put(KeyStroke.getKeyStroke("ctrl V"),
         TransferHandler.getPasteAction().getValue(Action.NAME));
              ActionMap map = this.getActionMap();
    //     map.put(TransferHandler.getCutAction().getValue(Action.NAME),
    //     TransferHandler.getCutAction());
         map.put(TransferHandler.getCopyAction().getValue(Action.NAME),
         TransferHandler.getCopyAction());
         map.put(TransferHandler.getPasteAction().getValue(Action.NAME),
         TransferHandler.getPasteAction());
         @Override
         protected void paintComponent(Graphics graphics) {
              Graphics g = graphics.create();
         //Draw in our entire space, even if isOpaque is false.
         g.setColor(Color.WHITE);
         g.fillRect(0, 0, image == null ? 125 : image.getWidth(this),
         image == null ? 125 : image.getHeight(this));
         if (image != null) {
         //Draw image at its natural size of 125x125.
         g.drawImage(image, 0, 0, this);
         //Add a border, red if picture currently has focus
         if (isFocusOwner()) {
         g.setColor(Color.RED);
         } else {
         g.setColor(Color.BLACK);
         g.drawRect(0, 0, image == null ? 125 : image.getWidth(this),
         image == null ? 125 : image.getHeight(this));
         // g.drawImage(image, 0, 0, this);
         g.dispose();
         public void mouseDragged(MouseEvent e) {
    //Don't bother to drag if the component displays no image.
    if (image == null) return;
    if (firstMouseEvent != null) {
    e.consume();
    //If they are holding down the control key, COPY rather than MOVE
    int ctrlMask = InputEvent.CTRL_DOWN_MASK;
    int action = ((e.getModifiersEx() & ctrlMask) == ctrlMask) ?
    TransferHandler.COPY : TransferHandler.MOVE;
    int dx = Math.abs(e.getX() - firstMouseEvent.getX());
    int dy = Math.abs(e.getY() - firstMouseEvent.getY());
    //Arbitrarily define a 5-pixel shift as the
    //official beginning of a drag.
    if (dx > 5 || dy > 5) {
    //This is a drag, not a click.
    JComponent c = (JComponent)e.getSource();
    TransferHandler handler = c.getTransferHandler();
    //Tell the transfer handler to initiate the drag.
    handler.exportAsDrag(c, firstMouseEvent, action);
    firstMouseEvent = null;
         public void mouseMoved(MouseEvent e) {}
         public void mousePressed(MouseEvent e) {
         //Don't bother to drag if there is no image.
         if (image == null) return;
         firstMouseEvent = e;
         e.consume();
         public void mouseReleased(MouseEvent e) {
         firstMouseEvent = null;
         public static boolean isInstallKeyBordMapings() {
              return installKeyBordMapings;
         public static void setInstallKeyBordMapings(boolean installKeyBordMapings) {
              DragableIcon.installKeyBordMapings = installKeyBordMapings;
         public Image getImage() {
              return image;
         public void setImage(Image image) {
              this.image = image;
    //and here is my pane
    import java.awt.BorderLayout;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import javax.swing.ImageIcon;
    import javax.swing.JPanel;
    import javax.swing.JToolBar;
    import cn.com.ynld.bms.applet.gui.handler.IconTransferHandler;
    import cn.com.ynld.bms.applet.service.TransfAble;
    import cn.com.ynld.bms.applet.service.UpdateAble;
    public class ElectronicPane extends JPanel
                                                                                    implements ItemListener,UpdateAble{
    private UpdateAble updateAble = null;
    private ScrollAbleImage image;
    private JToolBar toolBar;
    private IconTransferHandler handler;
         private static final long serialVersionUID = 1L;
         public ElectronicPane(){
              super(new BorderLayout());
              handler = new IconTransferHandler();
         this.creatToolBar();
         this.add(this.toolBar);
         this.setTransferHandler(handler);
         public void itemStateChanged(ItemEvent e) {}
         public void addTransferAble(String key, TransfAble transferAble) {
              // TODO
         public TransfAble getTransferAble(String key) {
              // TODO
              return null;
         public void removeTransferAble(String key) {
              this.updateAble.removeTransferAble(key);
         public void update(UpdateAble updateAble) {
              this.updateAble = updateAble;
              this.init();
         private void init(){
              this.image = new ScrollAbleImage();
              this.image.update(updateAble);
              this.add(image,BorderLayout.CENTER);
              this.repaint();
              //this.image.repaint();
         private void creatToolBar(){
              this.toolBar = new JToolBar();
              DragableIcon alarm = new DragableIcon(createImageIcon("/root/Desktop/drawing/png-0003.png", "alarm").getImage());
              alarm.setTransferHandler(handler);
              DragableIcon damage = new DragableIcon(createImageIcon("/root/Desktop/drawing/png-0007.png", "device").getImage());
              alarm.setTransferHandler(handler);
              this.toolBar.add(alarm);
              this.toolBar.addSeparator();
              this.toolBar.add(damage);
              this.toolBar.setFloatable(false);
         /** Returns an ImageIcon, or null if the path was invalid. */
    protected static ImageIcon createImageIcon(String path,
    String description) {
    // java.net.URL imageURL = DragPictureDemo.class.getResource(path);
    if (path == null) {
    System.err.println("Resource not found: "
    + path);
    return null;
    } else {
    return new ImageIcon(path, description);
    the problem is i add DragableIcons to my toolbar but only the first icon can be seen!!!!
    what's wrong
    thanks for any help!

    what's wrong
        private void creatToolBar() {
            this.toolBar = new JToolBar();
            ImageIcon alarm = createImageIcon(
                                  "/root/Desktop/drawing/png-0003.png",
                                  "alarm");
    //        alarm.setTransferHandler(handler);
            // register icon with its Action
            alarmAction.putValue(Action.SMALL_ICON, alarm);
            ImageIcon damage = createImageIcon(
                                   "/root/Desktop/drawing/png-0007.png",
                                   "device");
    //        damage.setTransferHandler(handler);
            // set the icon to the Action that will use it
            damageAction.putValue(Action.SMALL_ICON, damage);
            // toolBars are equipped to receive an Action or JComponent
            // they don't know what to do with ImageIcons
            this.toolBar.add(alarmAction);
            this.toolBar.addSeparator();
            this.toolBar.add(damageAction);
            this.toolBar.setFloatable(false);
        /** Returns an ImageIcon, or null if the path was invalid. */
        protected static ImageIcon createImageIcon(String path, String description) {
            // Use the containing class name. This works for static context in
            // which the "this" keyword does not work.
            // Otherwise, you could simply use getResource.
            java.net.URL imageURL = ElectronicPane.class.getResource(path);
            if (path == null) {
                System.err.println("Resource not found: " + path);
                return null;
            } else {
                return new ImageIcon(path, description);
        private Action alarmAction = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                Toolkit.getDefaultToolkit().beep();
        private Action damageAction = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("damage action");
        };

  • How to send a mail by ckicking the button using java

    hi,
    how to send a mail by clicking the button (like payroll silp in that contain one button if we click that it autometically go through the mail as a attachment) pls frd to me my gmail is [email protected]

    Hi,
    It seems we are doing the homework for you; to make you start with something; look at the sample code below and try to understand it first then put the right values
    to send an email with an attachement.
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.util.Date;
    import java.util.Properties;
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Multipart;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import javax.swing.AbstractAction;
    import javax.swing.Action;
    import javax.swing.JButton;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    public class Main {
          * @param args
         public static void main(String[] args) {
              // Create the frame
              String title = "Frame Title";
              JFrame frame = new JFrame(title);
              // Create a component to add to the frame
              JComponent comp = new JTextField();
              Action action = new AbstractAction("Button Label") {
                   // This method is called when the button is pressed
                   public void actionPerformed(ActionEvent evt) {
                        System.out.println("sending email with attachment");
                        sendEmail();
              // Create the button
              JButton button = new JButton(action);
              // Add the component to the frame's content pane;
              // by default, the content pane has a border layout
              frame.getContentPane().add(comp, BorderLayout.SOUTH);
              frame.getContentPane().add(button, BorderLayout.NORTH);
              // Show the frame
              int width = 300;
              int height = 300;
              frame.setSize(width, height);
              frame.setVisible(true);
         protected static void sendEmail() {
              String from = "me@localhost";
              String to = "me@localhost";
              String subject = "Important Message";
              String bodyText = "This is a important message with attachment";
              String filename = "c:\\tmp\\message.pdf";
              Properties properties = new Properties();
              properties.put("mail.stmp.host", "localhost");
              properties.put("mail.smtp.port", "25");
              Session session = Session.getDefaultInstance(properties, null);
              try {
                   MimeMessage message = new MimeMessage(session);
                   message.setFrom(new InternetAddress(from));
                   message.setRecipient(Message.RecipientType.TO, new InternetAddress(
                             to));
                   message.setSubject(subject);
                   message.setSentDate(new Date());
                   // Set the email message text.
                   MimeBodyPart messagePart = new MimeBodyPart();
                   messagePart.setText(bodyText);
                   // Set the email attachment file
                   MimeBodyPart attachmentPart = new MimeBodyPart();
                   FileDataSource fileDataSource = new FileDataSource(filename) {
                        @Override
                        public String getContentType() {
                             return "application/octet-stream";
                   attachmentPart.setDataHandler(new DataHandler(fileDataSource));
                   attachmentPart.setFileName(filename);
                   Multipart multipart = new MimeMultipart();
                   multipart.addBodyPart(messagePart);
                   multipart.addBodyPart(attachmentPart);
                   message.setContent(multipart);
                   Transport.send(message);
              } catch (MessagingException e) {
                   e.printStackTrace();
    }The sample above is not ideal so you need to go through it and start to ask me some questions if you have
    Let me know if you miss something
    Regards,
    Alan Mehio
    London,UK

  • L&F mapping JTable

    The look and feel values chosen for the JTable under windows do not feel right to me (albeit that I cannot find many examples of tables under windows).
    I am trying to provide some workarounds that follow what most people expect to happen but am a little unclear on what should happen on some key presses for the JTable in windows look and feel
    Space handling
    From one of the MS windows books it suggests that the space key is a selection key, thus when you press space a row in a table should be selected (and when you press again it should deselect the row?)
    The JList has functionality for the space key
    q1) JTable should have space bar handling out of the box?
    (space, CTRL+space, shift+space)
    I have not seen this raised as a bug.
    Enter handling
    The enter key press is supposed to activate the default button
    or commit a text field under edit.
    F2 puts a field under edit
    q2) Should the enter key put an editable cell under edit (same mouse action as single or double click to edit)?
    q3) if not should the first enter key stop cell editing and a second press activate the default button, with only a single enter to activate default button if a cell is not under edit
    Escape handling
    The escape key will cancel editing of a cell that is under edit.
    q4) should the event not be passed on when editing has been cancelled so that dialogs with a canel button can be dismissed
    or
    q5) should the first escape cancel editing while the second escape will action the escape action of the window.
    Any links to "highly regarded" useability/look and feel sites would be helpful - sun does not appear to provide much on this subject
    I've read both their l&f and advanced l&f books and they just scratch the surface of look and feel without much realworld appliance to real gui issues.
    Might be useful to others: Some of the code that I was trying to create goes like....
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Component;
    import java.awt.Event;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Window;
    import java.awt.event.ActionEvent;
    import java.awt.event.ComponentAdapter;
    import java.awt.event.ComponentEvent;
    import java.awt.event.KeyEvent;
    import java.math.BigDecimal;
    import javax.swing.AbstractAction;
    import javax.swing.Action;
    import javax.swing.CellEditor;
    import javax.swing.InputMap;
    import javax.swing.JComponent;
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.JViewport;
    import javax.swing.KeyStroke;
    import javax.swing.ListSelectionModel;
    import javax.swing.RootPaneContainer;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.border.Border;
    import javax.swing.border.LineBorder;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableColumnModel;
    import javax.swing.table.TableModel;
    /** Provides utility methods for the JTable and JCSortableTable classes
    * @author  */
    public final class JTableUtil
          * Constructor for JCTableUtil.
         private JTableUtil()
              super();
         /** will resize the last column of a table to fill the gap
          * if the width of the columns is narrower than the width of the
          * table
          * @param table to act upon
         static void resizeLastColumn(final JTable table)
              TableColumn lastColumn = getLastVisibleColumn(table);
              if (lastColumn != null)
                   int gap = getLastColumnGap(table);
                   if (gap > 0)
                        int newLastColumnWidth = gap + lastColumn.getWidth();
                        lastColumn.setWidth(newLastColumnWidth);
                        lastColumn.setPreferredWidth(newLastColumnWidth);
                        redrawTable(table);
          * Determines if there is a gap between the last column in a table
          * and the border of the table.
          * Works if the table is drawn on the page or is in the
          * viewport of a scroll pane.
          * @param table to act upon
          * @return the gap in pixels between last column and table edge.
         static int getLastColumnGap(final JTable table)
              int widthTable = getTableWidth(table);
              int lastVisColIndex = getLastVisibleColumnIndex(table);
              TableColumnModel columnModel = table.getColumnModel();
              int widthColumns = columnModel.getTotalColumnWidth();
              final TableColumn lastColumn = columnModel.getColumn(lastVisColIndex);
              // gap is number of pixels from right hand edge of last column
              // to right hand edge of the table
              int gap = widthTable - widthColumns;
              return gap;
          * Determines the width of a table returning the table width if
          * table is painted onto a panel, but if the table is painted
          * into a scroll pane then it is the scroll pane viewport width that is returned
          * This is to capture that the width of the table may be less than the
          * width of the viewport - ie if there is a gap after the last column in a table.
          * @param table to act upon
          * @return the width of the table in pixels
         static int getTableWidth(final JTable table)
              int widthTable = table.getWidth();
              Object tableParent = table.getParent();
              JViewport tableViewPort = null;
              if (tableParent instanceof JViewport)
                   tableViewPort = (JViewport) tableParent;
                   widthTable = tableViewPort.getWidth();
              return widthTable;
         /** Cause the table to redraw wether table is painted on a panel
          * or in a scroll pane
          * @param table to act upon
         static void redrawTable(final JTable table)
              Component tableRegion = table;
              Component tableParent = table.getParent();
              if (tableParent instanceof JViewport)
                   tableRegion = tableParent;
              tableRegion.invalidate();
              tableRegion.validate();
         /** Determines the last (right most) column in a table with a width
          * greater than 0
          * @param table to act upon
          * @return index (0 based) of the last visible column.
         static int getLastVisibleColumnIndex(JTable table)
              TableColumnModel columnModel = table.getColumnModel();
              boolean found = false;
              int columnIndex = columnModel.getColumnCount();
              while (!found && columnIndex > 0)
                   columnIndex--;
                   if (columnModel.getColumn(columnIndex).getWidth() != 0)
                        found = true;
              return columnIndex;
         /** Determines the last (right most) column in a table with a width
          * greater than 0
          * @param table to act upon
          * @return TableColumn - the last visible column.
         static TableColumn getLastVisibleColumn(JTable table)
              TableColumnModel columnModel = table.getColumnModel();
              return columnModel.getColumn(getLastVisibleColumnIndex(table));
          * Add the currency symbol to a JCTable/JCListTable column header
          * e.g. 'Salary' becomes 'Salary (�)'
         public static void addCurrencySymbol(JTable table, Object columnKey)
              //@todo - update to work with JTable
              TableColumnModel columnModel = table.getTableHeader().getColumnModel();
              int columnIndex = columnModel.getColumnIndex(columnKey);
              TableColumn column = columnModel.getColumn(columnIndex);
              Object object = column.getHeaderValue();
              if (object instanceof JLabel)
                   JLabel columnLabel = (JLabel) object;
                   SlacCurrency.getInstance().addCurrencySymbol(columnLabel);
              else
                   // @todo log here ???
              // is above correct - need to get the JLabel rendered from the table
              // in the scroll pane?          
         /** Provides a sum of a column of BigDecimals
          * @param tableModel model containing column that you wish to sum
          * @param column the column that you wish to be summed, must contain numeric values and not strings
         public static BigDecimal calculateTotalForColumn(final TableModel tableModel, final int column)
              int numRows = tableModel.getRowCount();
              BigDecimal total = new BigDecimal("0");
              for (int row = 0; row < numRows; row++)
                   Object value = tableModel.getValueAt(row, column);
                   if (value instanceof BigDecimal)
                        BigDecimal decimalValue = (BigDecimal) value;
                        total = total.add(decimalValue);
                   else
                        //Logger.logGeneralFailure("", ErrorCodes.GUI_ERROR, this);
              return total;
          * Provides the swing setting JTable.AUTO_RESIZE_OFF.
          * <p>
          * In this situation if the width of the columns is smaller than the width
          * of the table then there will be a gap after the last column.
          * <p>
          * This method will add a ComponentListener to the table and or
          * scroll pane viewport so that there is no gap after the last column.
          * @param table to act upon
         public static void configureAutoResizeOff(final JTable table)
              table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
              Component tableParent = table.getParent();
              JViewport tableViewPort = null;
              ComponentAdapter gapFiller = new ComponentAdapter()
                   public void componentResized(ComponentEvent e)
                        super.componentResized(e);
                        JTableUtil.resizeLastColumn(table);
              table.addComponentListener(gapFiller);
              if (tableParent instanceof JViewport)
                   tableViewPort = (JViewport) tableParent;
                   tableViewPort.addComponentListener(gapFiller);
         /** Method provides fixes to provide standard handling for keyboard and mouse usage
          * <ul>
          *    <li> spacebar - selection handling of rows that have focus emphasis see fixSpacebarHandling()
          *    <li> initial focus handling - table should give visual feedback when gaining focus
          *    <li>
          * </ul>
          * @param table - the table to add standards handling to
         public static void setupKeyboardMouseHandling(JTable table)
              fixTableGainsFocusOnFirstEntry(table);
              fixSpacebarHandling(table);
              fixCtrlSpacebarHandling(table);
              fixShiftSpacebarHandling(table);
              fixCtrlUpDownHandling(table);
              fixFocusHighlight();
              fixEscEnter(table);
         /** Add fixes to the look and feel handling for a JTable
          * Enter on a table will do different things depending on the mode of the table
          * <p>
          * if a cell is being edited then
          * Enter will do what normally happens to a field under edit - ie stop the editing and commit
          * Escape will cancel the editing
          * <p>
          * if a cell is not under edit then
          * Enter will activate the default button
          * Escape will activate the default cancel button (see FrameUtil.addEscapeKeyAction())
         static void fixEscEnter(final JTable table)
              final RootPaneContainer root = (RootPaneContainer)SwingUtilities.windowForComponent(table);
              final String escapeKey = "escapeAction";
              Action escapeAction = new AbstractAction(escapeKey)
                   public void actionPerformed(ActionEvent actionEvent)
                        if(table.isEditing())
                             CellEditor editor = table.getCellEditor(table.getEditingRow(), table.getEditingColumn());
                             editor.cancelCellEditing();
                        else
                             Window parentWindow = SwingUtilities.windowForComponent(table);
                             Action windowEscapeAction = FrameUtil.getEscapeKeyAction(root);
                             windowEscapeAction.actionPerformed(actionEvent);
              final String enterKey = "enterAction";
              Action enterAction = new AbstractAction(enterKey)
                   public void actionPerformed(ActionEvent actionEvent)
                        if(table.isEditing())
                             CellEditor editor = table.getCellEditor(table.getEditingRow(), table.getEditingColumn());
                             editor.stopCellEditing();
                        else
                             root.getRootPane().getDefaultButton().doClick();
              InputMap inputMap = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
              table.getActionMap().put(escapeKey, escapeAction);
              table.getActionMap().put(enterKey, enterAction);
              inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), escapeKey);          
              inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), enterKey);          
         static void fixFocusHighlight()
              Border focusCellHighlightBorder = new DashedLineBorder(Color.BLACK);
              UIManager.put("Table.focusCellHighlightBorder", focusCellHighlightBorder);
         /** If you do not setup a table to have a row selected then there is a bug where for example
          * you use an accelerator key to put focus in the table and you get no visual feedback that
          * the table has focus - ie no focus emphasis - dashed box
          * @param table - the table to fix
         static void fixTableGainsFocusOnFirstEntry(JTable table)
              // for first time tabbing to table make sure that first cell has focus
              // don't seem to need this fix under windows XP
              table.getSelectionModel().removeSelectionInterval(0, 0);
         /** fix spacebar handling
          * java standards does not mention spacebar handling on a JTable but this is a windows
          * standard feature and is also a feature on JList.
          * Without spacebar handling on a JTable there would be no other keyboard handling that
          * would allow you to select the current row.
          * <p>
          * Trying to follow windows standards since java does not list space bar handling for JTable.
          * The following bahaviour can be seen in IBM code in project Java build path - tab libraries
          * and in microsoft code in the administrative tools control panel dialog in windows XP
          * <p>
          * spacebar - select the current row without deselecting any others
          * <p>
          * handling should be fixed in merlin release 1.5
          * see bug report http://developer.java.sun.com/developer/bugParade/bugs/4303294.html
         static void fixSpacebarHandling(JTable table)
              KeyStroke ksSpace = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0, true);
              final String ACTION_SPACE = "SPACE";
              Action spaceAction = new AbstractAction(ACTION_SPACE)
                   public void actionPerformed(ActionEvent actionEvent)
                        ListSelectionModel selectModel =
                             ((JTable) actionEvent.getSource()).getSelectionModel();
                        int currentRowIndex = selectModel.getAnchorSelectionIndex();
                        selectModel.addSelectionInterval(currentRowIndex, currentRowIndex);
              table.getInputMap().put(ksSpace, ACTION_SPACE);
              table.getActionMap().put(ACTION_SPACE, spaceAction);
         /** fix ctrl + spacebar handling
          * java standards does not mention spacebar handling on a JTable but this is a windows
          * standard feature and is also a feature on JList.
          * Without spacebar handling on a JTable there would be no other keyboard handling that
          * would allow you to select the current row.
          * <p>
          * Trying to follow windows standards since java does not list space bar handling for JTable.
          * The following bahaviour can be seen in IBM code in project Java build path - tab libraries
          * and in microsoft code in the administrative tools control panel dialog in windows XP
          * <p>
          * ctrl + spacebar - toggle selection on the current row without deselecting any others
          * <p>
          * handling should be fixed in merlin release 1.5
          * see bug report http://developer.java.sun.com/developer/bugParade/bugs/4303294.html
         static void fixCtrlSpacebarHandling(JTable table)
              KeyStroke ksCtrlSpace = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, Event.CTRL_MASK, true);
              final String ACTION_CTRL_SPACE = "CTRLSPACE";
              Action ctrlSpaceAction = new AbstractAction(ACTION_CTRL_SPACE)
                   public void actionPerformed(ActionEvent actionEvent)
                        ListSelectionModel selectModel =
                             ((JTable) actionEvent.getSource()).getSelectionModel();
                        int currentRowIndex = selectModel.getAnchorSelectionIndex();
                        boolean isCurrentRowSelected = selectModel.isSelectedIndex(currentRowIndex);
                        if (isCurrentRowSelected)
                             selectModel.removeSelectionInterval(currentRowIndex, currentRowIndex);
                        else
                             selectModel.addSelectionInterval(currentRowIndex, currentRowIndex);
              table.getInputMap().put(ksCtrlSpace, ACTION_CTRL_SPACE);
              table.getActionMap().put(ACTION_CTRL_SPACE, ctrlSpaceAction);
         /** fix shift + spacebar handling
          * java standards does not mention spacebar handling on a JTable but this is a windows
          * standard feature and is also a feature on JList.
          * Without spacebar handling on a JTable there would be no other keyboard handling that
          * would allow you to select the current row.
          * <p>
          * Trying to follow windows standards since java does not list space bar handling for JTable.
          * The following bahaviour can be seen in IBM code in project Java build path - tab libraries
          * and in microsoft code in the administrative tools control panel dialog in windows XP
          * <p>
          * shift + spacebar - extend the selection from the anchor to the lead index.
          * this might still be a bit funny in java 1.4.2 and code may need to be changed slightly
          * <p>
          * handling should be fixed in merlin release 1.5
          * see bug report http://developer.java.sun.com/developer/bugParade/bugs/4303294.html
         static void fixShiftSpacebarHandling(JTable table)
              KeyStroke ksShiftSpace = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, Event.SHIFT_MASK, true);
              final String ACTION_SHIFT_SPACE = "SHIFTSPACE";
              Action shiftSpaceAction = new AbstractAction(ACTION_SHIFT_SPACE)
                   public void actionPerformed(ActionEvent actionEvent)
                        ListSelectionModel selectModel =
                             ((JTable) actionEvent.getSource()).getSelectionModel();
                        int currentRowIndex = selectModel.getAnchorSelectionIndex();
                        int startRowIndex = selectModel.getLeadSelectionIndex();
                        selectModel.setSelectionInterval(startRowIndex, currentRowIndex);
              table.getInputMap().put(ksShiftSpace, ACTION_SHIFT_SPACE);
              table.getActionMap().put(ACTION_SHIFT_SPACE, shiftSpaceAction);
         /** fix ctrl + down or up handling - move focus emphasis up or down accordingly
          * <p>
          * handling should be fixed in merlin release 1.5
          * see bug report http://developer.java.sun.com/developer/bugParade/bugs/4303294.html
         static void fixCtrlUpDownHandling(JTable table)
              final String ACTION_UP = "CTRLUP";
              KeyStroke ksCtrlUp = KeyStroke.getKeyStroke(KeyEvent.VK_UP, Event.CTRL_MASK, true);
              KeyStroke ksCtrlDown = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, Event.CTRL_MASK, true);
              Action ctrlUpAction = new CtrlUpDownAction(ACTION_UP, true);
              final String ACTION_DOWN = "CTRLDOWN";
              Action ctrlDownAction = new CtrlUpDownAction(ACTION_DOWN, false);
              table.getInputMap().put(ksCtrlUp, ACTION_UP);
              table.getActionMap().put(ACTION_UP, ctrlUpAction);
              table.getInputMap().put(ksCtrlDown, ACTION_DOWN);
              table.getActionMap().put(ACTION_DOWN, ctrlDownAction);
    * Action for moving focus emphasis up or down
    class CtrlUpDownAction extends AbstractAction
         private boolean m_isUp = true;
         /** Ctor controlling direction of focus emphasis
          * @param name of the action
          * @param isUp - true if dirction of action is up, else false
         public CtrlUpDownAction(String name, boolean isUp)
              super(name);
              m_isUp = isUp;
         /** Moves the focus emphasis
          * @param actionEvent - see javax.swing.AbstractAction class for details
         public void actionPerformed(ActionEvent actionEvent)
              JTable table = (JTable) actionEvent.getSource();
              ListSelectionModel selectModel = table.getSelectionModel();
              int nextRowIndex =
                   getNextRowIndex(table.getRowCount(), selectModel.getAnchorSelectionIndex());
              if (selectModel.isSelectedIndex(nextRowIndex))
                   selectModel.addSelectionInterval(nextRowIndex, nextRowIndex);
              else
                   selectModel.removeSelectionInterval(nextRowIndex, nextRowIndex);
         /** Gets the index of the next row depending on direction up or down
          * @param rowCount - number of rows in the table
          * @param currentRowIndex - index of the row that has focus emphasis
          * @return the index of the next row
         private int getNextRowIndex(int rowCount, int currentRowIndex)
              int nextRowIndex = -1;
              if (m_isUp && currentRowIndex > 0)
                   // emphasis moving up one row
                   nextRowIndex = currentRowIndex - 1;
              else if (!m_isUp && currentRowIndex < (rowCount - 1))
                   // emphasis moving down one row
                   nextRowIndex = currentRowIndex + 1;
              return nextRowIndex;
    /** Draws a dashed line (well more of a dotted line)
    * Used for eg drawing focus emphasis rectangle
    * Class draws a rectangle of chosen colour overlaid with a dashed white line.
    class DashedLineBorder extends LineBorder
         private BasicStroke m_lineStroke = new BasicStroke();
         private BasicStroke m_dashStroke =
              new BasicStroke(
                   m_lineStroke.getLineWidth(),
                   BasicStroke.CAP_BUTT,//m_lineStroke.getEndCap(),
                   m_lineStroke.getLineJoin(),
                   m_lineStroke.getMiterLimit(),
                   new float[] { 1,1,1 },
                   0);
          * Constructor for DashedLineBorder.
          * @param color
         public DashedLineBorder(Color color)
              super(color);
          * Constructor for DashedLineBorder.
          * @param color
          * @param thickness
         public DashedLineBorder(Color color, int thickness)
              super(color, thickness);
          * Constructor for DashedLineBorder.
          * @param color
          * @param thickness
          * @param roundedCorners
         public DashedLineBorder(Color color, int thickness, boolean roundedCorners)
              super(color, thickness, roundedCorners);
         /** Similar to LineBorder's method but draws a line in the chosen colour
          * before drawing a white dashed line on top of it
          * @see javax.swing.border.Border#paintBorder(Component, Graphics, int, int, int, int)
         public void paintBorder(Component c, Graphics g, int x, int y, int width, int height)
              Color oldColor = g.getColor();
              int i;
              Graphics2D g2 = (Graphics2D) g;
              g2.setStroke(m_lineStroke);
              g.setColor(lineColor);
              drawRect(g, x, y, width, height);
              g2.setStroke(m_dashStroke);
              g.setColor(Color.WHITE);
              drawRect(g, x, y, width, height);
              g.setColor(oldColor);
          * @see javax.swing.border.Border#paintBorder(Component, Graphics, int, int, int, int)
         private void drawRect(Graphics g, int x, int y, int width, int height)
              // extracted from Java LineBorder.paintBorder
              int i;
              /// PENDING(klobad) How/should do we support Roundtangles?
              for (i = 0; i < thickness; i++)
                   if (!roundedCorners)
                        g.drawRect(x + i, y + i, width - i - i - 1, height - i - i - 1);
                   else
                        g.drawRoundRect(
                             x + i,
                             y + i,
                             width - i - i - 1,
                             height - i - i - 1,
                             thickness,
                             thickness);
    import java.awt.Component;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.Frame;
    import java.awt.Image;
    import java.awt.Insets;
    import java.awt.Rectangle;
    import java.awt.Toolkit;
    import java.awt.Window;
    import java.awt.event.ActionEvent;
    import java.awt.event.ComponentAdapter;
    import java.awt.event.ComponentEvent;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.image.ImageProducer;
    import java.io.IOException;
    import javax.swing.AbstractAction;
    import javax.swing.Action;
    import javax.swing.ActionMap;
    import javax.swing.InputMap;
    import javax.swing.JButton;
    import javax.swing.JComponent;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.KeyStroke;
    import javax.swing.RootPaneContainer;
    * Provides static utility methods for JFrames.
    public final class FrameUtil {
        * No instances allowed. Just use the static methods.
       private FrameUtil() {
          super();
        * Sets the button that is "activated" when the escape key is used.
        * A bit like
        * SwingUtilities.getRootPane(this).setDefaultButton(myButton);
        * @param jFrame The JFrame or JDialog for which the escape key button should be set.
        * @param button The button which should be clicked automatically when the escape key is pressed.
       public static void setEscapeKeyButton(final RootPaneContainer jFrame, final JButton button) {
          addEscapeKeyAction(jFrame, new AbstractAction() {
             public void actionPerformed(final ActionEvent evt) {
                button.doClick();
        * Adds an action to the jframe's  action map that is triggered by the Escape key.
        * (If you just want to simulate a button click when the escape key is pressed then
        * use setEscapeKeyButton.)
        * A bit like
        * SwingUtilities.getRootPane(this).setDefaultButton(myButton);
        * @param jFrame The JFrame or JDialog for which the escape key action should be set.
        * @param action The action that is executred when the escape key us pressed,
       public static void addEscapeKeyAction(final RootPaneContainer jFrame, final Action action) {
          String actionKey = "escapeAction";
          KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
          // using getRootPane rather than getContentPane, content pane doesn't work in all
          // scenarios
          InputMap inputMap = (jFrame.getRootPane()).getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
          inputMap.put(escape, actionKey);
          ActionMap actionMap = (jFrame.getRootPane()).getActionMap();
          actionMap.put(actionKey, action);
        * Finds the escape action for the given frame or dialog if one was added
        * @param jFrame The JFrame or JDialog for which the escape key action should be set.
       public static Action getEscapeKeyAction(final RootPaneContainer jFrame)
          InputMap inputMap = (jFrame.getRootPane()).getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
          KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
          ActionMap actionMap = (jFrame.getRootPane()).getActionMap();
          Object actionKey = inputMap.get(escapeKeyStroke);
          Action escapeAction = null;
          if(actionKey != null)
             escapeAction = actionMap.get(actionKey);
          return escapeAction;

    From one of the MS windows books.....Going by the books, eh?
    Well, apparently MS doesn't do so with Excel... Pressing space will simply trigger an edit!
    q1) JTable should have space bar handling out of the box?
    (space, CTRL+space, shift+space)
    I have not seen this raised as a bug.A bug, no... a feature, maybe. Anyway, JTable provides most of the features needed for creating a table -- it's far from perfect..... adding support for CTRL+SPACE and SHIFT+SPACE is not all that hard to do.
    q2) Should the enter key put an editable cell under edit and
    q3) if not should the first enter key stop cell editing and a second press activate the default buttonIMHO, a good answer to your question can be found by running MS Excel and see how it's done.
    The escape key will cancel editing of a cell that is under edit.and q4, q5
    It should, as in Excel. But then, in Lotus 1-2-3, first escape will clear the edit buffer (unless it's empty) and the second escape will cancel editing. Who'is more programmatically correct (I don't know)?
    ;o)
    V.V.

  • Help with Null Pointer Exception

    Hi, I am working on a simple menu program. It compiles and works correctly except for one item. I am having a problem with Greying out a menu item...... Specifically, When I press the EDIT / OPTIONS / READONLY is supposed to Greyout the Save and SaveAs options. But, when I do that it displays a Null Pointer Exception error message in the command window.
    Your advice would be much appreciated!
    Now for the code
    /  FileName Menutest.java
    //  Sample Menu
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    public class MenuTest extends JFrame {
       private Action saveAction;
         private Action saveAsAction;
         private JCheckBoxMenuItem readOnlyItem;
       // set up GUI
       public MenuTest()
          super( "Menu Test" );
    //*   file menu and menu items
          // set up File menu and its menu items
          JMenu fileMenu = new JMenu( "File" );
          // set up New menu item
          JMenuItem newItem = fileMenu.add(new TestAction( "New" ));
          // set up Open menu item
          JMenuItem openItem = fileMenu.add(new TestAction( "Open" ));
              //  add seperator bar
              fileMenu.addSeparator();
          // set up Save menu item
          JMenuItem saveItem = fileMenu.add(new TestAction( "Save" ));
          // set up Save As menu item
          JMenuItem saveAsItem = fileMenu.add(new TestAction( "Save As" ));
              //  add seperator bar
              fileMenu.addSeparator();
              // set up Exit menu item
          JMenuItem exitItem = new JMenuItem( "Exit" );
          exitItem.setMnemonic( 'x' );
          fileMenu.add( exitItem );
          exitItem.addActionListener(
             new ActionListener() {  // anonymous inner class
                // terminate application when user clicks exitItem
                public void actionPerformed( ActionEvent event )
                   System.exit( 0 );
             }  // end anonymous inner class
          ); // end call to addActionListener
    //*   Edit menu and menu items
              // set up the Edit menu
              JMenu editMenu = new JMenu( "Edit" );
              //JMenuItem editMenu = new JMenu( "Edit" );
          // set up Cut menu item
          Action cutAction = new TestAction("Cut");
          cutAction.putValue(Action.SMALL_ICON, new ImageIcon("cut.gif"));
          // set up Copy menu item
          Action copyAction = new TestAction("Copy");
          copyAction.putValue(Action.SMALL_ICON, new ImageIcon("copy.gif") );
          // set up Paste menu item
          Action pasteAction = new TestAction("Paste");
          pasteAction.putValue(Action.SMALL_ICON, new ImageIcon("paste.gif") );
              editMenu.add(cutAction);
              editMenu.add(copyAction);
              editMenu.add(pasteAction);
          //  add seperator bar
              editMenu.addSeparator();
              // set up Options menu, and it submenus and items
              JMenu optionsMenu = new JMenu("Options");
              readOnlyItem = new JCheckBoxMenuItem("Read-only");
              readOnlyItem.addActionListener(
                   new ActionListener()
                   {  //  anonymous inner class
                        public void actionPerformed( ActionEvent event)
                          saveAction.setEnabled(!readOnlyItem.isSelected());
                          saveAsAction.setEnabled(!readOnlyItem.isSelected());
                }  // end anonymous inner class
              ); // end call to addActionListener
              optionsMenu.add(readOnlyItem);
              // add seperator bar
              optionsMenu.addSeparator();
              //  Work on Radio Buttons
              ButtonGroup textGroup = new ButtonGroup();
              JRadioButtonMenuItem insertItem = new JRadioButtonMenuItem("Insert");
              insertItem.setSelected(true);
              JRadioButtonMenuItem overTypeItem = new JRadioButtonMenuItem("Overtype");
              textGroup.add(insertItem);
              textGroup.add(overTypeItem);
              optionsMenu.add(insertItem);
              optionsMenu.add(overTypeItem);
              editMenu.add(optionsMenu);
    //*   Help menu and menu items
              // set up the Help menu
              JMenu helpMenu = new JMenu( "Help" );
              helpMenu.setMnemonic( 'H' );
          // set up index menu item
          JMenuItem indexItem = helpMenu.add(new TestAction( "Index" ));
          indexItem.setMnemonic( 'I' );
          helpMenu.add( indexItem );
              // set up About menu item
          JMenuItem aboutItem = new JMenuItem( "About" );
          aboutItem.setMnemonic( 'A' );
          helpMenu.add( aboutItem );
          aboutItem.addActionListener(
             new ActionListener() {  // anonymous inner class
                // display message dialog when user selects Open
                public void actionPerformed( ActionEvent event )
                   JOptionPane.showMessageDialog( MenuTest.this,
                      "This is MenuTest.java \nVersion 1.0 \nMarch 15, 2004",
                      "About", JOptionPane.PLAIN_MESSAGE );
             }  // end anonymous inner class
          ); // end call to addActionListener
          // create menu bar and attach it to MenuTest window
          JMenuBar bar = new JMenuBar();
          setJMenuBar( bar );
          bar.add( fileMenu );
              bar.add( editMenu );
              bar.add( helpMenu );
          setSize( 500, 200 );
          setVisible( true );
       } // end constructor
       public static void main( String args[] )
          MenuTest application = new MenuTest();
          application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
       // inner class to handle action events from menu items
       private class ItemHandler implements ActionListener {
          // process color and font selections
          public void actionPerformed( ActionEvent event )
           repaint();
          } // end method actionPerformed
       } // end class ItemHandler
       //  Prints to action name to System.out
      class TestAction extends AbstractAction
              public TestAction(String name) { super(name); }
          public void actionPerformed( ActionEvent event )
             System.out.println(getValue(Action.NAME) + " selected." );
       } // end class TestAction
    } // end class MenuTest

    alan, I've been trying to figure out a solution.
    You can initialize it like this
    private Action saveAction= new Action();
         private Action saveAsAction=new Action();
    THE ABOVE WILL NOT WORK.
    because Action is an interface. An interface does not have constructors. However, interface references are used for polymorphic purposes.
    Anyway, all you have to do is find some class that implemets Action interface.... I cant seem to find one. Or maybe this is not how its supposed to be done?
    Hopefully, someone can shed some light on this issue.
    FYI,
    http://java.sun.com/products/jfc/swingdoc-api-1.1/javax/swing/Action.html

Maybe you are looking for

  • How can I get safe internet for protect my phone and PC

    How can I get safe internet for protect my phone and PC. l lose all internet account I've three year. i lose my phone all app for a day even I safe all informating and apps in ICloud  but I lose all my phone information . Like I have new phone and I

  • Mobile Phone Camera API

    Does anyone know what the command for recording an image by the mobile phone imaging API is called? I want to set my command listener to go to a new form when you select "Yes" from the record image page. Is anyone familiar with this application that

  • Impdp import errors  Oracle 11.1.0.6

    Hello to everyone. I need help. I've searched help sites/forums for the past few days and have not found a solution. I am new to using impdp and cannot get it to work. My prior experience was the old "imp" utility. We recently upgraded to 11.1.0.6 da

  • Fail to ping to Solaris 10 system.

    I install Solaris 10 but sometime I could not ping to system but sometime it is ok to ping. Is there any problem with network configuration in Solaris 10 or it is a network environment because I rent my server in the share rack (Data Center) and I do

  • Why does the window border change frequently?

    The left and right borders of the Firefox 4 window have a stylized look that includes a gradient. For some reason as I browse, this gradient changes its location frequently. It's very annoying. See [http://screencast.com/t/duzpbYVVF this video] for a