2014-12-13 6 views
1

У меня возникли проблемы с запуском mutliple кнопок на Java. Прямо сейчас у меня есть две кнопки, которые должны делать что-то. Кнопка «Заполнить» должна заполнить верхние 3 поля «Заголовок» «Режиссер» и «Год» с тем, что я установил в методе «Заполнить» в классе «Io». Кнопка «Добавить» должна затем взять то, что находится в верхних 3 полях, и скопировать их в нижние 3 области текста. Кнопка «Сохранить» ничего не делает сейчас. Однако по какой-то причине я могу получить программу только для распознавания первой кнопки. Если я переключу кнопки в инструкции «И» и переместите «Добавить» в «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....); 

Myself, я предпочитаю использовать анонимные ActionListeners, если это возможно, что-то вроде

btnFill.addActionListener(new ActionListener() { 

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

}); 

Это говорит о том, что вы пытаетесь использовать JButtons без первого чтения учебников, что-то я не советовал. Пожалуйста, посмотрите на них, так как они очень полезны: How to use Buttons.

+0

Вау, вы правы. Не могу поверить, что забыл добавить второго прослушивателя действий. Большое спасибо! – Slabach

Смежные вопросы