2014-12-13 81 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