2016-04-12 15 views
3

私は現在、ソフトウェアエンジニアリングクラスのシミュレートされた株式市場に取り組んでいます。私は現在のメニュー項目のそれぞれについて新しいウィンドウを開くためにアクションリストを使用しています。しかし、クラスごとに1つのActionListenerしか使用できないようですので、すべてのメニューオプションに対して1つのセットウィンドウしか持てません。複数のアクションリスナーを実装する他の方法はありますか?これを行う別の方法がありますか?あなたは、代わりに、ActionListenerインタフェースを実装して何かするJButtonまたはその他のオブジェクトのために必要なさまざまな機能を提供する匿名クラスを作成する必要はありませんJava:同じクラスの複数のActionListeners?

import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.*; 
    import javax.swing.border.BevelBorder; 
    import javax.swing.table.DefaultTableModel; 

    public class GUIroughdraft implements Runnable, ActionListener 
    { 
      private JFrame frame; 
      private JMenuBar menuBar; 
      private JMenu FileMenu; 
      private JMenu ActionMenu; 
      private JMenu HelpMenu; 
      private JMenuItem SaveMenuItem; 
      private JMenuItem LoadMenuItem; 
      private JMenuItem ExitMenuItem; 
      private JMenuItem BuyMenuItem; 
      private JMenuItem SellMenuItem; 
      private JMenuItem AboutMenuItem; 
      private JMenuItem UserManualMenuItem; 


      public static void main(String[] args) 
      { 
      // needed on mac os x 
      System.setProperty("apple.laf.useScreenMenuBar", "true"); 

      // the proper way to show a jframe (invokeLater) 
      SwingUtilities.invokeLater(new GUIroughdraft()); 
      } 


     private JFrame frmBgszStockSimulator; 
     /** 
     * @wbp.nonvisual location=53,14 
     */ 
     //private final JLabel lblBgszStockSimulator =     DefaultComponentFactory.getInstance().createTitle("BGSZ Stock Simulator"); 
     private JTextField searchBar; 
     private JTable table; 

     /** 
     * Launch the application. Testing Comment 
     */ 

     /* 
     public static void main(String[] args) 
     { 
      EventQueue.invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        try 
        { 
         GUIroughdraft window = new GUIroughdraft(); 
         window.frmBgszStockSimulator.setVisible(true); 
        } catch (Exception e) 
        { 
       e.printStackTrace(); 
        } 
       } 
      }); 
     } 
     */ 



     /** 
     * Create the application. 
     */ 
     /* 
     public GUIroughdraft() 
     { 
      run(); 
     } 
     */ 

/** 
* Initialize the contents of the frame. 
*/ 
public void run() 
{ 
    frmBgszStockSimulator = new JFrame("BGSZ Stock Simulator"); 
    frmBgszStockSimulator.getContentPane().setBackground(Color.GRAY); 
    frmBgszStockSimulator.setTitle("BGSZ Stock Simulator"); 
    frmBgszStockSimulator.setBounds(100, 100, 775, 510); 
    frmBgszStockSimulator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frmBgszStockSimulator.setVisible(true); 

    //Builds menu bar 
    menuBar = new JMenuBar(); 

    //Builds the File menu 
    FileMenu = new JMenu("File"); 
    SaveMenuItem = new JMenuItem("Save"); 
    LoadMenuItem = new JMenuItem("Load"); 
    ExitMenuItem = new JMenuItem("Exit"); 
    SaveMenuItem.addActionListener(this); 
    LoadMenuItem.addActionListener(this); 
    ExitMenuItem.addActionListener(this); 
    FileMenu.add(SaveMenuItem); 
    FileMenu.add(LoadMenuItem); 
    FileMenu.add(ExitMenuItem); 

    //Builds the Actions menu 
    ActionMenu = new JMenu("Actions"); 
    BuyMenuItem = new JMenuItem("Buy"); 
    SellMenuItem = new JMenuItem("Sell"); 
    ActionMenu.add(BuyMenuItem); 
    ActionMenu.add(SellMenuItem); 

    //Builds the Help menu 
    HelpMenu = new JMenu("Help"); 
    AboutMenuItem = new JMenuItem("About"); 
    UserManualMenuItem = new JMenuItem("User Manual"); 
    HelpMenu.add(AboutMenuItem); 
    HelpMenu.add(UserManualMenuItem); 

    menuBar.add(FileMenu); 
    menuBar.add(ActionMenu); 
    menuBar.add(HelpMenu); 

    frmBgszStockSimulator.setJMenuBar(menuBar); 


    JScrollBar scrollBar = new JScrollBar(); 
    scrollBar.setBackground(Color.LIGHT_GRAY); 
    scrollBar.setBounds(323, 47, 21, 317); 
    frmBgszStockSimulator.getContentPane().add(scrollBar); 

    JTextArea displayBox = new JTextArea(); 
    displayBox.setEditable(false); 
    displayBox.setLineWrap(true); 
    displayBox.setWrapStyleWord(true); 
    displayBox.setText("This will be a text field that displays all your actions and information about stocks, purchases, sales, errors, etc."); 

    //when the user clicks the search button that is not there anymore 
    //create a new instance of the getStockData class 
    //get the data from the input line something like String userInput = searchBar.getText() 
    //pass that to the getData(userInput); 
    //set the displayBox.setText(the return from getData()); 

    displayBox.setBounds(12, 47, 312, 317); 
    frmBgszStockSimulator.getContentPane().add(displayBox); 

    searchBar = new JTextField(); 
    searchBar.setText("Enter your text here"); 
    searchBar.setBounds(12, 377, 733, 22); 
    frmBgszStockSimulator.getContentPane().add(searchBar); 
    searchBar.setColumns(10); 

    JProgressBar progressBar = new JProgressBar(); 
    progressBar.setStringPainted(true); 
    progressBar.setValue(75); 
    progressBar.setBounds(78, 412, 586, 14); 
    frmBgszStockSimulator.getContentPane().add(progressBar); 

    table = new JTable(); 
    table.setModel(new DefaultTableModel(
      new Object[][] { 
       {"Stock Name", "Stock Value", "Amount Owned", "Total Value"}, 
       {" BAC", "$13.48", "4", "$53.92"}, 
       {" RIG", "$8.89", "0", "$0.00"}, 
       {" SUNE", "$0.59", "12", "$7.08"}, 
       {" FCX", "$10.29", "2", "$20.58"}, 
       {" PBR", "$5.86", "0", "$0.00"}, 
       {" GE", "$31.83", "0", "$0.00"}, 
       {" VALE", "$4.24", "24", "$101.76"}, 
       {" VRX", "$27.07", "0", "$0.00"}, 
       {" PFE", "$30.07", "0", "$0.00"}, 
       {" CRC", "$1.05", "8", "$8.40"}, 
       {" GGB", "$1.82", "0", "$0.00"}, 
       {" CHK", "$4.01", "6", "$24.06"}, 
       {" T", "$39.37", "0", "$0.00"}, 
       {" F", "$13.35", "5", "$66.75"}, 
       {" WLL", "$7.66", "0", "$0.00"}, 
      }, 
      new String[] { 
       "New column", "New column", "New column", "New column" 
      } 
     )); 
    table.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); 
    table.setBounds(350, 51, 395, 313); 
    frmBgszStockSimulator.getContentPane().add(table); 

    JTextArea txtrValue = new JTextArea(); 
    txtrValue.setText("Displays Cash Value"); 
    txtrValue.setLineWrap(true); 
    txtrValue.setEditable(false); 
    txtrValue.setBounds(99, 12, 172, 22); 
    frmBgszStockSimulator.getContentPane().add(txtrValue); 

    JTextArea txtrCurrentPortfolioValue = new JTextArea(); 
    txtrCurrentPortfolioValue.setText("Display Portfolio Value"); 
    txtrCurrentPortfolioValue.setLineWrap(true); 
    txtrCurrentPortfolioValue.setEditable(false); 
    txtrCurrentPortfolioValue.setBounds(376, 12, 206, 22); 
    frmBgszStockSimulator.getContentPane().add(txtrCurrentPortfolioValue); 

    JLabel lblCashValue = new JLabel("Cash Value:"); 
    lblCashValue.setBounds(24, 15, 111, 16); 
    frmBgszStockSimulator.getContentPane().add(lblCashValue); 

    JLabel lblPortfolioValue = new JLabel("Portfolio Value:"); 
    lblPortfolioValue.setBounds(283, 15, 123, 16); 
    frmBgszStockSimulator.getContentPane().add(lblPortfolioValue); 

} 

public void actionPerformed(ActionEvent ev) 
    { 
    SaveDialog dialog = new SaveDialog(); 
    dialog.setModal(true); 
    dialog.setVisible(true); 
    } 


private class SaveDialog extends JDialog implements ActionListener 
    { 
    private JButton okButton = new JButton("Your File has been saved!"); 

    private SaveDialog() 
    { 
     super(frame, "Save", true); 
     JPanel panel = new JPanel(new FlowLayout()); 
     panel.add(okButton); 
     getContentPane().add(panel); 
     okButton.addActionListener(this); 
     setPreferredSize(new Dimension(250, 75)); 
     pack(); 
     setLocationRelativeTo(frame); 
    } 

    public void actionPerformed(ActionEvent ev) 
    { 
     setVisible(false); 
    } 
    } 

public void actionPerformed2(ActionEvent ev) 
    { 
    LoadDialog dialog = new LoadDialog(); 
    dialog.setModal(true); 
    dialog.setVisible(true); 
    } 

private class LoadDialog extends JDialog implements ActionListener 
    { 
    private JButton LoadButton = new JButton("Your File has successfully loaded!"); 

    private LoadDialog() 
    { 
     super(frame, "Load", true); 
     JPanel panel = new JPanel(new FlowLayout()); 
     panel.add(LoadButton); 
     getContentPane().add(panel); 
     LoadButton.addActionListener(this); 
     setPreferredSize(new Dimension(250, 75)); 
     pack(); 
     setLocationRelativeTo(frame); 
    } 

    public void actionPerformed(ActionEvent ev) 
    { 
     setVisible(false); 
    } 
    } 


} 
+0

はい、あなたは単純に行うことができます。 'comp.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){//ここにコードを入れて}});' – 3kings

+1

[How toアクションの使用(http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html)および[CardLayoutの使用方法](http://docs.oracle.com/javase/tutorial/uiswing/ layout/card.html)を参照してください。代わりに 'JDesktopPane'を使用することもできます。詳細は、[内部フレームの使い方](https://docs.oracle.com/javase/tutorial/uiswing/components/internalframe.html)を参照してください。 – MadProgrammer

+0

@ 3kings私がしようとしているのは、アクションリスナの中のJPaneでウィンドウを作成することです。私はあなたが言うことを試みたが、うまくいかなかった。 –

答えて

1

は、ここに私のコードです。例は次のようになります。GUIroughdraftクラスで

myButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       // do whatever you want in here 
      } 

     }); 
+0

私はこれを試して、それがうまくいくかどうかを見て、あなたに戻ってきます。私の質問にお答えいただき、ありがとうございます。 –

1

を、actionPerformedメソッド、変数名は小文字で始めるべきコーディング規格どおり

public void actionPerformed(ActionEvent ev) 
    { 
    if(ev.getActionCommand().equalsIgnoreCase("Save"){ 
     SaveDialog dialog = new SaveDialog(); 
     dialog.setModal(true); 
     dialog.setVisible(true); 
    } 
    else if(ev.getActionCommand().equalsIgnoreCase("Load")){ 
     LoadDialog dialog = new LoadDialog(); 
     dialog.setModal(true); 
     dialog.setVisible(true); 
    } 
    else if(ev.getActionCommand().equalsIgnoreCase("Exit")){ 
     // Do whatever you like 
    } 

    } 

も内側にこのコードを配置します。

プライベートJMenuItem SaveMenuItem; ---間違った

プライベートJMenuItem saveMenuItem; --- correct

+0

申し訳ありませんが、私はJavaでコーディングして以来、しばらくしています。私はこれを試して、あなたに戻ってきます。あなたの助けをありがとう –

+0

私が提供したコードを使ってみましたが、メニューバーからロードメニュー項目をクリックしても同じsaveDialogが表示されます。私のコードに何か定義されているのですか?この紛争の原因になるのは私の方法だろうか? –

+0

この行をactionPerformedメソッド、System.out.println(ev.getActionCommand())の最初のステートメントに追加してください。 [保存]をクリックすると、[保存する]が表示されます。 –

関連する問題