Вызовы метода/объекта java gui

Ниже у меня есть два раздела кода. Первый выполняет операцию, которую я хочу от второго. Первый код компилируется и работает правильно, а второй нет. Я новичок в java и думаю, что мне не хватает чего-то основного в том, как вспомнить другую метку объекта или счетчик. Мне нужен метод, который меняет все вещи в состоянии счетчика. Я открыт для реализации всех передовых практик. Я использую построитель окон в eclipse.

package stackoverflowtestgui;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JSpinner;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.SpinnerNumberModel;        

public class TestGUI {

    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TestGUI window = new TestGUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public TestGUI() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JLabel lblTotal = new JLabel("total: "+total);
        lblTotal.setBounds(31, 38, 101, 14);
        frame.getContentPane().add(lblTotal);

        JSpinner spinner_2 = new JSpinner();
        JSpinner spinner_1 = new JSpinner();
        spinner_2.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                num1 = (double) spinner_1.getValue();
                num2 = (double) spinner_2.getValue();
                total = num1+num2;
                lblTotal.setText("total: "+total);
            }
        });
        spinner_2.setModel(new SpinnerNumberModel(new Double(0), null, null, new Double(1)));
        spinner_2.setBounds(31, 73, 30, 20);
        frame.getContentPane().add(spinner_2);


        spinner_1.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                num1 = (double) spinner_1.getValue();
                num2 = (double) spinner_2.getValue();
                total = num1+num2;
                lblTotal.setText("total: "+total);
            }
        });
        spinner_1.setModel(new SpinnerNumberModel(new Double(0), null, null, new Double(1)));
        spinner_1.setBounds(31, 104, 30, 20);
        frame.getContentPane().add(spinner_1);
    }
public double num1=0;
public double num2=0;
public double total=0;
}

Вот пример того, как я код делаю то, что хочу :)

package stackoverflowtestgui;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JSpinner;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;
import javax.swing.SpinnerNumberModel;

public class TestGUI {

    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TestGUI window = new TestGUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public TestGUI() {

        initialize();

    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        lblTotal.setBounds(31, 38, 101, 14);
        frame.getContentPane().add(lblTotal);

        spinner_2.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                newmethod();
            }
        });

        spinner_2.setModel(new SpinnerNumberModel(new Double(0), null, null, new Double(1)));
        spinner_2.setBounds(31, 73, 72, 20);
        frame.getContentPane().add(spinner_2);


        spinner_1.addChangeListener(new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                newmethod();
            }
        });

        spinner_1.setModel(new SpinnerNumberModel(new Double(0), null, null, new Double(1)));
        spinner_1.setBounds(31, 104, 72, 20);
        frame.getContentPane().add(spinner_1);
    }
    protected void newmethod() {
        // TODO Auto-generated method stub
        num1 = (double) spinner_1.getValue();
        num2 = (double) spinner_2.getValue();
        total = num1+num2;
        lblTotal.setText("total: "+total);
    }
public double num1=0;
public double num2=0;
public double total=0;
public JSpinner spinner_2 = new JSpinner();
public JSpinner spinner_1 = new JSpinner();
public JLabel lblTotal = new JLabel("total: ");
}

Добро пожаловать в СО! Уточните, пожалуйста, "второго нет". Каково ожидаемое поведение? Что происходит вместо этого? Что такое сообщения об ошибках, если они есть, и т. д.

no id 01.03.2019 03:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы объявили переменные spinner_1, spinner_2 и lblTotal как локальные переменные в методе initialize(), поэтому они не видны вне этого метода. вместо этого они должны быть закрытыми переменными экземпляра класса.

сделать их общедоступными, как показано ниже, сработало public double num1=0; общественное двойное число2=0; публичный двойной итог=0; общедоступный JSpinner spinner_2 = новый JSpinner(); общедоступный JSpinner spinner_1 = новый JSpinner(); public JLabel lblTotal = new JLabel ("Всего: ");

Johnatcera 28.02.2019 23:17

Делать переменные общедоступными обычно не одобряют, поскольку это позволяет другим классам произвольно изменять любую переменную, что может привести к несогласованному состоянию. Например, window.total=33.2; изменяет общую сумму, но счетчики по-прежнему показывают исходные значения, которые не складываются в общую сумму.

FredK 02.03.2019 20:35

Другие вопросы по теме