如何在java

时间:2015-12-05 11:28:15

标签: java

开始使用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操作将不起作用。 (错误:找不到符号)

请帮助我并向我解释我的错误。

2 个答案:

答案 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); } } }); 直接连接到按钮。由于ActionListenerframe1因此使用frame2,因此他们将获得具有动作侦听器的相同按钮。单击该按钮后,将执行Paneel,检查actionPerformed是否可见或frame1。如果frame2可见,则会将其可见性设置为false,并将frame1的可见性设置为true,否则将其他方式设置为true。

对您的代码进行上述更改,即正确实施ActionListener,如上所示,并确保frame2frame1实例可在frame2方法中访问。

我修改了你的代码使它可以运行,见下文(显然我删除了对MainScreen的引用,因为frame1和frame2之间的唯一区别是title)。

actionPerformed