Java 如何从ActionListener启动类?
我有一个基本的GUI类,有一个框架、一个表和一个按钮。我想让它从位于不同类中的另一个基本GUI框架的ActionListener启动 这是我的主要课程: 它启动我的主菜单,我想从主菜单启动另一个名为ViewTeamStatistics的类 这是执行的操作。这就是在我按下按钮后告诉程序打开框架的内容Java 如何从ActionListener启动类?,java,swing,user-interface,Java,Swing,User Interface,我有一个基本的GUI类,有一个框架、一个表和一个按钮。我想让它从位于不同类中的另一个基本GUI框架的ActionListener启动 这是我的主要课程: 它启动我的主菜单,我想从主菜单启动另一个名为ViewTeamStatistics的类 这是执行的操作。这就是在我按下按钮后告诉程序打开框架的内容 private void vtsActionPerformed(java.awt.event.ActionEvent evt) {
private void vtsActionPerformed(java.awt.event.ActionEvent evt) {
ViewTeamStatistics v1 = new ViewTeamStatistics();
v1.setVisible(true);
}
编译器返回时没有错误,但当我运行程序并按下按钮时,什么也没有发生。我不完全理解您的问题,是否要在按下按钮后启动新帧?如果是这样,下面是一个示例代码:
public class ExampleWindow implements ActionListener{
private JFrame mainFrame;
private JButton button;
public ExampleWindow(){
button = new JButton("Press me!");
button.addActionListener(this);
mainFrame = new JFrame("Frame name");
mainFrame.add(button);
mainFrame.setVisible(true);
//Remember about this line
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
new SomeWindow();
}
}
class SomeWindow{
private JFrame frame;
public SomeWindow(){
frame = new JFrame;
frame.setVisible(true);
}
}
我没有尝试编译它,因此可能会出现一些错误。您实际上没有ActionListener。是时候进行一些调试以尝试隔离错误了。为此使用IDE的调试器。在你找出错误之前,你(和我们)无法解决它。如果您仍然被卡住,请创建一个并张贴在此处。VTSACTION执行的是什么?您需要阅读以下内容:请参阅
//记住这一行:mainFrame.setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE)代码>确实如此。请记住避免在关闭时退出
并使用在关闭时处置
(并关闭应用程序显式启动的所有线程)。我没有意识到这一点,谢谢。然而,在这个简单的例子中,EXIT_ON_CLOSE就足够了吗?否。请尝试在上运行代码。现在关闭其中一个框架。另外两个仍在屏幕上。关闭其余两个,VM将结束。现在将关闭操作更改为EXIT\u ON\u close
编译并再次运行它。关闭任何一个框架和整个应用程序。末端!所以,不,EXIT\u ON\u CLOSE
在一般情况下是不好的,在这个有多帧的情况下更糟。另一方面,我认为这个答案的质量一般都很差。未使用EDT,未使用pack()
,低于最佳关闭操作。。
public class ExampleWindow implements ActionListener{
private JFrame mainFrame;
private JButton button;
public ExampleWindow(){
button = new JButton("Press me!");
button.addActionListener(this);
mainFrame = new JFrame("Frame name");
mainFrame.add(button);
mainFrame.setVisible(true);
//Remember about this line
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
new SomeWindow();
}
}
class SomeWindow{
private JFrame frame;
public SomeWindow(){
frame = new JFrame;
frame.setVisible(true);
}
}