Java Swing用另一个文件中的组件打开一个新按钮

时间:2012-07-21 19:04:49

标签: java eclipse swing

我为基本的Java Swing窗口编写了代码,现在我想在另一个窗口中运行游戏。窗口基本上是暂时的,直到用户点击按钮。这是第一个窗口的代码:

    import javax.swing.*;

public class Main extends Game {
    public static int height = 300;
    public static int width = 200;
    public String x = "X", y = "Y", player1, player2;
    public String[] grid;

    public static void main(String args[]) {
/*--------------------------- DECLARATIONS ----------------------------*/
        JFrame sudwin = new JFrame("Tic tac toe");
        JLabel label1 = new JLabel("<html><b>Welcome to Tic Tac Toe!</b></html>");  
        JLabel label2 = new JLabel("Player 1:");
        JLabel label3 = new JLabel("Player 2:");
        JLabel label4 = new JLabel("<html>Enter your names in the boxes, then </br>" + "click the start button to begin!</html>");
        JLabel label5 = new JLabel("Version 0.1");
        JTextField np1 = new JTextField();
        JTextField np2 = new JTextField();
        JButton btstart = new JButton("Start");

        sudwin.getContentPane().add(label1);
        sudwin.getContentPane().add(label2);
        sudwin.getContentPane().add(label3);
        sudwin.getContentPane().add(label4);
        sudwin.getContentPane().add(np1);
        sudwin.getContentPane().add(np2);
        sudwin.getContentPane().add(btstart);
        sudwin.getContentPane().add(label5);
/*--------------------------- METHODS ---------------------------------*/
        sudwin.setSize(width, height);
        sudwin.setVisible(true);
        sudwin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        sudwin.setLocationRelativeTo(null);
        sudwin.getContentPane().setLayout(null);

        label1.setBounds(26, 11, 156, 14);
        label2.setBounds(10, 102, 100, 10);
        label3.setBounds(10, 144, 100, 10);
        label4.setBounds(10, 39, 172, 52);
        label5.setBounds(10, 241, 100, 14);
        np1.setBounds(10, 113, 111, 20);
        np2.setBounds(10, 156, 111, 20);
        btstart.setBounds(50, 202, 100, 28);

        btstart.addActionListener(new act1());
    }
/*--------------------------- EVENT HANDLERS ----------------------------*/
    static class act1 implements ActionListener {
        public void actionPerformed(ActionEvent e) {

        }
    }
}

基本上,我有2个java文件:Main.java和Game.java

Main.java有上面的代码,它完美地执行,Game.Java有Jlabels和JFrame,但默认情况下它是不可见的。如何让Main.java识别Game.java中的所有声明并在单击按钮时使其可见?

我在使用Eclipse的Windows XP上。

2 个答案:

答案 0 :(得分:3)

您不希望将所有Game.java字段都提供给Main.java,但您想要的是一种可以调用的方法,例如public void setGameVisible()。然后在你的Main.java中你将有一个Game.java实例,Game game = new Game()然后你可以在单击按钮时执行game.setGameVisible()。在这种方法中,您将拥有使Game.java组件可见的所有逻辑。

通常,您不希望将字段设为公开。在encapsulation的一般概念中,您希望通过方法将一个类的字段提供给其他类。例如。

public class Main
{
  protected String gameName = "Super Awesome Game";

  public String getName()
  {
    return gameName;
  }
}

这样其他人就无法更改String gameName,如果它是公共的,他们可以做到。保持字段protected允许Main.java的子类仍然可以访问这些字段。

答案 1 :(得分:1)

根据Matt给你的建议,在你的动作听众中,你很简单想要隐瞒新的课程&amp;显示窗口。

static class act1 implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        OtherClass other = new OtherClass();
        other.setVisible(); // assuming we are a window of some type
    }
}

如果这些类在同一个包中,您将不需要先进行mport,否则,不要忘记先导入该类