我试图在点击按钮时“打开”一个不同的JFrame窗口(在本例中是“尺寸”按钮),就像在浏览菜单时一样。我有两个窗口,主函数和ActionListener作为单独的类。当我点击应该将我重定向到另一个窗口的按钮时,它只会显示一个错误,而不会隐藏第一个窗口并显示第二个窗口。错误是:
"异常线程"AWT-EventQueue-0"java.lang.ClassCastExc0019:类javax.swing.JButton不能强制转换为类javax.swing.JFrame(javax.swing.JButton和javax.swing.JFrame在模块java.desktop的加载程序'引导')在ActionDimensions.action执行(ActionDimensions.java: 8)在java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)在java.desktop/javax.swing.AbstractButton$Handler.action执行(AbstractButton.java:2313)在java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)在java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)在java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)在java.desktop/java.awt.Component.processMouseEvent(Component. java: 6626)在java.桌面/javax. swings。在java.桌面/java. awt.处理事件(Component. java: 6391)在java.桌面/java. awt.在java.桌面/java. awt.在java.桌面/java. awt.在java.桌面/java. awt.在java.桌面/java. awt.在java.桌面/java. awt.在java.桌面/java. awt.在java.桌面/java. awt.在java.桌面/java. awt.在java.桌面/java. awt.在java.桌面/java. awt.EventQueue4 USD. run(EventQueue. java: 722)在java.桌面/java. awt.在java. base/java. security.AccessController. doPrivileged(AccessController. java: 399)在java. base/java. security.在java. base/java. security上保护域名$JavaSecurityAccessImp. doIntersectionPrivilge(Protse Domain. java: 86)。保护域$JavaSecurityAccessImp. doIntersectionPrivilge(Protse Domain. java: 97)在java.桌面/java. awt.EventQueue5 USD. run(EventQueue. java: 746)在java.桌面/java. awt.在java. base/java. security.AccessController. doPrivileged(AccessController. java: 399)在java. base/java. security.保护域$JavaSecurityAccessImp. doIntersectionPrivilge(Protse Domain. java: 86)在java.桌面/java. awt.事件(EventQueue. java: 743)在java.桌面/java. awt.EventDispatchThread. pumpEventsForFilter(EventDispatchThread. java: 124)在java.桌面/java. awt.java: 113)在java.桌面/java. awt.在java.桌面/java. awt.在java.桌面/java. awt.运行(EventDispatchThread. java: 90)"
第一窗口:
public class MainMenu extends JFrame {
public MainMenu(){
setSize(300,600);
JPanel center = new JPanel();
center.setLayout(new GridLayout(3,1));
JButton MainMenuButtonStart = new JButton("Start");
JButton MainMenuButtonContinue = new JButton("Continue");
JButton MainMenuButtonDimensions = new JButton("Dimensions");
center.add(MainMenuButtonStart);
center.add(MainMenuButtonContinue);
center.add(MainMenuButtonDimensions);
ActionDimensions actionDimensions = new ActionDimensions();
MainMenuButtonDimensions.addActionListener(actionDimensions);
add(center, BorderLayout.CENTER);
}
}
第二窗口:
import javax.swing.*;
import java.awt.*;
public class Dimensions extends JFrame {
public Dimensions(){
setSize(600,500);
JPanel north = new JPanel();
JLabel labelnorth = new JLabel("Enter Dimensions! Rows and Columns");
north.add(labelnorth);
JPanel center = new JPanel();
JPanel south = new JPanel();
JButton buttonsouth = new JButton("Return to Main Menu");
south.add(buttonsouth);
center.setLayout(new GridLayout(1,2));
TextField rowtextfield = new TextField();
TextField columntextfield = new TextField();
center.add(rowtextfield);
center.add(columntextfield);
add(north,BorderLayout.NORTH);
add(center,BorderLayout.CENTER);
add(south,BorderLayout.SOUTH);
主要功能:
public class Main {
public static void main(String[] args) {
MainMenu mainMenu = new MainMenu();
Dimensions dimensions = new Dimensions();
dimensions.setVisible(false);
mainMenu.setVisible(true);
mainMenu.setDefaultCloseOperation(3);
}
}
操作侦听器:
public class ActionDimensions implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JFrame mainMenu = (JFrame) e.getSource();
JFrame dimensions = (JFrame) e.getSource();
mainMenu.setVisible(false);
dimensions.setVisible(true);
}
}
我认为问题在于我试图通过一个框架使用getsource()方法,但是如果我没有指定该方法,我就无法访问实例(mainmenu和dimensions)。如果是这种情况,还有什么其他方法可以将setVisible方法连接到ActionListener内的实例?
这可能是您的问题:
JFrame mainMenu = (JFrame) e.getSource();
JFrame dimensions = (JFrame) e.getSource();
ActionEvent#getSource()
方法返回触发动作的源代码,这里是一个JButton,您试图将从该方法返回的同一个JButton对象转换为两个不同的JFrame,这实际上没有多大意义,因为该方法同样不返回JFrame,其次,强制转换不会将一个对象转换为两个不同的对象。如果需要对JFrame的引用,请将其传递到需要的位置,例如,为ActionListener类提供一个接受JFrame参数的构造函数:
ActionDimensions actionDimensions = new ActionDimensions(this);
和
public class ActionDimensions implements ActionListener {
private MainMenu mainMenu;
public ActionDimensions(MainMenu mainMenu) {
this.mainMenu = mainMenu;
}
@Override
public void actionPerformed(ActionEvent e) {
// JFrame mainMenu = (JFrame) e.getSource();
// JFrame dimensions = (JFrame) e.getSource();
mainMenu.setVisible(false);
// create a new Dimensions JFrame here?
Dimensions dimensions = new Dimensions();
// .... other code
dimensions.setVisible(true);
}
}
或者,您可以通过调用SwingUtilities.getWindowAncestor(your JButton)
来获取按钮所在的JFrame。
话虽如此,但要明白没有用户会喜欢有多个窗口指向他们,这就是交换JFrames所做的,还有更好的方法来干净地交换视图,比如使用CardLayout教程。请阅读使用多个JFrames,好/坏的做法?。
我正在尝试隐藏按钮div和显示一个隐藏的div后,一个表单按钮已经被点击,加上延迟提交/重定向。下面是我想出的办法,但似乎没有100%奏效。 null null 任何建议都非常感谢
问题内容: 我的html文件中有两个div。我想隐藏第一个div并在html输入按钮事件上显示另一个div 。 这是我的代码, 但这不起作用。任何帮助将不胜感激。 谢谢。 问题答案: 1)在onclick内,您不必使用暗示的“ javascript:”。 2)您检查“显示:阻止”,我总是检查“显示:无”(因为显示也可以是“行内阻止”,等等。) 尝试这个:
我一直在工作的swings框架,其中有一个卡片布局面板在大型机。 我总共有20个jpanels添加到我的卡片布局面板中,在这20个面板中,有3个面板是由一个按钮组成的,点击这个按钮会加载另一个JFrame。当我使用IDE运行这个GUI时,它工作得很好,但是,当我运行jar文件时,在三种情况中的两种情况下,当单击按钮时,它不显示帧。 这是我正在为ButtonListener使用的代码。这个按钮只在一
问题内容: 众所周知,我是一名完全的Java新手。我已经尝试过对此进行研究(通过阅读StackOverflow上的其他文章,谷歌搜索,并问一个不太喜欢Java新手的朋友),但我不知道。答案可能是明确而容易的,但我对此视而不见。我正在尝试从其他框架中放置A。 我的应用程序应该按以下方式工作: 按下框架X时有一个按钮:产生框架Y 框架Y有一个按钮,当按下时:产生框架Z 按下框架Z时有一个按钮:在放置框
很多人可能都知道,我是一个完全的Java新手。我已经尝试过对此进行研究(通过阅读StackOverflow上的其他帖子,在谷歌上搜索,并询问一位不太熟悉java的朋友),但我无法理解。答案可能很清楚也很简单,但我对此视而不见。我试图从不同的帧中处理JFrame。 我的应用程序应该按如下方式工作: 帧X有一个按钮,按下时:生成帧Y 帧Y有一个按钮,按下时:生成帧Z Frame Z有一个按钮,按下时:
我在stack overflow上搜索了我的问题的类似答案,但都没有帮助我。 所以我的问题是: 我有一个名为的主JFrame,它上有一个JTable和一个JButton。单击该按钮后,将打开另一个JFrame(),我可以从中更新表。Update_Window JFrame有两个文本字段和一个按钮。 简单地说,我想从JFrame更新中的JTable。在TextFields中键入内容并使用按钮提交后,