gpt4 book ai didi

Java - 关闭事件窗口

转载 作者:行者123 更新时间:2023-11-30 07:38:51 25 4
gpt4 key购买 nike

互联网人。

我想要为我正在编写的游戏提供一种启动屏幕。到目前为止,它为 4 个玩家中的每一个提供了 4 个按钮,点击时颜色会从红色变为绿色,反之亦然,代表他们各自的“就绪”状态(如果有意义的话)。我使用了 JFrame 和 JButtons。

现在,如果这些按钮中的每一个当前都设置为“就绪”,即 button.getBackground() == Color.GREEN,我希望该窗口关闭。

任何有关为此使用哪些事件监听器/实现技巧/代码片段的建议将不胜感激,因为我对事件上的窗口关闭的研究并没有给我带来太多帮助。

预先感谢您并问候。

最佳答案

由于您正在等待按钮按下并执行操作,因此最合乎逻辑的监听器将是 ActionListener。

考虑将按钮设为 JToggleButtons,然后在监听器中查询每个按钮以查看它是否被选中 (isSelected()),如果是,则启动程序。顺便说一句,我会考虑将介绍窗口设置为 JDialog 而不是 JFrame,或者将其设置为 JPanel 并在必要时通过 CardLayout 进行交换。

例如:

import java.awt.Color;
import java.awt.Dialog.ModalityType;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

public class AreWeReady extends JPanel {
List<AbstractButton> buttons = new ArrayList<>();
private int userCount;

public AreWeReady(int userCount) {
this.userCount = userCount;
ButtonListener buttonListener = new ButtonListener();
for (int i = 0; i < userCount; i++) {
JButton btn = new JButton("User " + (i + 1));
buttons.add(btn);
btn.addActionListener(buttonListener);
add(btn);
}
}

private class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
AbstractButton btn = (AbstractButton) e.getSource();
Color c = Color.GREEN.equals(btn.getBackground()) ? null : Color.GREEN;
btn.setBackground(c);

for (AbstractButton button : buttons) {
if (!Color.GREEN.equals(button.getBackground())) {
// if any button does not have a green background
return; // leave this method
}
}

// otherwise if all are green, we're here
Window win = SwingUtilities.getWindowAncestor(btn);
win.dispose();
// else launch your gui
}
}

private static void createAndShowGui() {
int userCount = 4;
AreWeReady areWeReadyPanel = new AreWeReady(userCount);

JFrame frame = new JFrame("Main Application");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(Box.createRigidArea(new Dimension(400, 300)));
frame.pack();
frame.setLocationByPlatform(true);

JDialog dialog = new JDialog(frame, "Are We Ready?", ModalityType.APPLICATION_MODAL);
dialog.add(areWeReadyPanel);
dialog.pack();
dialog.setLocationByPlatform(true);
dialog.setVisible(true);

// this is only reached when the modal dialog above is no longer visible
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

关于Java - 关闭事件窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34979468/

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