2014-12-13 80 views
1

我無法使用多功能按鈕在Java中工作。現在我有兩個按鈕,應該都在做一些事情。 「填充」按鈕應填寫「Io」類中「填充」方法中設置的「標題」,「導演」和「年份」三個字段。然後,「添加」按鈕應該採取前3個字段中的內容並將其複製到底部的3個文本區域中。 「保存」按鈕現在不做任何事情。但是,出於某種原因,我只能讓程序識別第一個按鈕。如果我在「If」語句中切換按鈕並將「Add」移動到「else if」,反之亦然,它仍然只會識別「添加」按鈕。無論我嘗試什麼,我似乎都無法讓它執行兩個按鈕。如果有人能指引我正確的方向,任何幫助將是偉大的!先謝謝你! :)多個按鈕?

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.io.*; 
import java.util.*; 

public class database extends Io implements ActionListener{ 
    //frame 
    private JFrame window = new JFrame("Movie Database"); 

    //Buttons 
    public JButton btnAdd = new JButton("Add"); 
    public JButton btnFill = new JButton("Fill"); 
    public JButton btnSave = new JButton("Save"); 

    //Label 
    private JLabel lblTitle = new JLabel("Movie Title:"); 
    private JLabel lblDir = new JLabel("Director:"); 
    private JLabel lblYear = new JLabel("Year:"); 

    //Panel 
    private Panel pnlNorth = new Panel(); 
    private Panel pnlSouth = new Panel(); 
    private Panel pnlCenter = new Panel(); 

    public void init(){ 
     //set main window 
     window.setLayout(new BorderLayout()); 

     //add JLabel 
     window.add(pnlNorth,BorderLayout.NORTH); 
     window.add(pnlCenter,BorderLayout.CENTER); 
     window.add(pnlSouth,BorderLayout.SOUTH); 

     //set panels to gridframe 
     pnlNorth.setLayout(new GridLayout(1,3)); 
     pnlCenter.setLayout(new GridLayout(2,3)); 
     pnlSouth.setLayout(new GridLayout(1,3)); 

     //layout center panel 
     pnlNorth.add(lblTitle); 
     pnlNorth.add(lblDir); 
     pnlNorth.add(lblYear); 

     //layout center panel 
     pnlCenter.add(inTitle); 
     pnlCenter.add(inDir); 
     pnlCenter.add(inYear); 
     pnlCenter.add(btnAdd); 
     pnlCenter.add(btnFill); 
     pnlCenter.add(btnSave); 

     //layout south panel 
     pnlSouth.add(outTitle); 
     pnlSouth.add(outDir); 
     pnlSouth.add(outYear); 

     //actionlistener 
     btnAdd.addActionListener(this); 

     //generic frame operation 
     window.pack(); 
     window.setVisible(true); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } //end init 

    public database(){ 
     init(); 
    } 

    public void actionPerformed(ActionEvent a){ 
     Object source = a.getSource(); 
     if(source==btnAdd){ 
      set(); 
     } else if(source==btnFill){ 
      fill(); 
     }   
    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     new database(); 
    } // end main 
} //end class 

class Io{ 
    String title; 
    String dir; 
    String year; 

    //JText 
    public JTextField inTitle = new JTextField("",20); 
    public JTextField inDir = new JTextField("",20); 
    public JTextField inYear = new JTextField("",20); 
    public JTextArea outTitle = new JTextArea("",20,20); 
    public JTextArea outDir = new JTextArea("",20,20); 
    public JTextArea outYear = new JTextArea("",20,20); 

    public void fill(){ 
     inTitle.setText("Interstellar"); 
     inDir.setText("Christopher Nolan"); 
     inYear.setText("2014"); 
    } 


    public void set(){ 
     outTitle.append(inTitle.getText() + "\n"); 
     outDir.append(inDir.getText() + "\n"); 
     outYear.append(inYear.getText() + "\n"); 
    } 
} 

回答

3

你只加了一個ActionListener 一個按鈕:

btnAdd.addActionListener(this); 

所以,只有一個按鈕,該btnAdd,將工作,因爲這些按鈕將不會工作魔術和所有要求的ActionListener被添加到他們爲他們有任何功能。即,

btnFill.addActionListener(....something here....); 

我自己,我喜歡儘可能使用匿名的ActionListeners,像

btnFill.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent e) { 
     // do some fill stuff here 
    } 

}); 

這表明你正在嘗試使用Jbutton將不先閱讀教程,這是我建議不要。請看看他們,因爲他們非常有幫助:How to use Buttons

+0

哇,你是對的。我無法相信我忘了添加第二個動作偵聽器。非常感謝你! – Slabach 2014-12-13 02:47:07