java - 多个按钮?

标签 java swing jbutton

我在让多个按钮在 Java 中工作时遇到问题。现在我有 2 个按钮,它们都应该做某事。 “Fill”按钮应使用我在“Io”类的“Fill”方法中设置的内容填充前 3 个字段“Title”、“Director”和“Year”。然后“添加”按钮应将顶部 3 个字段中的内容复制到底部 3 个文本区域。 “保存”按钮目前没有任何作用。但是,出于某种原因,我只能让程序识别第一个按钮。如果我在“If”语句中切换按钮并将“Add”移动到“else if”,反之亦然,它仍然只会识别“Add”按钮。无论我尝试什么,我似乎都无法让它执行两个按钮。如果有人能指出我正确的方向,任何帮助都会很棒!先感谢您! :)

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");
    } 
}

最佳答案

您只向一个 按钮添加了一个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 .

关于java - 多个按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27454969/

相关文章:

java - doClick() 和西蒙 : All buttons will unpress at the same time instead of individually

java - 如何找到可以执行的最大参与者人数?

Java编程-错误跟踪

java - 一个键上有多个键绑定(bind)?

java - 如果按下按钮,则重新启动我的 GUI

java - 单击一个按钮时禁用其余按钮

java.util.collection 从 web 服务返回

java - 禁用 Maven 警告消息 - "Selected war files include a WEB-INF/web.xml which will be ignored"

java - 吗啡聚合不同的映射键

java - DocumentFilter 只允许将数字和句点 (.) 放入 JTextField 中?