Вы хотите, чтобы числа входили в одну строку, если они 0-9, верно? Это сделает это. Вместо создания 10 объектов JButton создайте один массив из него и инициализируйте их с помощью цикла, а затем добавьте к ним actionlistener.
private JButton[] buttons;
buttons = new JButton[10];
for(int i = 0; i < buttons.length; i++) {
// Make all the buttons and add them to the panel
panel1.add(buttons[i] = new JButton(String.valueOf(i)));
// Add an actionlistener to each of them
buttons[i].addActionListener(this);
}
А вот как вы используете интерфейс actionListener для этих кнопок (сначала убедитесь, что он реализован в вашем классе CalculatorFrame):
@Override
public void actionPerformed(ActionEvent e) {
for(int i = 0; i < buttons.length; i++) {
// Check if the button pressed was a button0 - button 9
if(e.getSource() == buttons[i]) {
// whichever button (0-9) was pressed, append its result into display string
display += String.valueOf(i);
}
}
// Now set the result into your text area
textArea.setText(display);
}
Теперь каждый раз, когда нажимается кнопка, она будет в той же строке, а не в новой, потому что вы напрямую не изменяете значение textArea, а вместо этого вы помещаете в него строку, которая добавляется каждый раз. Вы нажимаете кнопку.
Итак, изначально значение переменной дисплея - ничто. Когда вы нажимаете 1, он становится единым и отображается в текстовой области. Теперь, когда вы нажимаете 2, значение дисплея становится display = display + "2". На этот раз, когда вы передаете переменную отображения в textArea, она не просто теряет значение, потому что она не редактируется напрямую.
Вы можете использовать эту логику, чтобы исправить другие ваши методы. Кроме того, поскольку все значения являются строками, для выполнения вычислений вам необходимо преобразовать строку в целое число. Вы можете использовать Integer.valueOf (дисплей) в этом случае.
Надеюсь, это поможет.