2016-04-17 6 views
0

現在、SWINGを使用して2つの異なるJMenusがあるJMenuBarを実装しています。 1つはgameMenuと呼ばれ、もう1つはaddMenuGameと呼ばれます。押されているJMenuItemからテキストを取得しますか?

gameMenuにいくつかのJMenuItemがあります。これらはすべて、このメソッドでインターフェイスコントローラに実装されています。

public void addGameMenu(JMenu control) { 
    String fileName = "gamemodes.txt"; 
    try { 

     FileReader inputFile = new FileReader(fileName); 

     BufferedReader bufferReader = new BufferedReader(inputFile); 

     String line; 

     while ((line = bufferReader.readLine()) != null) { 

      String split[] = line.split("#"); 
      for (int i = 0; i < split.length; i++) { 
       control.add(split[i]); 
      } 

     } 

     bufferReader.close(); 
    } catch (Exception e) { 
     System.out.println("Fejl ved linje:" + e.getMessage()); 
    } 

} 

テキストファイルからすべての行が読み込まれ、それがgameMenuというJMenuに追加されます。しかし、私はJMenuにアクションリテナーを追加するだけで、JMenuItemはJMenuではありません。 JFrameのメインのボイドでは、これは私がそれを実装する方法である:

public class index extends javax.swing.JFrame { 

    QuizzControlHandler dd = new QuizzControlHandler(); 
    private JMenuItem dc; 

    /** 
    * Creates new form index 
    */ 
    public index(){ 

     initComponents(); 
     dd.addGameMenu(menuGame); 

    } 

} 

これは正しく私のメニューを記入します、しかし、私は、ユーザーがクリックされたものを取得する必要があります。

答えて

3

しかし、私は唯一のJMenuItem、

JMenuにしたActionListenerを追加し、できないことをユーザーはそうあなたがJMenuItemませJMenuのにActionListenerを追加する必要がJMenuItemをクリックします。

あなたが起動する前addGameMenu(...)あなたはActionListenerはのようなコードで、すべてのJMenuItemsによって共有されるように作成することができます。そして、あなたが変更します

ActionListener al = new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     JMenuItem menuItem = (JMenuItem)e.getSource(); 
     System.out.println(menuItem.getText()); 
    } 
} 

あなたaddGameMenu(JMenu control, ActionListener al)二番目のパラメータを持っています。

はその後、変更の方法で:

//control.add(split[i]); 
JMenuItem menuItem = new JMenuItem(split[I]); 
menuItem.addActionListener(al); 
control.add(menuItem); 
+0

私は十分な兄弟、その説明のポイントに感謝することはできません...ありがとうございます! –

2

Camickrはそれに私を打ちます。

構築されたJMenuItemを追加する必要がある場合は、JMenuに単純な文字列を追加します。言い換えれば、スマートなものを追加できるときは、メニューにダムオブジェクトを追加しないでください。たとえば、

import java.awt.event.ActionEvent; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class TestMenus extends JPanel { 
    public TestMenus() { 

    } 

    public void addGameMenu(JMenu control) { 

     String[] texts = { "One", "Two", "Three", "Four", "Five" }; 
     for (int i = 0; i < texts.length; i++) { 
      control.add(new JMenuItem(new MenuItemAction(texts[i]))); 
     } 
    } 

    private class MenuItemAction extends AbstractAction { 
     public MenuItemAction(String name) { 
      super(name); 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Menu item: " + e.getActionCommand()); 
     } 
    } 

    private static void createAndShowGui() { 
     TestMenus mainPanel = new TestMenus(); 

     JMenu menu = new JMenu("Menu"); 
     mainPanel.addGameMenu(menu); 
     JMenuBar menuBar = new JMenuBar(); 
     menuBar.add(menu); 

     JFrame frame = new JFrame("TestMenus"); 
     frame.setJMenuBar(menuBar); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> { 
      createAndShowGui(); 
     }); 
    } 

} 
+0

JMenuからJ Itemsを取得する簡単な方法があると思ったので、兄弟、私の側から間違っている間違いを感謝します。おかげで多くの兄弟! –

関連する問題