Сброс счетчика не работает в Java - PullRequest
0 голосов
/ 03 мая 2018

В моей программе есть два JButton с именем Start и Reset to 0 и один JTextField и один JLabel. Когда я нажимаю Start JButton количество раз, оно показывает результат в JTextField.

Если число отсчетов равно 1, оно показывает сообщение Start in JLabel, а когда число больше 1, оно показывает Reset to 0 in JLabel. Но проблема в том, что когда я нажимаю Reset to 0 JButton, он сбрасывается до 1, но не отображается сообщение Reset to 0 in JLabel?

Программа здесь:

import java.awt.EventQueue;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import com.alee.laf.rootpane.WebFrame;
import java.awt.Font;
import javax.swing.SwingConstants;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JLabel;

public class Search {

    private WebFrame frame;
    private JTextField textField;
    private JButton btnResetTo;
    private JButton btnNewButton;
    private int count;
    private JLabel lblNewLabel;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Search window = new Search();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

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

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new WebFrame();
        frame.setBounds(100, 100, 296, 374);
        frame.setDefaultCloseOperation(WebFrame.EXIT_ON_CLOSE);

        btnNewButton = new JButton("Start");
        btnNewButton.addMouseListener(new MouseAdapter() {
            private int Qnty;
            @Override
            public void mouseClicked(MouseEvent e) {
                count=e.getClickCount();
                textField.setText(Integer.toString(count));
                Qnty=Qnty+count;
                if(Qnty==1)
                    lblNewLabel.setText("Start");
                else if(Qnty>1)
                {
                    lblNewLabel.setText("Reset");
                }
            }
        });

        textField = new JTextField();
        textField.setFont(new Font("Tahoma", Font.BOLD, 40));
        textField.setHorizontalAlignment(SwingConstants.CENTER);
        textField.setColumns(10);

        btnResetTo = new JButton("Reset to 0");
        btnResetTo.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                count=e.getClickCount();
                count=0;
            }
        });

        lblNewLabel = new JLabel("");
        lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
        lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 15));

        GroupLayout groupLayout = new GroupLayout(frame.getContentPane());
        groupLayout.setHorizontalGroup(
            groupLayout.createParallelGroup(Alignment.LEADING)
                .addGroup(Alignment.TRAILING, groupLayout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
                        .addComponent(lblNewLabel, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE)
                        .addGroup(Alignment.LEADING, groupLayout.createSequentialGroup()
                            .addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 88, GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(ComponentPlacement.RELATED, 36, Short.MAX_VALUE)
                            .addComponent(btnResetTo, GroupLayout.PREFERRED_SIZE, 136, GroupLayout.PREFERRED_SIZE))
                        .addComponent(textField, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE))
                    .addContainerGap())
        );
        groupLayout.setVerticalGroup(
            groupLayout.createParallelGroup(Alignment.LEADING)
                .addGroup(groupLayout.createSequentialGroup()
                    .addGap(25)
                    .addGroup(groupLayout.createParallelGroup(Alignment.LEADING, false)
                        .addComponent(btnResetTo, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(btnNewButton, GroupLayout.DEFAULT_SIZE, 87, Short.MAX_VALUE))
                    .addPreferredGap(ComponentPlacement.RELATED)
                    .addComponent(textField, GroupLayout.PREFERRED_SIZE, 69, GroupLayout.PREFERRED_SIZE)
                    .addGap(31)
                    .addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 45, GroupLayout.PREFERRED_SIZE)
                    .addGap(73))
        );

        frame.getContentPane().setLayout(groupLayout);
    }
}

1 Ответ

0 голосов
/ 03 мая 2018
  1. Используйте ActionListener вместо MouseListener на кнопках - кнопки можно активировать несколькими способами, а не просто нажимая на них. См. Как использовать кнопки, флажки и радиокнопки и Как написать слушатель действия для получения более подробной информации
  2. Когда вызывается сброс, вам действительно нужно изменить компоненты, как вы это сделали с btnNew - переменные магически не связаны с компонентами

Может быть, как

btnResetTo = new JButton("Reset to 0");
btnResetTo.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        count = 0;
        textField.setText(Integer.toString(count));
        lblNewLabel.setText("Start");
    }
});
...