【问题标题】:About Jcheckbox state, java关于Jcheckbox状态,java
【发布时间】:2014-06-10 03:59:23
【问题描述】:

我正在尝试对单击的按钮执行操作,但我需要检查JCheckBox 是否被选中。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.*;

import javax.swing.*;

public class RandomPassword extends JFrame{
RandomPassword(String s){
    super(s);
    setSize(300,300);
    setVisible(true);
    addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent ev){
            System.exit(0);

        }
    });
    setLayout(null);
    setFont(new Font("Serif", Font.PLAIN, 20));
    Label l1 = new Label("Введите количество символов:");
    l1.setBounds(50, 100, 200, 30);
    add(l1);
    JTextField tf1 = new JTextField(1002);
    tf1.setBounds(50,130,200,30);
    add(tf1);
    JTextArea ta1 = new JTextArea();
    ta1.setPreferredSize(new Dimension(150,30));
    ta1.setBounds(50,210,230,30);
    add(ta1);
    JCheckBox ch1 = new JCheckBox("Использовать заглавные буквы");
    ch1.setBounds(50, 0, 200, 30);
    add(ch1);
    JCheckBox ch2 = new JCheckBox("Использовать цифры");
    ch2.setBounds(50, 30, 200, 30);
    add(ch2);
    JCheckBox ch3 = new JCheckBox("Использовать спецсимволы");
    ch3.setBounds(50, 60, 200, 30);
    add(ch3);
    JButton b1 = new JButton("Сгенерировать");
    b1.setBounds(75, 170, 150, 30);
    add(b1);
    b1.addActionListener(new Action());


}


public static void main(String[] args){
    new RandomPassword("Генератор случайных паролей");


}
static  class Action implements ActionListener{
        public void actionPerformed(ActionEvent e){



        }
}

}

我想在静态类 Action 中创建一个复选框,但他向我扔了一个 exception。我该怎么办?
尝试这个对我没有帮助。

JButton b1 = new JButton(new AbstractAction("Сгенерировать") {

        public void actionPerformed(ActionEvent e) {
            ch1.isSelected();
        }
    }); 

【问题讨论】:

  • 您能说得更具体一点吗?你得到什么样的例外?问题似乎是您创建的那些复选框不在动作侦听器的范围内。尝试使用构造函数的内部类。
  • 是的,我猜是动作监听器范围的问题,你能帮我写一个内部类吗?
  • 我终于明白了,必须在 ch1、ch2 和 ch3 中使用 final。 Ty 寻求有关内部类的帮助
  • 如果这对您有所帮助,请随时接受将这个问题标记为已解决的答案。

标签: java checkbox jcheckbox


【解决方案1】:

您可以通过以下方式访问点击的 JCheckBox:

((JCheckBox)e.getSource())

【讨论】:

  • 这样,动作监听器需要附加到复选框,而不是按钮。
【解决方案2】:

您的程序的结构方式不在actionPerformed 方法的范围内。解决此问题的一种方法是直接在构造函数中使用匿名内部类。

final JCheckBox ch3 = new JCheckBox("Использовать спецсимволы");
...
b1.addActionListener(new  ActionListener(){
    public void actionPerformed(ActionEvent e){
        System.out.println(ch3.isSelected());
    }});

注意,这种方式需要使复选框变量final,这样才能在内部类中访问。然后您可以使用isSelected 方法检查复选框当前是否被选中。

作为一个无关的说明,最好将setVisible(true)的调用放在构造函数的末尾,否则看起来某些GUI元素绘制不正确。

【讨论】:

    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2011-03-07
    相关资源
    最近更新 更多