【问题标题】:How can i disable jbutton when pressed 10 times按下10次时如何禁用jbutton
【发布时间】:2018-10-21 21:01:08
【问题描述】:

我需要一些关于 Java GUI 的帮助。我想从 JTextField 向内存中添加 10 个数字。当它完成时,JButton 必须被禁用并且程序必须向我显示一个消息对话框。我怎样才能做到这一点?

import java.awt.BorderLayout;
import java.awt.EventQueue;

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

public class Uygulama extends JFrame {
    private JPanel contentPane;
    private JTextField textField;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Uygulama frame = new Uygulama();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    public Uygulama() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 233, 140);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        textField = new JTextField();
        textField.setBounds(48, 13, 116, 22);
        contentPane.add(textField);
        textField.setColumns(10);
        JButton btnHesapla = new JButton("HESAPLA");
        btnHesapla.addActionListener(new ActionListener() {int counter = 0; 
        public void actionPerformed(ActionEvent arg0) {
            while(counter < 9) {
                counter++;
                if(counter == 10) {
                    buton.setEnabled(false);}
            }
        });
        btnHesapla.setBounds(58, 48, 97, 25);
        contentPane.add(btnHesapla);
    }
}

【问题讨论】:

    标签: java user-interface jframe jbutton jtextfield


    【解决方案1】:

    如果使用 Swing,则将 ActionListener 添加到您的 JButton,在其中,您将增加一个全局变量。然后您询问变量是否为== 10,如果您不使用if,则执行yourButton.setEnabled(false)yourButton.setEnabled(counter &lt; 10)。您已经设置了侦听器,因此只需添加一个您将在其中递增的变量并调用按钮的 setEnabled

    这是一个工作示例,其中 ArrayList 用于存储数字。这里不需要使用全局计数变量,因为ArrayList 的大小已经告诉我们我们存储了多少数字:-)

    public class NumbersApplication extends JFrame {
    
        private JPanel contentPane;
        private JTextField textField;
        private List<Integer> numbers;
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        NumbersApplication frame = new NumbersApplication();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    
        public NumbersApplication() {
            numbers = new ArrayList<>();
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 233, 140);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(contentPane);
            contentPane.setLayout(null);
            textField = new JTextField();
            textField.setBounds(48, 13, 116, 22);
            contentPane.add(textField);
            textField.setColumns(10);
            JButton btnHesapla = new JButton("HESAPLA");
            btnHesapla.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    int number = Integer.parseInt(textField.getText());
                    numbers.add(number);
                    btnHesapla.setEnabled(numbers.size() < 10);
                    System.out.println(number + " has been added to memory.");
                    if (numbers.size() == 10) {
                        System.out.println("Your numbers are: " + numbers);
                    }
                }
            });
            btnHesapla.setBounds(58, 48, 97, 25);
            contentPane.add(btnHesapla);
        }
    }
    

    【讨论】:

    • 我得到了启用/禁用的东西。但是如何在不向用户显示的情况下将这 10 个数字保存在内存中?
    • 哦,抱歉,您的意思是保存用户输入的 10 个数字。为此,您需要ArrayList。将其初始化为List&lt;Integer&gt; numbers = new ArrayList&lt;&gt;() 之类的全局变量,然后在您的侦听器中将字段中的数字添加到其中。
    • 我无法设置按钮禁用。我编辑了代码,你可以看看吗?
    • 完成。我添加了一个工作示例。我强烈建议您先花时间重新阅读一些基础知识,然后再深入研究 Swing :-)
    猜你喜欢
    • 2016-09-05
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    相关资源
    最近更新 更多