gpt4 book ai didi

java - 处理 JButton 集合的事件

转载 作者:行者123 更新时间:2023-11-30 06:15:22 25 4
gpt4 key购买 nike

我正在尝试创建动态界面,该界面本质上是创建一个由越来越多的面板组成的网格,看起来类似于下图。我有一些粗略的代码来实现这一点。关于处理已添加到 ArrayList 的 JButton 的事件,我有一个问题。我知道创建内部类事件处理程序是最佳实践,我将如何处理存储在 ArrayList 中的按比例缩放的按钮数量的事件?

目前我已经通过获取对象源来实现这一点。

Example of one of the panels

全局变量:

ArrayList<JButton> buttons = new ArrayList<JButton>();

向面板添加按钮:

    for (int i = 0; i < 2; i ++) {
int xTotal = 150;
if (i == 0) {
xTotal = 132;
}
else {
xTotal = 308;
}
xTotal = xTotal + xTotal;

JButton currentButton = new JButton("+");
currentButton.setBounds(xTotal , 375, 45, 25);
currentButton.setFont(currentButton.getFont().deriveFont(14f));
currentButton.addActionListener(new AddHandler());

buttons.add(currentButton);
panel.add(currentButton);
}

事件处理器:

class AddHandler implements ActionListener {

public void actionPerformed(ActionEvent event) {


Object source = event.getSource();

if (source == buttons.get(0)) {
System.out.println("hello");

}
else {

System.out.println("it worked");
}

}
}

最佳答案

在我看来,您创建的不仅仅是 JButtons 的集合。相反,您似乎想要创建(如果我错了请纠正我)一组带有 JButton 的图像/文本。这表明您想要创建一个封装 one (?) 菜单项的类,该菜单项包含一个用于图像的 JLabel,一个可能用于文本的 JLabel,也许还有其他组件和一个 JButton,用户可以按下它来选择菜单项。该组件将是一个 JPanel,它(此处很重要)使用布局管理器智能地排列其所有组成组件。我建议不要使用 ActionListeners,而是创建一个单独的独立类来扩展 AbstractAction,您可以使用它来设置每个 JButtonAction,通过 JButton 的构造函数或通过其 setAction(...) 方法。然后,您可以将这些 JPanel 的集合放置在可能使用 GridLayout 的主 JPanel 中,并将其保存在 JScrollPane 中。

我的建议和代码的详细信息当然取决于您的 GUI 和当前代码的详细信息。

其他“侧面”推荐:

  • 不要使用null 布局和setBounds(...)。新手 Swing 程序员常常认为这是创建复杂 GUI 的最简单方法,短期内可能如此,但从长远来看,当需要维护、升级和增强 GUI 时,情况并非如此。此外,如此创建的 GUI 在一个平台和屏幕分辨率上可能看起来不错,但在所有其他平台上看起来很糟糕。了解和使用布局管理器。
  • 也许您需要一组 Action 或 JButton,但我不确定您是否需要它。如果按钮的 Action 知道要做什么,则不需要集合。 Action 可以有一个构造函数,用于传递对菜单项的名称和价格的引用。

关于java - 处理 JButton 集合的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28951820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com