I am writing a graphical calculator in Java and ran into a problem: when I run the calculator, all components of the interface are not displayed, but if I change the window size (literally a little), all components appear. I would like to know how to fix it. enter image description here enter image description here

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.ArrayList; public class Calculator { JFrame frame; long firstValue; long secondValue; long result; String operation; public static void main (String[] args) { Calculator calc = new Calculator(); calc.start(); } public void start() { frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(250, 400); frame.setVisible(true); JTextArea display = new JTextArea(); JButton button0 = new JButton("0"); JButton button1 = new JButton("1"); JButton button2 = new JButton("2"); JButton button3 = new JButton("3"); JButton button4 = new JButton("4"); JButton button5 = new JButton("5"); JButton button6 = new JButton("6"); JButton button7 = new JButton("7"); JButton button8 = new JButton("8"); JButton button9 = new JButton("9"); JButton buttonParen = new JButton("( )"); JButton buttonChange = new JButton("+/-"); JButton buttonRes = new JButton("C"); JButton buttonComma = new JButton("."); JButton buttonBack = new JButton("<-"); JButton buttonSum = new JButton("+"); JButton buttonDif = new JButton("-"); JButton buttonProd = new JButton("*"); JButton buttonDiv = new JButton("/"); JButton buttonTotal = new JButton("="); JPanel panel = new JPanel(); frame.getContentPane().add(BorderLayout.NORTH, display); frame.getContentPane().add(BorderLayout.CENTER, panel); panel.setLayout(new GridLayout(5, 4)); display.setRows(3); panel.add(buttonRes); panel.add(buttonDiv); panel.add(buttonProd); panel.add(buttonBack); // panel.add(button7); panel.add(button8); panel.add(button9); panel.add(buttonDif); // panel.add(button4); panel.add(button5); panel.add(button6); panel.add(buttonSum); // panel.add(button1); panel.add(button2); panel.add(button3); // panel.add(button0); panel.add(buttonComma); panel.add(buttonChange); panel.add(buttonTotal); button0.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(display.getText() + "0"); } }); button1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(display.getText() + "1"); } }); button2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(display.getText() + "2"); } }); button3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(display.getText() + "3"); } }); button4.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(display.getText() + "4"); } }); button5.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(display.getText() + "5"); } }); button6.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(display.getText() + "6"); } }); button7.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(display.getText() + "7"); } }); button8.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(display.getText() + "8"); } }); button9.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(display.getText() + "9"); } }); buttonRes.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { display.setText(""); } }); buttonSum.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { firstValue = Integer.valueOf(display.getText()); display.setText(""); operation = "+"; } }); buttonDif.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { firstValue = Integer.valueOf(display.getText()); display.setText(""); operation = "-"; } }); buttonDiv.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { firstValue = Integer.valueOf(display.getText()); display.setText(""); operation = "/"; } }); buttonProd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { firstValue = Integer.valueOf(display.getText()); display.setText(""); operation = "*"; } }); buttonTotal.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { long secondValue = Integer.valueOf(display.getText()); switch(operation) { case "+": display.setText((firstValue + secondValue)+ ""); break; case "-": display.setText((firstValue - secondValue)+ ""); break; case "/": display.setText((firstValue / secondValue)+ ""); break; case "*": display.setText((firstValue * secondValue)+ ""); break; default: display.setText(""); break; } } }); buttonChange.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { long value = Integer.valueOf(display.getText()); display.setText(-(value)+ ""); } }); buttonBack.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String value = display.getText(); display.setText(value.substring(0, value.length()-1)); } }); } 

}

  • I would like to see the code - Artem Konovalov
  • Added code to description - Arc

1 answer 1

You first draw the main frame, and then add components to it. Because of this, they are not visible. Try calling the frame.setVisible(true); method frame.setVisible(true); after adding all the items.

  • Thanks, helped. - Arc