не обновляется фрейм командой invalidate()
package GUI;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class MainWindow extends JFrame {
int amt=1;
MainWindow() throws HeadlessException {
// колличество резисторов для расчета по умолчанию
Object[] mass= new Object[]{1,2,3,4,5,6,7,8,9,10};
JPanel panel = new JPanel(new GridLayout(amt, 1, 1, 1));
//todo добавить все jtextfeld d прокручиваемы список как в javaFX
//todo спрашивать у пользователя сколько нужно JTextField
JTextField[] text = new JTextField[amt];
for (int i = 0; i < amt; i++) {
text[i] = new JTextField("",7);
//you can add any listener for JTextField here
panel.add(text[i]);
}
//кнопка вычислить
JButton btn1 = new JButton("Вычислить");
//менюха
JMenuBar menuBar = new JMenuBar();
JMenu file = new JMenu("Файл");
JMenuItem exit = new JMenuItem("Выход");
JMenuItem quantity = new JMenuItem("N резист");
JMenu settings = new JMenu("Настройки");
setJMenuBar(menuBar);
menuBar.add(file);
menuBar.add(settings);
file.add(exit);
settings.add(quantity);
//лейбла
JLabel lbl = new JLabel("Результат");
//add на главную(первый слой пакетов)
add(panel);// contents.add(new JScrollPane(list1)); JList<String> list1 = new JList<String>(data1);
add(btn1);
add(lbl);
//setters
setTitle("Вычисляшка сопротивления из кучи резисторов");
setBounds(200, 200, 500, 300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new FlowLayout());
//actions
btn1.addActionListener(new AbstractAction() {
@Override
//действие по нажатию (выполняется из перезаписанного actionPerformed
public void actionPerformed(ActionEvent e) {
//условие на проверку символов и пустой строки
if (isCorrect()
) {solve();
} else {
lbl.setText("только цифры и точка");
}
}
private void solve() {
Double revSum =0.0;
Double[] r = new Double[amt];
for (int i = 0; i < amt; i++) {
r[i]=Double.parseDouble(text[i].getText());
if (r[i]!=0)revSum = revSum+(1/r[i]);
}
revSum= 1/revSum;
BigDecimal justSum = new BigDecimal(revSum);
justSum.setScale(2, RoundingMode.HALF_UP);
lbl.setText(String.valueOf(justSum.setScale(5, RoundingMode.HALF_UP)));
}
private boolean isCorrect() {
boolean result = true;
for (int i = 0; i < amt; i++) {
result = result&&!text[i].getText().trim().isEmpty() & !(text[i].getText() == null) & (text[i].getText().matches("^[0-9.]*$"));
};
return result;}
});
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
quantity.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// todo вызвать окно и изменить amt
String title = "Число резисторов";
String mesage= "выберите количество резисторов";
amt = (int)JOptionPane.showInputDialog(MainWindow.this,mesage,title, JOptionPane.INFORMATION_MESSAGE, null,mass,mass[0]);
invalidate();
}
});
}
}
хочу чтобы каждый раз выбирая в кнопке quantity фрейм обновлялся и заново перерисовывал массив Jtextfield