1 回答
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的程序需要進(jìn)行一些更改
extends JFrame如我上面的評(píng)論所述刪除,請(qǐng)參閱擴(kuò)展 JFrame 與在程序中創(chuàng)建它將您的程序放在 EDT 上,請(qǐng)參閱此答案的第 3 點(diǎn)以及
main有關(guān)如何執(zhí)行此操作的示例的方法。你對(duì)如何
ActionListeners工作感到困惑,他們會(huì)等到你在你的程序中執(zhí)行某些操作(即你按下Confirm按鈕),然后再做一些事情。程序中的“某事”意味著:打印所選項(xiàng)目并檢查它是否是武器,然后做其他事情。
因此,在這種情況下,您無需返回main以繼續(xù)您的程序,main僅用于初始化您的應(yīng)用程序,僅此而已。你需要在事件中思考,而不是按順序思考。這是棘手且最重要的部分。
您需要從控制臺(tái)應(yīng)用程序更改您的編程范例,并且do-while一切都以順序方式發(fā)生,而不是當(dāng)用戶對(duì)您的應(yīng)用程序執(zhí)行某些操作時(shí)觸發(fā)的事件。
例如:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class GUITest implements ActionListener {
private JFrame frmInventorysystem;
private JPanel frameBottom;
private JComboBox equipList;
private JButton confirmBtn, cancelBtn;
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new GUITest()); //Java 8+ if using an earlier version check the point #2 in this answer and modify the code accordingly.
}
/**
* Create the application.
*/
public GUITest() {
frmInventorysystem = new JFrame();
frmInventorysystem.setTitle("InventorySystem");
frmInventorysystem.setBounds(100, 100, 450, 300);
frmInventorysystem.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmInventorysystem.getContentPane().setLayout(new BorderLayout(0, 0));
/*
* JFrame inside another JFrame is not recommended. JPanels are used instead
* Creating a flow layout for the bottom frame
*/
frameBottom = new JPanel();
frameBottom.setLayout(new FlowLayout());
// creates comboBox to find out which of the three items player is looking to
// insert
String[] weaponCategories = { "Weapon", "Armor", "Mod" };
equipList = new JComboBox(weaponCategories);
frmInventorysystem.getContentPane().add(equipList, BorderLayout.NORTH);
// Converting BorderLayout.south into a flow layout
frmInventorysystem.getContentPane().add(frameBottom, BorderLayout.SOUTH);
confirmBtn = new JButton("Confirm");
confirmBtn.addActionListener(this);
frameBottom.add(confirmBtn);
cancelBtn = new JButton("Cancel");
cancelBtn.addActionListener(this);
frameBottom.add(cancelBtn);
frmInventorysystem.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
// creates new windows to sort equipment when confirmBtn is clicked
if (e.getSource() == confirmBtn) {
String category = equipList.getSelectedItem().toString(); //Get the selected category
doSomething(category); //Pass it as a parameter
}
// Exits when cancelBtn is clicked
if (e.getSource() == cancelBtn) {
frmInventorysystem.dispose();
}
}
// Do something with the category
private void doSomething(String selectedEquipment) {
System.out.println(selectedEquipment);
if (selectedEquipment.equals("Weapon")) {
System.out.println("It's a weapon!"); //You can open dialogs or do whatever you need here, not necessarily a print.
} else {
System.out.println("Not a weapon");
}
}
}
請(qǐng)注意,我刪除了繼承,我不會(huì)返回main并仍然打印所選項(xiàng)目并檢查它是否是武器。
我還以更安全的方式退出應(yīng)用程序。
這是示例輸出:
Weapon
It's a weapon!
Armor
Not a weapon
添加回答
舉報(bào)
