好吧,伙计,我设法完全混淆了自己试图为我在文本形式上运作良好的程序构建GUI。
本质上该程序跟踪库存。产品名称,数量,成本,数量等。最初我只是有一个班级'项目'它涵盖了所有的吸气剂和二传手。然后我会使用扫描仪等来提示基于文本的菜单,您可以非常系统地输入每个元素。我理解这一切是如何工作的,因为我可以实例化一个存储所有Item对象的Items数组,然后我可以操作它们。所有这些都发生在main()中。
现在我还创建了一个Inventory类,它处理我的main()和之前处理的大部分内容。我想创建一个"库存"然后我可以在整个程序中使用的对象,主要是在我的ActionListeners中。 I.E. inventory.displayText(位置);不幸的是,因为我的GUI是一个独立于我的main()的类 - 我实例化了Inventory类 - 我没有一个本地变量" inventory"所以我得到一个错误。
这似乎应该是荒谬的简单,但我的大脑似乎并没有包裹它。
这个想法:
public class Items{
all item variables
setters and getters()
}
public class Inventory{
Items[] arrayOfItems = new Items[10]
displayItem(int placement){
...code to display items
}
}
public class GUI extends JFrame{
public GUI(){
...general gui layout...
forwardButton = new JButton("Forward");
}
private class eventHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent event) {
int placement = 1;
if (event.getSource()==forwardButton){
if (placement < 10){
placement++;
inv.displayItem(placement); //this is where the problem is and where I
} //have lost myself. inv doesnt exist here.
//so i cant call upon the object from here.
public class Company{
public static void main(String args[]){
//Open GUI
GUI mainGUI = new GUI();
mainGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainGUI.setSize(1000,1000);
mainGUI.setVisible(true);
//initialize inventory object
Inventory inv = new Inventory();
}
}
我几乎100%肯定它的东西超级基本但我只是没有得到它。如果你们能帮助我,我会非常感激!
答案 0 :(得分:0)
您可以在GUI类中为Inventory
创建一个字段和一个setter。
然后,在实例化您的广告资源后的main
中,您只需致电mainGUI.setInv(inv)
,您的GUI类就可以访问广告资源。
答案 1 :(得分:0)
最简单的方法就是将库存传递给GUI构造函数:
private Inventory inventory;
public GUI(Inventory inv){
this.inventory = inv;
...general gui layout...
forwardButton = new JButton("Forward");
}
然后更改GUI的实例化以传递库存:
Inventory inv = new Inventory();
GUI mainGUI = new GUI(inv);
虽然这种方法可以帮助您实现这一目标,但您可能希望了解模型 - 视图 - 控制器模式以及如何在Java Swing中实现它。
MVC将应用程序划分为:
答案 2 :(得分:0)
您完全无法访问eventHandler
中的广告资源对象,但修复它很容易。 eventHandler
是GUI
的内部类。事实证明,在Java中,非静态内部类可以访问封闭类的成员(有关更多信息,请参阅Nested Classes)。这意味着您在GUI
中声明的所有内容都将显示在eventHandler
。
您需要做的是创建类型为GUI
的{{1}}成员,并在创建Inventory
时传递您的inv
实例。此时,您的GUI
将能够看到它。
您的eventHandler
构造函数将如下所示......
GUI
...然后在您的public class GUI extends JFrame {
private Inventory inv;
public GUI(Inventory inv) {
this.inv = inv;
// other stuff
}
// etc
方法中,您可以将main()
的引用传递给构造函数,如下所示:
inv