Java:对象的数组列表和获取自动创建的复选框的值/属性

Posted

技术标签:

【中文标题】Java:对象的数组列表和获取自动创建的复选框的值/属性【英文标题】:Java: Array list of objects & getting values/properties of automatically created checkboxes 【发布时间】:2016-10-22 06:42:52 【问题描述】:

我有一个ArrayList 的字符串,它会在弹出窗口中自动生成一个复选框列表(数量不同)。我目前对以下代码有两个问题:

Object[] params 不起作用,因为它需要我提前知道 ArrayList ar 的大小,而且我还没有想办法让对象的数组列表与我的代码一起使用。我怎样才能解决这个问题?我尝试创建一个对象数组列表,但我只能让它显示无意义的文本。 如何获取每个复选框的值/文本及其各自的 isSelected() 状态?

下面是我的代码:

String message = "The selected servers will be shutdown.";
Object[] params = message, null, null, null, null, null;

ArrayList<String> ar = GetSet.getStopCommand(); // Example array: ./Stopplm11.sh|./Stopplm12.sh|./Stopplm14.sh|./Stopplm15.sh

for(int i=0; i< ar.size(); i++)
    JCheckBox checkbox = new JCheckBox();
    checkbox.setText(ar.get(i).toString());
    checkbox.setSelected(true);
    params[i+1]= checkbox;


int n = JOptionPane.showConfirmDialog(btnShutdownServer, params, "Shutdown Servers", JOptionPane.OK_CANCEL_OPTION);

if (n == JOptionPane.OK_OPTION)
    // DO STUFF
    //boolean buttonIsSelected= checkbox.isSelected();
else
    // user cancelled

图片,给喜欢图片的人:

【问题讨论】:

【参考方案1】:

您可以将其设为 JCheckBox 的 ArrayList:

ArrayList<JCheckBox> checkboxes = new ArrayList<JCheckBox>();

那么你可以这样做:

for(int i = 0; i < ar.size(); i++)

    JCheckBox checkbox = new JCheckBox();
    checkbox.setText(ar.get(i).toString());
    checkbox.setSelected(true);

    // add the checkbox to the ArrayList
    checkboxes.add(checkbox);

最后,要检查 if 条件中所有复选框的状态,您可以这样做:

if (n == JOptionPane.OK_OPTION)
    // DO STUFF
    //boolean buttonIsSelected= checkbox.isSelected();

    // loop through all checkboxes in the ArrayList
    for (JCheckBox checkbox : checkboxes)
    
        // current one is selected
        boolean buttonIsSelected = checkbox.isSelected();
    

    // rest of code in if condition

【讨论】:

我可以像下面那样将复选框添加到“params”,这样我只需要创建一个对象来包含在“params”而不是“x”对象中。 ----- Object[] params = message, checkboxes; 如果你愿意,你可以这样做,但最好创建一个简单的类来保存字符串消息和 ArrayList 复选框。然后,您可以为该类设置 getter 和 setter。稍后您可能想在课程中添加更多内容。它更灵活,您不必担心在从类中获取内容时会遇到 ClassCastException,就像使用 Object [] 您的代码解决了我的第一个问题。谢谢:) 最后一件事......当我将复选框添加到“参数”时,我仍然得到错误的结果。如何让它正确显示对象?我在当前结果的原始帖子底部发布了一张图片。 您得到了那些“奇怪”的字符串,因为您直接或间接地对 ArrayList 中的 JCheckBox 进行字符串化。相反,您应该使用 checkbox.getText() 访问每个 JCheckBox 的文本【参考方案2】:

不要将params 存储在数组中,而是将这些参数存储在ArrayList 中,如下所示:

ArrayList<Object> params = new ArrayList<Object>();
params.add("The selected servers will be shutdown.");

for(int i = 0; i < ar.size(); i++)

    JCheckBox checkbox = new JCheckBox();
    checkbox.setText(ar.get(i).toString());
    checkbox.setSelected(true);
    params.add(checkbox);

然后,将params 设为一个数组:

Object[] realParams = new Object(params.size());
realParams = params.toArray(realParams);

然后继续执行其余的代码。

【讨论】:

以上是关于Java:对象的数组列表和获取自动创建的复选框的值/属性的主要内容,如果未能解决你的问题,请参考以下文章

js中获取java文件传过来的list对象列表

如何使用表单从数组动态创建复选框?

React:使用多个复选框过滤数组列表

javaWeb复选框的修改

如何从 UITableView 获取行索引,其中数组列表由追加到类

通过在 JavaScript 中检索它们的值来自动选择复选框 [重复]