Это происходит потому, что в предыдущей версии кода мы создали все поля ввода сразу и просто разместили их на экране. Компьютер не «догадывается» сам, что для первой формулы нужны только X и Y, а для второй — другие переменные. Ему нужно **явно написать инструкцию**: «Если выбрана кнопка 1 — скрой лишние поля, покажи нужные».

В Java Swing (библиотеке, которую вы изучаете) это делается через **слушателей событий** (`ActionListener`).

Вот **исправленный и улучшенный код**.

### Что изменилось:
1.  Я разделил поля ввода на две разные панели: `panelFormula1` (для X, Y) и `panelFormula2` (для N, R, a, b, c).
2.  Использовал менеджер компоновки `CardLayout`. Это как колода карт: в одном месте лежат две панели, но в любой момент времени видна только одна из них (верхняя).
3.  Добавил обработчик событий `ActionListener` на радио-кнопки. При клике он «перелистывает» карту на нужную панель.

### Полный код (Lab8Variant4.java)

```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Lab8Variant4 extends JFrame {

    // Элементы интерфейса объявляем классом выше, чтобы видеть их во всех методах
    private JRadioButton radioFormula1, radioFormula2;
    private JTextField txtX, txtY; // Поля для формулы 1
    private JTextField txtN, txtR, txtA, txtB, txtC; // Поля для формулы 2
    private JLabel lblResult;
    private JButton btnCalculate;
    
    // Панели и Layout для переключения
    private JPanel mainInputPanel;
    private CardLayout cardLayout;

    public Lab8Variant4() {
        // Настройка главного окна
        setTitle("Лабораторная работа №8 - Вариант 4");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 400);
        setLocationRelativeTo(null); 
        
        setLayout(new BorderLayout());

        // --- 1. ВЕРХНЯЯ ПАНЕЛЬ (ВЫБОР) ---
        JPanel panelNorth = new JPanel();
        panelNorth.setBorder(BorderFactory.createTitledBorder("Выберите формулу"));
        
        radioFormula1 = new JRadioButton("Формула 1 (ряд)");
        radioFormula2 = new JRadioButton("Формула 2 (сумма)");
        
        ButtonGroup group = new ButtonGroup();
        group.add(radioFormula1);
        group.add(radioFormula2);
        radioFormula1.setSelected(true); // По умолчанию первая

        panelNorth.add(radioFormula1);
        panelNorth.add(radioFormula2);
        add(panelNorth, BorderLayout.NORTH);

        // --- 2. ЦЕНТРАЛЬНАЯ ПАНЕЛЬ (ПОЛЯ ВВОДА) ---
        // Используем CardLayout для смены "экранов" ввода
        cardLayout = new CardLayout();
        mainInputPanel = new JPanel(cardLayout);
        mainInputPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

        // -- Экран 1: Поля для формулы 1 (X, Y) --
        JPanel panelF1 = new JPanel(new GridLayout(3, 2, 10, 10));
        txtX = new JTextField("0");
        txtY = new JTextField("0");
        panelF1.add(new JLabel("X:")); panelF1.add(txtX);
        panelF1.add(new JLabel("Y:")); panelF1.add(txtY);
        // Заполняем пустотой, чтобы было красиво, или оставляем как есть
        panelF1.add(new JLabel("")); panelF1.add(new JLabel("")); 

        // -- Экран 2: Поля для формулы 2 (N, R, a, b, c) --
        JPanel panelF2 = new JPanel(new GridLayout(5, 2, 10, 10));
        txtN = new JTextField("0");
        txtR = new JTextField("0");
        txtA = new JTextField("0");
        txtB = new JTextField("0");
        txtC = new JTextField("1");
        
        panelF2.add(new JLabel("N (целое):")); panelF2.add(txtN);
        panelF2.add(new JLabel("R (целое):")); panelF2.add(txtR);
        panelF2.add(new JLabel("a:")); panelF2.add(txtA);
        panelF2.add(new JLabel("b:")); panelF2.add(txtB);
        panelF2.add(new JLabel("c (не 0):")); panelF2.add(txtC);

        // Добавляем обе панели в "колоду" (mainInputPanel)
        mainInputPanel.add(panelF1, "Formula1");
        mainInputPanel.add(panelF2, "Formula2");

        add(mainInputPanel, BorderLayout.CENTER);

        // --- 3. НИЖНЯЯ ПАНЕЛЬ (КНОПКА И РЕЗУЛЬТАТ) ---
        JPanel panelSouth = new JPanel(new GridLayout(2, 1));
        btnCalculate = new JButton("Считать");
        lblResult = new JLabel("Результат Z: ", SwingConstants.CENTER);
        lblResult.setFont(new Font("Arial", Font.BOLD, 14));
        
        panelSouth.add(btnCalculate);
        panelSouth.add(lblResult);
        add(panelSouth, BorderLayout.SOUTH);

        // --- ЛОГИКА И СОБЫТИЯ ---

        // Обработчик переключения радио-кнопок
        ActionListener radioListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (radioFormula1.isSelected()) {
                    // Показать панель с именем "Formula1"
                    cardLayout.show(mainInputPanel, "Formula1");
                } else {
                    // Показать панель с именем "Formula2"
                    cardLayout.show(mainInputPanel, "Formula2");
                }
            }
        };

        // Назначаем этот обработчик кнопкам
        radioFormula1.addActionListener(radioListener);
        radioFormula2.addActionListener(radioListener);

        // Обработчик кнопки "Считать"
        btnCalculate.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                calculate();
            }
        });
    }

    private void calculate() {
        try {
            double z = 0;

            if (radioFormula1.isSelected()) {
                // --- СЧИТАЕМ ПО ФОРМУЛЕ 1 ---
                double x = Double.parseDouble(txtX.getText());
                double y = Double.parseDouble(txtY.getText());

                z = (y / 2.0) 
                  + (Math.pow(y, 2) / 6.0) 
                  - (Math.pow(x, 3) / 24.0) 
                  + (Math.pow(y, 4) / 120.0);
                
            } else {
                // --- СЧИТАЕМ ПО ФОРМУЛЕ 2 ---
                int n = Integer.parseInt(txtN.getText());
                int r = Integer.parseInt(txtR.getText());
                double a = Double.parseDouble(txtA.getText());
                double b = Double.parseDouble(txtB.getText());
                double c = Double.parseDouble(txtC.getText());

                if (c == 0) {
                    JOptionPane.showMessageDialog(this, "Параметр 'c' не может быть 0", "Ошибка", JOptionPane.ERROR_MESSAGE);
                    return;
                }

                for (int i = 1; i <= n; i++) {
                    for (int j = 1; j <= r; j++) {
                        double numerator = a * i + b * j;
                        double denominator = c * Math.pow(i, j);
                        z += numerator / denominator;
                    }
                }
            }
            lblResult.setText(String.format("Результат Z: %.4f", z));

        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(this, "Проверьте корректность введенных чисел!", "Ошибка ввода", JOptionPane.ERROR_MESSAGE);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Lab8Variant4().setVisible(true));
    }
}
```