我正在使用计算器/手机输入键盘,并且在实际显示按钮时遇到各种麻烦。当所有东西都在main方法中时,我让它工作,但这不允许我实现ActionListener,我需要它才能使按钮工作。这是我现在的代码:
import java.awt.*; //Import everything
import java.util.*;
import java.awt.event.*;
import javax.swing.*; //Seriously, everything, just makes this easier
public class Keypad extends JPanel implements ActionListener {
public static void main(String[] args) {
//Create the frame that holds everything else
JFrame frame = new JFrame ("Almost Functional Keypad");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
//Create the keypad
frame.getContentPane().add(new Keypad());
//Stuff to do so it won't break
frame.setPreferredSize(new Dimension(350,400));
frame.pack();
frame.setVisible(true);
frame.setResizable(false);
}
public Keypad(){
//Create the array of JPanels and labels
JButton[] keyList = new JButton[12];
JLabel[] keyLabel = new JLabel[12];
//Array with the key labels
String[] keyLabelText = {"1","2","3","4","5","6","7","8","9","*","0","#"};
//We need a counter
int i;
//Create the panels
for (i=0; i<12; i++){
keyList[i]= new JButton();
keyList[i].setPreferredSize (new Dimension(100, 75));
keyLabel[i] = new JLabel (keyLabelText[i]);
keyList[i].add (keyLabel[i]);
keyList[i].addActionListener(this);
}
//Text field that only the buttons can modify
JTextArea displayText = new JTextArea();
displayText.setPreferredSize(new Dimension(320, 20));
//Create the "clear" button
JButton clear = new JButton();
clear.setPreferredSize(new Dimension(300, 40));
JLabel clearLabel = new JLabel ("Clear");
clear.add(clearLabel);
clear.addActionListener(this);
// Set up primary panel
JPanel primary = new JPanel();
primary.add(displayText);
for (i=0; i<12; i++){
primary.add (keyList[i]);
}
primary.add(clear);
}
public void actionPerformed (ActionEvent event){
//Stuff goes here eventually
}
}
我很确定它与在main中调用Keypad()有关,但我不知道如何调用它并让事情显示出来。我必须在构造函数中创建面板,否则我无法添加ActionListener,但现在我不知道如何将它们放入框架中。
感谢您的帮助,我希望这只是一件小而愚蠢的事我忘了。
答案 0 :(得分:0)
我对您的代码所做的更改是将构造函数更改为返回JPanel的方法以及一些非常小的更改。您应该注意到现在该函数返回一个JPanel来修复您的问题。
检查
import java.awt.*; //Import everything
import java.util.*;
import java.awt.event.*;
import javax.swing.*; //Seriously, everything, just makes this easier
public class Keypad extends JPanel implements ActionListener {
public static void main(String[] args) {
//Create the frame that holds everything else
JFrame frame = new JFrame ("Almost Functional Keypad");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
//Create the keypad
frame.getContentPane().add(getKeypad());
//Stuff to do so it won't break
frame.setPreferredSize(new Dimension(350,400));
frame.pack();
frame.setVisible(true);
frame.setResizable(false);
}
public static JPanel getKeypad(){
//Create the array of JPanels and labels
Keypad obj = new Keypad();
JButton[] keyList = new JButton[12];
JLabel[] keyLabel = new JLabel[12];
//Array with the key labels
String[] keyLabelText = {"1","2","3","4","5","6","7","8","9","*","0","#"};
//We need a counter
int i;
//Create the panels
for (i=0; i<12; i++){
keyList[i]= new JButton();
keyList[i].setPreferredSize (new Dimension(100, 75));
keyLabel[i] = new JLabel (keyLabelText[i]);
keyList[i].add (keyLabel[i]);
keyList[i].addActionListener(obj);
}
//Text field that only the buttons can modify
JTextArea displayText = new JTextArea();
displayText.setPreferredSize(new Dimension(320, 20));
//Create the "clear" button
JButton clear = new JButton();
clear.setPreferredSize(new Dimension(300, 40));
JLabel clearLabel = new JLabel ("Clear");
clear.add(clearLabel);
clear.addActionListener(obj);
// Set up primary panel
JPanel primary = new JPanel();
primary.add(displayText);
for (i=0; i<12; i++){
primary.add (keyList[i]);
}
primary.add(clear);
return primary;
}
public void actionPerformed (ActionEvent event){
//Stuff goes here eventually
// use it like this
//if(event.getSource()==whateveryouwanttotest){
//
//}
}
}