Button in JMenuBar cant't change data in JTable

370 Views Asked by At

I'm writting application in java with use of swing, that uses JTable for dispaying the data from file. I created ActionListener to handle the process of adding of new data in JTable. In my app, JButton uses this ActionListener, and it works perfectly. But when i tie the same ActionListener to button in JMenuBar, something doesn't work. There is some action - apps loads data from file, but JTable doens't change at all. What can it be? Code:

    //button that works. It locates in constructor
    ...
    b1.addActionListener(bl);
    ...
    //button that loads data from file, but can't update table
    ...
        public JMenuBar createMenuBar() {
        JMenuBar menuBar;
        JMenu menu, submenu;
        JMenuItem menuItem;

        // Create the menu bar.
        menuBar = new JMenuBar();

        // Build the first menu.
        menu = new JMenu("File");
        menu.setMnemonic(KeyEvent.VK_A);
        menu.getAccessibleContext().setAccessibleDescription(
                "The only menu in this program that has menu items");
        menuBar.add(menu);

        // a group of JMenuItems
        menuItem = new JMenuItem("import...", KeyEvent.VK_T);
        // menuItem.setMnemonic(KeyEvent.VK_T); //used constructor instead
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1,
                ActionEvent.ALT_MASK));
        menuItem.getAccessibleContext().setAccessibleDescription(
                "This doesn't really do anything");
        menuItem.addActionListener(this);
        menu.add(menuItem);

        menuItem = new JMenuItem("add file...");
        menuItem.setMnemonic(KeyEvent.VK_B);
        menuItem.addActionListener(this);
        menu.add(menuItem);

        menuItem = new JMenuItem("open catalog");
        menuItem.setMnemonic(KeyEvent.VK_B);
        menuItem.addActionListener(bl);

        menu.add(menuItem);

        menuItem = new JMenuItem("save catalog");
        menuItem.setMnemonic(KeyEvent.VK_B);
        menuItem.addActionListener(b2l);
        menu.add(menuItem);

        // a group of radio button menu items
        menu.addSeparator();

        // a submenu
        menu.addSeparator();
        submenu = new JMenu("A submenu");
        submenu.setMnemonic(KeyEvent.VK_S);

        menuItem = new JMenuItem("An item in the submenu");
        menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2,
                ActionEvent.ALT_MASK));
        menuItem.addActionListener(this);
        submenu.add(menuItem);

        menuItem = new JMenuItem("Another item");
        menuItem.addActionListener(this);
        submenu.add(menuItem);
        menu.add(submenu);

        // Build second menu in the menu bar.
        menu = new JMenu("Edit");
        menu.setMnemonic(KeyEvent.VK_N);
        menu.getAccessibleContext().setAccessibleDescription(
                "This menu does nothing");
        menuBar.add(menu);

        return menuBar;
    }
...
    private static void createAndShowGUI() {
        // Create and set up the window.
        JFrame frame = new JFrame("Media Cataloguer");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        MainInterface dm = new MainInterface();
        frame.setJMenuBar(dm.createMenuBar());
...



    ...
    //mutual ActionListener
    class ButtonListener implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                        //loading of array with data
                CatalogueLoader loader = new CatalogueLoader("test.ctlg");
                try {
                    Object[][] ctlgData = loader.readCtlg();

                    for (int i = 0; i < loader.size; i++) {

                        for (int j = 0; j < 5; j++) {

                            table.setValueAt(ctlgData[i][j], i, j);

                        }

                    }

                } catch (IOException ex) {

                }
            }
        }
    private ButtonListener bl = new ButtonListener();
1

There are 1 best solutions below

0
On

You're not adding the same listener to the b1 and menuItem. I copied this from your code:

b1.addActionListener(bl);
menuItem.addActionListener(this);