1

I'm trying to create a simple GUI which takes two values and either subtracts/adds/divides dependant on which button the user selects. I'm comfortable with my code, but for some reason when I run my program, I'm not getting any visible frame, and I am also not getting any errors.

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Calc {

private JFrame frame;
private JTextField firstNumber;
private JTextField secondNumber;
private JTextField textField_2;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Calc window = new Calc();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public Calc() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setTitle("Simple Calculator");
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    firstNumber = new JTextField();
    firstNumber.setBounds(28, 41, 156, 26);
    frame.getContentPane().add(firstNumber);
    firstNumber.setColumns(10);

    secondNumber = new JTextField();
    secondNumber.setBounds(28, 145, 156, 26);
    frame.getContentPane().add(secondNumber);
    secondNumber.setColumns(10);

    JLabel lblNewLabel = new JLabel("First Number");
    lblNewLabel.setBounds(28, 27, 110, 16);
    frame.getContentPane().add(lblNewLabel);

    JLabel lblNewLabel_1 = new JLabel("Second Number");
    lblNewLabel_1.setBounds(28, 131, 110, 16);
    frame.getContentPane().add(lblNewLabel_1);

    JLabel answerLabel = new JLabel("ANSWER:");
    answerLabel.setFont(new Font("Lucida Grande", Font.PLAIN, 20));
    answerLabel.setBounds(216, 46, 190, 16);
    frame.getContentPane().add(answerLabel);

    JButton plusButton = new JButton("Add");
    plusButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try{
                int number1 = Integer.parseInt(firstNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad first number.");
                return;
            }
            try{
                int number2 = Integer.parseInt(secondNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad second number.");
                return;
            }
            int number1 = 0, number2 = 0;
            int answer = number1 + number2;
            answerLabel.setText("The answer is: "+answer);
        }
    });
    plusButton.setToolTipText("Adds first from second number");
    plusButton.setBounds(28, 183, 117, 29);
    frame.getContentPane().add(plusButton);

    JButton subtractButton = new JButton("Subtract");
    subtractButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try{
                int number1 = Integer.parseInt(firstNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad first number.");
                return;
            }
            try{
                int number2 = Integer.parseInt(secondNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad second number.");
                return;
            }
            int number1 = 0, number2 = 0;
            int answer = number1 - number2;
            answerLabel.setText("The answer is: "+answer);
        }
    });
    subtractButton.setToolTipText("Subtracts first from second number");
    subtractButton.setBounds(157, 183, 117, 29);
    frame.getContentPane().add(subtractButton);

    JButton divideButton = new JButton("Divide");
    divideButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try{
                int number1 = Integer.parseInt(firstNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad first number.");
                return;
            }
            try{
                int number2 = Integer.parseInt(secondNumber.getText());
            }
            catch (Exception exc){
                JOptionPane.showMessageDialog(frame,"Error: bad second number.");
                return;
            }
            int number1 = 0, number2 = 0;
            int answer = number1 / number2;
            answerLabel.setText("The answer is: "+answer);
        }
    });
    divideButton.setToolTipText("Divides first from second number");
    divideButton.setBounds(289, 183, 117, 29);
    frame.getContentPane().add(divideButton);

    textField_2 = new JTextField();
    textField_2.setBounds(216, 94, 130, 26);
    frame.getContentPane().add(textField_2);
    textField_2.setColumns(10);
}
}
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
  • 1) Java GUIs have to work on different OS', screen size, screen resolution etc. using different PLAFs in different locales. As such, they are not conducive to pixel perfect layout. Instead use layout managers, or [combinations of them](http://stackoverflow.com/a/5630271/418556) along with layout padding and borders for [white space](http://stackoverflow.com/a/17874718/418556). 2) It runs fine in NetBeans (which is interesting ***only*** in that it supports that this is an IDE problem, as you obviously suspect.) – Andrew Thompson Oct 15 '17 at 02:22
  • BTW - See also this [calculator example](http://stackoverflow.com/a/7441804/418556). It uses `ScriptEngine` to evaluate the expression in the text field. – Andrew Thompson Oct 15 '17 at 02:23

1 Answers1

1

Ah! this is an issue I've experienced earlier. This tip solved the issue. Here's How to do it.

Make sure that you've built it. Or you can enable Project --> Build Automatically.

After the above option is set, try cleaning the workspace. Project --> Clean and clean all the projects you've imported.

Now restart eclipse and you can launch your program.

ps: if it not work please send picture of eclipse with console so we could see logs and picture of running configration.

Tzach Oren
  • 44
  • 11
  • This is so uncanny - I just did a clean on my little GUI project and now it won't launch the GUI anymore. If I build a jar and run it - then its fine... Getting pretty tired of Eclipse life... – slott Dec 11 '19 at 19:54