开始使用java编码学校。当我创建以下代码时,它将无法正常工作。 请帮帮我。
import javax.swing.*;
import java.awt.*;
public class StartScherm extends JFrame
{
public static void main( String[] args ){
JFrame frame = new StartScherm();
frame.setSize( 800, 800 );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setTitle( "CityTours" );
JPanel Paneel = new Paneel();
frame.setContentPane( Paneel );
frame.setVisible( true );
}
}
class Paneel extends JPanel {
private JButton Eng, LoginAdmin, LoginUser;
private JTextField Text;
public Paneel(){
setLayout (null);
Eng = new JButton ("Bring me to the English version");
Eng.setBounds(250,20,300,20);
Eng.addActionListener(newEngHandler());
Text = new JTextField (" Welkom bij CityTours ");
Text.setBounds(100,80,600,600);
Text.setEditable (false);
LoginAdmin = new JButton ("Login administrator");
LoginAdmin.setBounds(100,720,200,20);
LoginUser = new JButton ("Login gebruiker");
LoginUser.setBounds(500,720,200,20);
add (Eng);
add (Text);
add (LoginAdmin);
add (LoginUser);
}
class EngHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
this.dispose();
new MainScreen().setVisible(true);
}
}
}
我正在尝试创建一个名为Eng的JButton来关闭StartScherm.Java框架并打开一个MainScreen.Java框架(所有在同一个项目中)
它所做的就是创建3个JButton和一个JTextField,而Eng JButton操作将不起作用。 (错误:找不到符号)
请帮助我并向我解释我的错误。
答案 0 :(得分:0)
Eng.addActionListener(newEngHandler());
应该是
Eng.addActionListener(new EngHandler());
newEngHandler()
表示无法找到的方法new EngHandler()
表示实例化新类
答案 1 :(得分:0)
从您的代码中不清楚什么是MainScreen
但是,让我告诉您如何通过单击按钮在两个JFrame窗口之间切换。
您需要访问isVisible()
的{{1}}和setVisible()
方法才能隐藏/显示窗口。因为,我不知道JFrame
是什么,我将使用MainScreen
并创建它的两个实例(两个具有不同标题的窗口),然后在两者之间切换。
在StartScherm
的主要方法之外声明两个StartScherm
个实例,如下所示:
StartScherm
我们在main方法之外声明public class StartScherm extends JFrame {
static JFrameCloseEvent frame1;
static JFrameCloseEvent frame2;
public static void main(String[] args) {
//your main code initializing frame1 and frame2 goes here
}
}
和frame1
的原因是因为我们希望能够在frame2
类中引用它们。它们是Paneel
的原因是因为我们在main方法中初始化它们,而main是static
这就是原因。
既然我们必须将static
的实例作为第1帧和第2帧,我们可以在StartScherm
的主要方法中对它们进行不同的初始化,请参见下文:
StartScherm
我们将以类似的方式初始化frame2但是,使用不同的标题并将其可见性设置为false。见下文:
//already declared frame1 outside main method
frame1 = new JFrameCloseEvent();
frame1.setSize(800, 800);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setTitle("CityTours Default Language");
JPanel Paneel = new Paneel();
frame1.setContentPane(Paneel);
//frame1 be visible when program start
frame1.setVisible(true);
现在我们已初始化了frame2 = new JFrameCloseEvent();
frame2.setSize(800, 800);
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame2.setTitle("CityTours English Version");
JPanel Paneel2 = new Paneel();
frame2.setContentPane(Paneel2);
//set visibility to false because frame1 is visible at beginning
frame2.setVisible(false);
和frame1
。我们可以调整frame2
以正确实现Paneel
并切换frame1和frame2的可见性。为了在按钮上设置ActionListener
,我更喜欢以下方法:
ActionListener
如上所示,我将Eng = new JButton("Bring me to the English version");
Eng.setBounds(250, 20, 300, 20);
Eng.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(StartScherm.frame1.isVisible()) {
StartScherm.frame1.setVisible(false);
StartScherm.frame2.setVisible(true);
} else {
StartScherm.frame1.setVisible(true);
StartScherm.frame2.setVisible(false);
}
}
});
直接连接到按钮。由于ActionListener
和frame1
因此使用frame2
,因此他们将获得具有动作侦听器的相同按钮。单击该按钮后,将执行Paneel
,检查actionPerformed
是否可见或frame1
。如果frame2
可见,则会将其可见性设置为false,并将frame1
的可见性设置为true,否则将其他方式设置为true。
对您的代码进行上述更改,即正确实施ActionListener,如上所示,并确保frame2
和frame1
实例可在frame2
方法中访问。
我修改了你的代码使它可以运行,见下文(显然我删除了对MainScreen的引用,因为frame1和frame2之间的唯一区别是title)。
actionPerformed