Reputation: 51
I am trying to make a calculator in Java. After learning about ActionListeners, I tried to add an ActionListener to a button, but after I did this and tried compiling the file, I got an error. My code is as follows.
import javax.swing.*;//import the packages needed for gui
import java.awt.*;
public class Window {
public static void main(String[] args) {
JFrame Window = new JFrame("Window");//makes a JFrame
Window.setSize(300,350);
Window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel Panel = new JPanel (new FlowLayout());//makes the panel, textfield and buttons
JTextField TextField = new JTextField(20);
JButton openbracket = new JButton("(");
JButton closebracket = new JButton(")");
JButton clearbutton = new JButton("C");
JButton arcsin = new JButton("arcsin");
JButton arccos = new JButton("arccos");
JButton arctan = new JButton("arctan");
JButton sin = new JButton("sin");
JButton cos = new JButton("cos");
JButton tan = new JButton("tan");
JButton log = new JButton("log");
JButton seven = new JButton("7");
JButton eight = new JButton("8");
JButton nine = new JButton("9");
JButton four = new JButton("4");
JButton five = new JButton("5");
JButton six = new JButton("6");
JButton one = new JButton("1");
JButton two = new JButton("2");
JButton three = new JButton("3");
JButton zero = new JButton("0");
JButton radixpoint = new JButton(".");
JButton equal = new JButton("=");
String values = null;
public class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
values = values+"3";
TextField.setText(values);
}
Panel.add(TextField);//adding all the things
Window.add(Panel);
Panel.add(openbracket);
Panel.add(closebracket);
Panel.add(clearbutton);
Panel.add(arcsin);
Panel.add(arccos);
Panel.add(arctan);
Panel.add(sin);
Panel.add(cos);
Panel.add(tan);
Panel.add(log);
Panel.add(nine);
Panel.add(eight);
Panel.add(seven);
Panel.add(six);
Panel.add(five);
Panel.add(four);
three.addActionListener(Listener);
Panel.add(three);
Panel.add(two);
Panel.add(one);
Panel.add(zero);
Panel.add(radixpoint);
Panel.add(equal);
Window.setVisible(true);
}
}
The errors I got were:
Window.java:33: illegal start of expression public class Listener implements ActionListener { ^ Window.java:38: expected Panel.add(TextField);//adding all the things ^ Window.java:38: expected Panel.add(TextField);//adding all the things ^ Window.java:39: expected Window.add(Panel); ^ Window.java:39: expected Window.add(Panel); ^ Window.java:40: expected Panel.add(openbracket); ^ Window.java:40: expected Panel.add(openbracket); ^ Window.java:41: expected Panel.add(closebracket); ^ Window.java:41: expected Panel.add(closebracket); ^ Window.java:42: expected Panel.add(clearbutton); ^ Window.java:42: expected Panel.add(clearbutton); ^ Window.java:43: expected Panel.add(arcsin); ^ Window.java:43: expected Panel.add(arcsin); ^ Window.java:44: expected Panel.add(arccos); ^ Window.java:44: expected Panel.add(arccos); ^ Window.java:45: expected Panel.add(arctan); ^ Window.java:45: expected Panel.add(arctan); ^ Window.java:46: expected Panel.add(sin); ^ Window.java:46: expected Panel.add(sin); ^ Window.java:47: expected Panel.add(cos); ^ Window.java:47: expected Panel.add(cos); ^ Window.java:48: expected Panel.add(tan); ^ Window.java:48: expected Panel.add(tan); ^ Window.java:49: expected Panel.add(log); ^ Window.java:49: expected Panel.add(log); ^ Window.java:50: expected Panel.add(nine); ^ Window.java:50: expected Panel.add(nine); ^ Window.java:51: expected Panel.add(eight); ^ Window.java:51: expected Panel.add(eight); ^ Window.java:52: expected Panel.add(seven); ^ Window.java:52: expected Panel.add(seven); ^ Window.java:53: expected Panel.add(six); ^ Window.java:53: expected Panel.add(six); ^ Window.java:54: expected Panel.add(five); ^ Window.java:54: expected Panel.add(five); ^ Window.java:55: expected Panel.add(four); ^ Window.java:55: expected Panel.add(four); ^ Window.java:56: expected three.addActionListener(Listener); ^ Window.java:56: expected three.addActionListener(Listener); ^ Window.java:57: expected Panel.add(three); ^ Window.java:57: expected Panel.add(three); ^ Window.java:58: expected Panel.add(two); ^ Window.java:58: expected Panel.add(two); ^ Window.java:59: expected Panel.add(one); ^ Window.java:59: expected Panel.add(one); ^ Window.java:60: expected Panel.add(zero); ^ Window.java:60: expected Panel.add(zero); ^ Window.java:61: expected Panel.add(radixpoint); ^ Window.java:61: expected Panel.add(radixpoint); ^ Window.java:62: expected Panel.add(equal); ^ Window.java:62: expected Panel.add(equal); ^ Window.java:63: expected Window.setVisible(true); ^ Window.java:63: illegal start of type Window.setVisible(true); ^ Window.java:65: reached end of file while parsing } ^ Why did I get these errors? Please explain why.
Upvotes: 0
Views: 125
Reputation: 285405
You can't declare more than one public class in a java file.
If this were my program, I'd use a private inner class or an anonymous inner class, create an instance and add it to the buttons.
e.g.,
ActionListener numberButtonListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO: put some code here
}
};
// assuming a List<AbstractButton> of the number buttons
for (AbstractButton numberButton : numberButtonList) {
numberButton.addActionListener(numberButtonListener);
}
For your future questions here, you're going to want to improve your code indentation so that it is more easily read and understood.
Also
As per a comment, this code:
public class Window {
public static void main(String[] args) {
JFrame Window = new JFrame("Window");//makes a JFrame
Your class name and the variable name are the same. This is not good and can confuse you and possibly the compiler. Variable names should start with lower case letters as well. Also, you're going to want to get most of that code out of the static main method and into the object-oriented realm where it belongs. You'll want to go through a decent intro to OOP and Java book such as "Thinking in Java". The order of things should be: 1) learn basic Java first, then 2) learn sub-specialized topics in Java such as Swing, or database, or ...
Upvotes: 3