我在让多个按钮在 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/