gpt4 book ai didi

java - 将 ImageIcons 添加到 JButtons 后,按钮不再起作用

转载 作者:行者123 更新时间:2023-12-01 07:51:19 26 4
gpt4 key购买 nike

Image Icons on JButtons

我很早就完成了一个项目,所以利用提交之前的剩余时间,我想尝试一下。整个程序运行良好,JButton 完全按照编程的方式运行。

将 ImageIcon 添加到我的 JButton 后出现问题。我将展示一些 JButton 初始化,并在每个 block 上方的单个注释中显示原始内容:

/**
* create child components
*/
private void initComponents() {

//normalSetupButton = new JButton("Normal Setup");
ImageIcon normalButtonImage = new ImageIcon("src/Images/normalIcon.png");
normalSetupButton = new JButton();
normalSetupButton.setIcon(normalButtonImage);
normalSetupButton.addActionListener(buttonHandler);
normalSetupButton.setToolTipText("Set up simulation for normal execution");

// queen test button
//queenTestButton = new JButton("Queen Test");
ImageIcon queenButtonImage = new ImageIcon("src/Images/yellowIcon.jpg");
queenTestButton = new JButton();
queenTestButton.setIcon(queenButtonImage);
queenTestButton.addActionListener(buttonHandler);
queenTestButton.setToolTipText("Set up to test Queen Lifespan or Food Levels");

// scout test button
//scoutTestButton = new JButton("Scout Test");
ImageIcon scoutButtonImage = new ImageIcon("src/Images/blueIcon.png");
scoutTestButton = new JButton();
scoutTestButton.setIcon(scoutButtonImage);
scoutTestButton.addActionListener(buttonHandler);
scoutTestButton.setToolTipText("Set up simulation for testing the Scout ant");
}

与按钮的唯一区别是现在有图像图标而不是文本。

我的问题出在以下代码中。这是我第一次在Button上使用ImageIcons,所以我一直习惯“button.getText().equals(“Button String”);”

public void actionPerformed(ActionEvent e) {
// get the button that was pressed
JButton b = (JButton) e.getSource();

// fire appropriate event
if (b.getText().equals("Normal Setup")) {
// set up for normal simulation
fireSimulationEvent(SimulationEvent.NORMAL_SETUP_EVENT);
} else if (b.getText().equals("Queen Test")) {
// set for testing the queen ant
fireSimulationEvent(SimulationEvent.QUEEN_TEST_EVENT);
} else if (b.getText().equals("Scout Test")) {
// set for testing the scout ant
fireSimulationEvent(SimulationEvent.SCOUT_TEST_EVENT);
} else if (b.getText().equals("Forager Test")) {
// set for testing the forager ant
fireSimulationEvent(SimulationEvent.FORAGER_TEST_EVENT);
} else if (b.getText().equals("Soldier Test")) {
// set for testing the soldier ant
fireSimulationEvent(SimulationEvent.SOLDIER_TEST_EVENT);
} else if (b.getText().equals("Run")) {
// run the simulation continuously
fireSimulationEvent(SimulationEvent.RUN_EVENT);
} else if (b.getText().equals("Step")) {
// run the simulation one turn at a time
fireSimulationEvent(SimulationEvent.STEP_EVENT);
} else if (b.getText().equals("Stop")) {
//stop everything
fireSimulationEvent(SimulationEvent.STOP_EVENT);
}
}

那么,Swing 大师们,如何基于 JButton 的 ImageIcon 触发事件呢?感谢您提供的任何帮助。如果这不起作用,我很乐意将其改回纯文本的旧版本。

注意是的,我知道这些图像的格式并不相同。它们不会是最终的图像。我只是在测试并获取我现在能找到的任何格式。

最佳答案

我认为重写代码的最佳方法是使用按钮的客户端属性。

private static final String EVENT_TYPE = "event_type";

// button creation
normalSetupButton = new JButton();
// set appropriate event for this button
normalSetupButton.putClientProperty(EVENT_TYPE, SimulationEvent.NORMAL_SETUP_EVENT);
// other init button routine

//next button
queenTestButton = new JButton();
queenTestButton.putClientProperty(EVENT_TYPE, SimulationEvent.QUEEN_TEST_EVENT);
// other init button routine

// same way for other buttons


public void actionPerformed(ActionEvent e) {
// get the button that was pressed
JButton b = (JButton) e.getSource();
SimulationEvent evt = (SimulationEvent) b.getClientProperty(EVENT_TYPE);
fireSimulationEvent(evt);
}

这看起来比“if-else if”级联更好;)

关于java - 将 ImageIcons 添加到 JButtons 后,按钮不再起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37065186/

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