Reputation: 1
Can someone please tell me what's wrong with my code?
I'm trying to make a UI that has bin, dec, so on.. and every time it's clicked only appropriate numbers corresponding the number system can be clicked by the user or is displayed in the textField, like if the user clicks bin only 0 and 1 can be displayed on the textField.
I tried to use nested if else statements but it don't seem to work. Please help thank you.
Here is my code below:
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.*;
import java.awt.*;
import java.awt.FlowLayout;
public class Trial extends JFrame implements ActionListener
{
private JTextField textField;
private JButton n1, n2, n3, n4, n5, n6, n7, n8, n9, n0, add, subtract, multiply, divide, clear, backspace, bin, dec, oct, hex;
private JPanel panel, panel1, p;
public Trial(String str)
{
super(str);
setSize(300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(5, 4));
panel.add(n1 = new JButton("1"));
panel.add(n2 = new JButton("2"));
panel.add(n3 = new JButton("3"));
panel.add(backspace = new JButton("C"));
panel.add(n4 = new JButton("4"));
panel.add(n5 = new JButton("5"));
panel.add(n6 = new JButton("6"));
panel.add(bin = new JButton("BIN"));
panel.add(n7 = new JButton("7"));
panel.add(n8 = new JButton("8"));
panel.add(n9 = new JButton("9"));
panel.add(dec = new JButton("DEC"));
panel.add(add = new JButton("+"));
panel.add(n0 = new JButton("0"));
panel.add(subtract = new JButton("-"));
panel.add(oct = new JButton("OCT"));
panel.add(multiply = new JButton("*"));
panel.add(clear = new JButton("AC"));
panel.add(divide = new JButton("/"));
panel.add(hex = new JButton("HEX"));
JPanel panel1 = new JPanel();
panel1.setLayout(new FlowLayout());
panel1.add(textField = new JTextField(20));
panel.setBounds(20,20,300,150);
panel1.setBounds(0,0,300,20);
add(panel, BorderLayout.SOUTH);
add(panel1, BorderLayout.NORTH);
n1.addActionListener(this);
n2.addActionListener(this);
n3.addActionListener(this);
n4.addActionListener(this);
n5.addActionListener(this);
n6.addActionListener(this);
n7.addActionListener(this);
n8.addActionListener(this);
n9.addActionListener(this);
n0.addActionListener(this);
add.addActionListener(this);
subtract.addActionListener(this);
multiply.addActionListener(this);
divide.addActionListener(this);
clear.addActionListener(this);
backspace.addActionListener(this);
bin.addActionListener(this);
dec.addActionListener(this);
oct.addActionListener(this);
hex.addActionListener(this);
setVisible(true);
}
public void actionPerformed(ActionEvent event)
{
if(event.getSource() == bin){
if(event.getSource() == n1){
textField.setText(textField.getText() + "1");
}
else if(event.getSource() == n0){
textField.setText(textField.getText() + "0");
}
else if(event.getSource() == add){
textField.setText(textField.getText() + " + ");
}
else if(event.getSource() == subtract){
textField.setText(textField.getText() + " - ");
}
else if(event.getSource() == multiply){
textField.setText(textField.getText() + " * ");
}
else if(event.getSource() == divide){
textField.setText(textField.getText() + " / ");
}
else if(event.getSource() == clear){
textField.setText("");
}
else{
textField.setText("");
}
}
else if(event.getSource() == dec){
if(event.getSource() == n1){
textField.setText(textField.getText() + "1");
}
else if(event.getSource() == n2){
textField.setText(textField.getText() + "2");
}
else if(event.getSource() == n3){
textField.setText(textField.getText() + "3");
}
else if(event.getSource() == n4){
textField.setText(textField.getText() + "4");
}
else if(event.getSource() == n5){
textField.setText(textField.getText() + "5");
}
else if(event.getSource() == n6){
textField.setText(textField.getText() + "6");
}
else if(event.getSource() == n7){
textField.setText(textField.getText() + "7");
}
else if(event.getSource() == n8){
textField.setText(textField.getText() + "8");
}
else if(event.getSource() == n9){
textField.setText(textField.getText() + "9");
}
else if(event.getSource() == n0){
textField.setText(textField.getText() + "0");
}
else if(event.getSource() == add){
textField.setText(textField.getText() + " + ");
}
else if(event.getSource() == subtract){
textField.setText(textField.getText() + " - ");
}
else if(event.getSource() == multiply){
textField.setText(textField.getText() + " * ");
}
else if(event.getSource() == divide){
textField.setText(textField.getText() + " / ");
}
else if(event.getSource() == clear){
textField.setText("");
}
}
}
public static void main(String [] args)
{
new Trial("Le Frame");
}
}
The problem of the above code is it does not display any character at all in the textfield.
Here below is a snippet of the program: ![1]: (https://i.sstatic.net/R2Len.png)
Upvotes: 0
Views: 512
Reputation: 11327
So, you need a separate variable to hold the current view type (binary/octal/decimal/hexal)
In your code it should looks like:
private static final int BINARY = 2; // probably use enum
private static final int OCTAL = 8; // probably use enum
private static final int DECIMAL = 10; // probably use enum
private JTextField textField;
private JButton n1, n2, n3, n4, n5, n6, n7, n8, n9, n0, add, subtract, multiply, divide, clear, backspace, bin, dec, oct, hex;
private JPanel panel, panel1, p;
private int system = DECIMAL;
// initialization code
public void actionPerformed(ActionEvent event)
{
if(event.getSource() == bin){
system = BINARY;
} else if (event.getSource() == dec) {
system = DECIMAL;
} // same for other systems.
if (system == BINARY) {
if(event.getSource() == n1){
textField.setText(textField.getText() + "1");
}
else if(event.getSource() == n0){
textField.setText(textField.getText() + "0");
}
else if(event.getSource() == add){
textField.setText(textField.getText() + " + ");
}
else if(event.getSource() == subtract){
textField.setText(textField.getText() + " - ");
}
else if(event.getSource() == multiply){
textField.setText(textField.getText() + " * ");
}
else if(event.getSource() == divide){
textField.setText(textField.getText() + " / ");
}
else if(event.getSource() == clear){
textField.setText("");
}
} else if (system == DECIMAL) {
if(event.getSource() == n1){
textField.setText(textField.getText() + "1");
}
else if(event.getSource() == n2){
textField.setText(textField.getText() + "2");
}
else if(event.getSource() == n3){
textField.setText(textField.getText() + "3");
}
else if(event.getSource() == n4){
textField.setText(textField.getText() + "4");
}
else if(event.getSource() == n5){
textField.setText(textField.getText() + "5");
}
else if(event.getSource() == n6){
textField.setText(textField.getText() + "6");
}
else if(event.getSource() == n7){
textField.setText(textField.getText() + "7");
}
else if(event.getSource() == n8){
textField.setText(textField.getText() + "8");
}
else if(event.getSource() == n9){
textField.setText(textField.getText() + "9");
}
else if(event.getSource() == n0){
textField.setText(textField.getText() + "0");
}
else if(event.getSource() == add){
textField.setText(textField.getText() + " + ");
}
else if(event.getSource() == subtract){
textField.setText(textField.getText() + " - ");
}
else if(event.getSource() == multiply){
textField.setText(textField.getText() + " * ");
}
else if(event.getSource() == divide){
textField.setText(textField.getText() + " / ");
}
else if(event.getSource() == clear){
textField.setText("");
}
} // same for other systems
}
Please note: it's better to provide separate handler for any button. For example you can do it using lambdas. In this case you don't need a huge if-else-if blocks
Upvotes: 0
Reputation: 336
When event.getSource() == bin
is true, none of the nested if statements can be true:
if(event.getSource() == n1){
Also this if will always be true because the assignment statement
pass = 1; if(pass == 1){
Upvotes: 1
Reputation: 690
Try repainting or revalidating after updating:
textField.repaint();
Or possibly:
textField.revalidate();
Check out: https://docs.oracle.com/javase/tutorial/uiswing/painting/problems.html
Upvotes: 0