Java复选框可选,但isSelected()返回false

Java复选框可选,但isSelected()返回false,java,swing,checkbox,Java,Swing,Checkbox,所以我已经寻找了几个小时的解决方案,但我就是找不到我的错误。 我使用循环创建了jcheckbox,并将其添加到滚动面板中。但是如果我检查它们,isSelected()总是返回false import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.SQLException;

所以我已经寻找了几个小时的解决方案,但我就是找不到我的错误。 我使用循环创建了jcheckbox,并将其添加到滚动面板中。但是如果我检查它们,isSelected()总是返回false

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Conn_Fak_GUI extends JFrame{
public static ArrayList<String> fields;
public Conn_Fak cf;
public ArrayList <JCheckBox> cb;

public Conn_Fak_GUI()
{
    this.setTitle("AMAG - Schnittstelle");
    this.setSize(500, 500);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLayout(null);


    JLabel db_fak = new JLabel("Pfad zur Amicron - Datenbank: ");
    db_fak.setBounds(10,10,200,20);
    this.add(db_fak);

    JTextArea input_db_fak = new JTextArea();
    input_db_fak.setBounds(10,30,300,20);
    this.add(input_db_fak);

    JLabel usernameinfo = new JLabel("Benutzername:");
    usernameinfo.setBounds(10,60,100,20);
    this.add(usernameinfo);

    JTextField username = new JTextField();
    username.setBounds(110,60,100,20);
    this.add(username);

    JLabel passwordinfo = new JLabel("Passwort:");
    passwordinfo.setBounds(10,80,100,20);
    this.add(passwordinfo);

    JTextField password = new JTextField();
    password.setBounds(110,80,100,20);
    this.add(password);


    JButton connect = new JButton("Verbinden");
    connect.setBounds(350,80,100,20);
    connect.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e)
        {

            try {
                cf = new 
  Conn_Fak(input_db_fak.getText(),username.getText(),password.getText());
            } catch (ClassNotFoundException | SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            try {
                fields= cf.getFields();
                displayFields(); 
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            displayFields();
        }
    });


    JButton export = new JButton("Exportieren");
    export.setBounds(350,360,100,20);
    export.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e)
        {
            System.out.println(cb.get(1).isSelected());
            ExportData ed = new ExportData(fields,cf,cb);
            try {
                ed.exportToFile();
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    });
    this.add(export);
    this.add(connect);

    //FileChooser
    JLabel ofile = new JLabel("Zieldatei: ");
    ofile.setBounds(10,340,200,20);
    this.add(ofile);

    JTextArea input_ofile = new JTextArea();
    input_ofile.setBounds(10,360,300,20);
    this.add(input_ofile);

    this.setVisible(true);
}
public void displayFields()
{
    JCheckBox jb;
    cb = new ArrayList<JCheckBox>();


    for(int i = 0; i < fields.size(); i++)
    {
        jb = new JCheckBox();
        jb.setText(fields.get(i));
        cb.add(jb);
    }




    JPanel contentPane = new JPanel();
    JPanel listOfFiles = new JPanel();
    listOfFiles.setLayout(new BoxLayout(listOfFiles, BoxLayout.Y_AXIS));


    for(int i = 0; i < cb.size(); i++){
        listOfFiles.add(cb.get(i));
    }

    JScrollPane jScrollPane = new JScrollPane(listOfFiles);





    jScrollPane.setVerticalScrollBarPolicy
    (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    jScrollPane.setPreferredSize(new Dimension (300, 200));
    contentPane.setBounds(10,120,300,200);
    contentPane.add(jScrollPane);

    this.add(contentPane);
    this.revalidate();
    this.repaint();

}


}

import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JCheckBox;

public class ExportData {
ArrayList <String> activatedFields;
ArrayList <String> fields;
ArrayList <JCheckBox> cb;
Conn_Fak cf;

public ExportData(ArrayList<String> fields, Conn_Fak cf,ArrayList<JCheckBox> 
cb){
    super();
    this.fields = fields;
    this.cf = cf;
    this.cb = cb;
}

public void exportToFile() throws SQLException{
    System.out.println(cb.size());
    if(!cb.get(1).isSelected()){
        System.out.println(cb.get(1));
    }


    for(int i = 0; i < cb.size(); i++){
        if(cb.get(i).isSelected()){
            System.out.println(cb.get(i).getText());
            activatedFields.add(cb.get(i).getText());
        }

    }
    for(int j = 0; j < activatedFields.size();j++){
        System.out.println("+"+activatedFields.get(j));
    }
    cf.getData(activatedFields);


    }


}
导入java.awt.Dimension;
导入java.awt.FlowLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.sql.SQLException;
导入java.util.ArrayList;
导入java.util.Collection;
导入javax.swing.Box;
导入javax.swing.BoxLayout;
导入javax.swing.JButton;
导入javax.swing.JCheckBox;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
导入javax.swing.JTextField;
公共类Conn_Fak_GUI扩展JFrame{
公共静态数组列表字段;
公共康乐及文化事务署;
公共阵列列表cb;
公共交通局
{
本文件为setTitle(“AMAG-Schnittstelle”);
这个。设置大小(500500);
此.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
此.setLayout(null);
JLabel db_fak=新JLabel(“Pfad zur Amicron-Datenbank:”);
德布法克立根(10,10200,20);
添加(db_fak);
JTextArea input_db_fak=新的JTextArea();
输入整根立根(10,30300,20);
添加(输入\u db\u fak);
JLabel usernameinfo=新的JLabel(“Benutzername:”);
usernameinfounds(10,60100,20),;
this.add(usernameinfo);
JTextField username=新的JTextField();
用户名.setBounds(110,60100,20);
添加(用户名);
JLabel passwordinfo=新JLabel(“Passwort:”);
passwordinfo.setBounds(10,80100,20);
这个.add(passwordinfo);
JTextField password=新的JTextField();
密码.setBounds(110,80100,20);
添加(密码);
JButton connect=新JButton(“Verbinden”);
连接立根(350,80100,20);
connect.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e)
{
试一试{
cf=新
Conn_Fak(input_db_Fak.getText()、username.getText()、password.getText());
}catch(ClassNotFoundException | SQLException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
试一试{
fields=cf.getFields();
显示字段();
}捕获(SQLException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
显示字段();
}
});
JButton export=新JButton(“Exportieren”);
出口.挫折(350360100,20);
export.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e)
{
System.out.println(cb.get(1.isSelected());
ExportData ed=新的ExportData(字段、cf、cb);
试一试{
ed.exportToFile();
}捕获(SQLException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
}
});
添加(出口);
这个。添加(连接);
//文件选择器
jlabelofile=新的JLabel(“Zieldatei:”);
立根数(10340200,20);
添加(ofile);
JTextArea输入文件=新的JTextArea();
文件立根的输入(10360300,20);
添加(文件的输入);
此.setVisible(true);
}
公共void显示字段()
{
JCheckBox-jb;
cb=新的ArrayList();
对于(int i=0;i

我希望你能帮助我。如果您需要更多代码,我将发布。

您的问题不清楚,因为您的代码不完整

但是我硬编码了ArrayList并创建了一些复选框。我做了很小的改变,这对我来说很有用

请参阅以下代码部分:

for(int i = 0; i < fields.size(); i++)
{
    final String s = fields.get(i);
    final JCheckBox jb = new JCheckBox(s);        

    jb.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if(jb.isSelected())
                JOptionPane.showMessageDialog(getParent(), s +"Selected");

        }
    });
    cb.add(jb);
}
for(int i=0;i
工作屏幕截图:


您的问题不清楚,因为您的代码不完整

但是我硬编码了ArrayList并创建了一些复选框。我做了很小的改变,这对我来说很有用

请参考