не обновляется фрейм командой 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


Ответы (0 шт):