【问题标题】:Is it possible to store array into object array?是否可以将数组存储到对象数组中?
【发布时间】:2016-09-17 22:46:31
【问题描述】:

我有 30 个JToggleButton。如果他们被按下,我想将 i 和标题传递给另一个类。

confirm.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        boolean buttonClicked = false;
        for (i = 0; i < 30; i++) {
            if (ButtonList[i].isSelected()) {
                buttonClicked = true;

                System.out.print(i+1);
                System.out.println(title);
                pass(title, ButtonList[i]);
            }
        }
        if (!buttonClicked) {
            JFrame parent= new JFrame();
            JOptionPane.showMessageDialog(parent, "You haven't select a seat");
        }
    }
});

在调用 past() 函数之前,我在这里做了一个测试。打印的标题数量似乎跟随点击的切换按钮总数。如何避免这种情况?

上面的代码给了我这个输出(假设点击了 2 个切换按钮)

1漫威的美国队长

2漫威的美国队长

【问题讨论】:

  • 从字面上看你的标题:是的,你可以在Object[]中存储一个数组。但我不太明白标题与您的问题有何关系。
  • @AndyTurner 先生,您能告诉我如何解决这个问题吗?
  • 这对我来说似乎并不容易,因为我不明白你在问什么。
  • @AndyTurner 先生,你为什么要删除你的答案?
  • 因为我懒得去处理那些在我回答完之后会发生变化的问题。

标签: java arrays object togglebutton


【解决方案1】:

您是否要通过指定电影的所有选定座位?

    Set<Integer> selectedSeats = new LinkedHashSet<>();
    for (int i = 0; i < 30; i++) 
    {
        if (ButtonList[i].isSelected()) 
        {
            selectedSeats.add(i + 1);
        }
    }

    if (selectedSeats.isEmpty()) 
    {
        JFrame parent= new JFrame();
        JOptionPane.showMessageDialog(parent, "You haven't select a seat");
    }
    else
        pass(title, selectedSeats);

【讨论】:

  • buttonClicked == !selectedSeats.isEmpty()。不需要单独的变量。另外,我认为只有在buttonClicked 为真时才应调用pass
  • 我不认为我理解你。你的意思是?您的解决方案还包含一个单独的变量
  • 不,只是pressedButtonIndexes
【解决方案2】:

我的问题是如何将数组 i 存储到一个对象中,以便它 可以在名为 pass() 的新函数中传递标题吗?

所以,我知道您想通知一个名为“pass”的方法,其中包含标题和它被选中的项目。如果是这种情况,您可以执行以下操作:

pass(list, title);

使用下面的代码(使用 ArrayList 你不需要使用“buttonClicked”布尔值):

confirm.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        ArrayList<int> list = new ArrayList<int>();

        for (i = 0; i < 30; i++) {
            if (ButtonList[i].isSelected()) {
                list.add(i);
            }
        }                       
        if (list.size() == 0) {
            JFrame parent= new JFrame();
            JOptionPane.showMessageDialog(parent, "You haven't select a seat");
        }
    }
});

我希望这会有所帮助。

编辑:安迪·特纳你是对的,我只是改变了它

【讨论】:

  • if (list.size() &gt; 0) { 是所需条件的倒数。
  • 应该是ArrayList&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;();
【解决方案3】:

想要接收数据的类可以实现 ActionListener 接口。然后您可以使用该类而不是新的 ActionListener。

这可能是这样的:

public class ClassThatWantsEvents implements ActionListener{
  @Override
  public void actionPerformed(ActionEvent e) { ...

以及您将如何在当前课程中使用它:

confirm.addActionListener(ClassThatWantsEvents);

【讨论】:

  • 这不是我要找的答案。任何地方,感谢您的帮助
猜你喜欢
  • 2020-12-27
  • 1970-01-01
  • 2022-07-21
  • 2018-07-19
  • 2021-04-16
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多