gpt4 book ai didi

java - 将 JFrame 从起始方法获取到另一个方法

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

我遇到一个问题,我试图从同一个类中的另一个方法 (addAButton) 开始调用位于 public Menu 方法中的 JFrame但不工作。我尝试在 public Menu 内部调用 addAButton 但我不能,因为我无法在该类中放置容器。代码:

public class Menu {

public Menu(Component component) {

JFrame frame = new JFrame("...");
frame.setSize(new Dimension(1050, 700));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(component);

// Set up the content pane.
try {
frame.setContentPane(new JLabel(new ImageIcon(ImageIO
.read(new File("res/menuBackground.png")))));
} catch (IOException e) {
e.printStackTrace();
}
addComponentsToPane(frame.getContentPane());

// Display the window.
frame.pack();
frame.setVisible(true);
}



public static void addComponentsToPane(Container pane) {

//some code...

pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));

addAButton("SP", "res/Singleplayer.png",
"res/Singleplayer_pressed.png", pane, true);

//other buttons...
}



public static void addAButton(final String text, String BtnIcon,
String PressBtnIcon, Container container, Boolean isEnabled) {

//stuff for buttons...

button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (button.getText().equals("Q")) {
System.exit(0);
} else if (button.getText().equals("SP")) {
Component component = new Component();

//here I want to put frame.dispose to close this window for when the game window opens.

component.start();

} else if(button.getText().equals("O")) {

//here I want to put frame.dispose to close this window for when the options window opens.

Component.Options();

}
}

});
}
}

最佳答案

首先,公共(public)Menu代码块不是方法。它是一个构造函数。它的功能是初始化和准备该类的新对象的字段。

frame 变量是一个局部变量。如果在代码块内声明变量,则它只能在该代码块内使用。一旦声明局部变量的代码块结束,局部变量就会被丢弃。

如果您希望能够通过不同的方法访问数据项,则意味着该项是对象的状态的一部分。也就是说,该对象应该在其生命周期内将该项目保留在其内部,以便对其调用的下一个方法将使该项目可用。

当数据项是对象状态的一部分时,应将其声明为字段。也就是说,它不应该在任何方法或构造函数内部声明,而应该在所有方法和构造函数之前声明。

声明字段后,您可以在构造函数中对其进行初始化。然后您可以从同一类中的任何方法访问该字段。

public class Menu {

private JFrame frame; // This is the field declaration

public Menu( Component component ) {

frame = new JFrame("..."); // Here you just initialize, not declare.

... // Do the rest of your initializations

}

... // Other methods
}

现在您可以在任何方法中使用字段frame

关于java - 将 JFrame 从起始方法获取到另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28265742/

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