2012-01-31 8 views
0

Javaのアプリケーションをスイングで作成しています.JTableを使用してファイルからデータを送信しています。 JTableで新しいデータを追加するプロセスを処理するActionListenerを作成しました。私のアプリケーションでは、JButtonはこのActionListenerを使用し、それは完全に動作します。しかし、私はJMenuBarのボタンに同じActionListenerを結ぶと、何かが動作しません。いくつかのアクションがあります - アプリケーションはファイルからデータを読み込みますが、JTableはまったく変更しません。それは何でしょうか? コード:JMenuBarのボタンはJTableのデータを変更できません

//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(); 
+0

少なくともActionListenerを表示する必要があります。 –

+0

ボタンはボタンである。ボタンの位置に関係なく、完全に機能するはずです。 – fireshadow52

+0

申し訳ありませんが、ちょうどいくつかのコードを追加しました –

答えて

0

あなたはB1とのmenuItemに同じリスナーを追加していません。あなたのコードからこれをコピーしました:

b1.addActionListener(bl); 
menuItem.addActionListener(this); 
関連する問題