首页 > 解决方案 > 如何获取 ArrayList 中许多 JCheckBoxMenuItem 的状态?

问题描述

我正在开发一个程序,让我可以通过 GUI 搜索教师和学生。

因此,您可能都知道在网站上搜索某些内容以过滤某些信息而不是所有信息时的选项。为了实现这一点,我创建了一个JMenuBar和它对应JMenu的多个JCheckBoxMenuItems。如果输入了一个人的姓名,则会运行一个方法来检查该人是否在系统中。如果是,则调用另一种方法来检查是否JCheckBoxMenuItem选择了 s 以继续进行常规搜索或过滤搜索。我没有对每个选项进行编码,而是将所有JCheckBoxMenuItems 放在一个ArrayList. 我创建了一个循环遍历这个的新方法,ArrayList并检查了JCheckBoxMenItemon 位置i isSelected()如果是这样,则执行某个操作,但似乎它甚至不会遍历整个列表,即使选择了某些内容也会停止。它应该在技术上工作,但我想我没有看到的东西丢失了。如果我尝试执行该方法,它永远不会检查是否JCheckBoxMenuItem选择了 a 。我将在此处发布部分代码并提供指向我的 GitHub 的链接,您可以在其中找到所有类和整个代码:https ://github.com/Gonzo-CR/Home-Projects/tree/master/project_SuchSystem

该类TestFrame是带有解释代码的 GUI。一些变量和文本是用德语写的,我希望这不会带来任何问题。需要按下 GUI 中未放置的菜单栏才能开始搜索。

public void einzelLehrerSuche()
{
    model = (DefaultTableModel)table_Lehrer.getModel();
    loescheLehrerTabelle();
    String lehrername = tfSuchfeldLehrer.getText();
    boolean lehrerGefunden = false;
    if(lehrername.isEmpty() == false)
    {
        for(int i = 0; i < lehrerliste.size(); i++)
        {
            lehrer = lehrerliste.get(i);
            if(lehrer.getName().equals(lehrername) || lehrer.getNachname().equals(lehrername))
            {
                if(checkAlleChbx(i) == true)
                {
                    lehrerGefunden = true;
                    checkAlleChbx(i);
                }
                else
                {
                lehrerGefunden = true;
                if(lehrer.isMehrereklassen() == true && lehrer.isMehrerefaecher() == true)
                {
                    model.addRow(new Object [] {lehrer.getName(), lehrer.getNachname(), lehrer.getKuerzel(), lehrer.getKlasse_1().getBezeichnung(), lehrer.getKlasse_2().getBezeichnung(), lehrer.getFach().getBezeichnung(), lehrer.getFach2().getBezeichnung()});
                }
                else if(lehrer.isMehrereklassen() == true && lehrer.isMehrerefaecher() == false)
                {
                model.addRow(new Object [] {lehrer.getName(), lehrer.getNachname(), lehrer.getKuerzel(), lehrer.getKlasse_1().getBezeichnung(), lehrer.getKlasse_2().getBezeichnung(), lehrer.getFach().getBezeichnung(), " --- "});
                }
                else if(lehrer.isMehrereklassen() == false && lehrer.isMehrerefaecher() == true)
                {
                model.addRow(new Object [] {lehrer.getName(), lehrer.getNachname(), lehrer.getKuerzel(), lehrer.getKlasse_1().getBezeichnung(), " --- ", lehrer.getFach().getBezeichnung(), lehrer.getFach2().getBezeichnung()});
                }
                else
                {
                model.addRow(new Object [] {lehrer.getName(), lehrer.getNachname(), lehrer.getKuerzel(), lehrer.getKlasse_1().getBezeichnung(), " --- ", lehrer.getFach().getBezeichnung(), " --- "});
                }
                break;
                }
                break;
            }
        }
        if(!lehrerGefunden)
        {
            JOptionPane.showMessageDialog(null, "Die gesuchte Person ist nicht im System!");
            tfSuchfeldLehrer.setText("");
        }
    }
    else
    {
        JOptionPane.showMessageDialog(null, "Geben Sie einen Namen in das Suchfeld ein!");
    }

}
public boolean checkboxChecking(int i)
{
    model = (DefaultTableModel)table_Lehrer.getModel();
    loescheLehrerTabelle();
            if(chbxKrzelAnzeigen.isSelected())
            {
                chbxKuerzelCheck(i);
            }
            else
            {
                return false;
            }
            return true;
        }
public void chbxKuerzelCheck(int lehrerIndex)
{
    lehrer = lehrerliste.get(lehrerIndex);
    model.addRow(new Object [] {lehrer.getName(), lehrer.getNachname(),lehrer.getKuerzel(), " --- ", " --- ", " --- ", " --- "});
}
public boolean checkAlleChbx(int k)
{
    ChbxGroup();
    System.out.println(chbxListe.get(0).getText());
    model = (DefaultTableModel)table_Lehrer.getModel();
    loescheLehrerTabelle();
    for(int i = 0; i < chbxListe.size(); i++)
    {
        System.out.println(chbxListe.size());
        System.out.println(i);
        System.out.println(chbxListe.get(i).getText());
        model = (DefaultTableModel)table_Lehrer.getModel();
        JCheckBoxMenuItem cbMI = chbxListe.get(i);
        if(cbMI.isSelected())
        {
            String chbxname = cbMI.getText();
            System.out.println(chbxname);
            if(chbxname.equals("K\u00FCrzel Anzeigen"))
            {
                System.out.println("Kürzel gefunden");
                chbxKuerzelCheck(k);
            }
            else
            {
                System.out.println("Didn't work!");
            }

        }
        else
        {
            System.out.println("False angekommen");
            return false;
        }
    }
    System.out.println("True angekommen");
    return true;
}

该方法checkBoxChecking用于单独检查复选框,但现在未使用。该方法einzelLehrerSuche()是链接到问题所在方法的搜索算法checkAlleChbx。我非常感谢您的帮助。

标签: javaswingarraylistjmenujmenubar

解决方案


推荐阅读