将数据从GUI传递到Java中的另一个类

时间:2015-05-09 10:15:21

标签: java user-interface

我正在做一个包含创建战舰游戏的项目。 我有以下课程:

  • Battleship(主要课程)
  • Player
  • Game
  • Board
  • Visualisation(我有gridLayout JButtons的GUI类,用户按下JButton想要插入船只的地方。

首先,创建一个新的Game,其中包含一些参数,例如电路板的大小。然后在课程Game内我做了一个新的Visualisation。在本课程中,我完成了actionListeneractionPerformed

我的问题是我如何传递信息,例如,我已按下JButton(将gridLayout的那个单元格中的船只插入到Game类} {}}} ?这就是我所拥有的:

Class Game
 private Player _user;
 private Player _computer;

然后我想检查_user的董事会是否有可以插入船的位置。 _user.MethodOfClassPlayer();

Class Player
  private int id;
  private String name;
  private Board _boardPlayer
Class Board
  private int size;
  private int[][] _board = null ;

功能actionPerformed

  public void actionPerformed(ActionEvent e) {
    for ( int i = 0; i < tUsuariCPU.length; i++ ){
            for ( int j = 0; j < tUsuariCPU[i].length; j++ ){
                if ( e.getSource() == tUsuariCPU[i][j] ){
                        buttonPressedUser(i,j);
                        JButton temp = (JButton) e.getSource() ;
                        temp.setBackground(java.awt.Color.ORANGE);
    }

我想将JButton的信息传递给Game类,以了解该玩家的位置是否可用于放置该船。如果它可用,那么我将绘制JButton 我希望你能理解我。

2 个答案:

答案 0 :(得分:3)

考虑到其他答案,您可能需要使用import random numbers = [0,1,2,3,4,5,6,7,8,9] random.shuffle(numbers) def sayi(s): s[0:4] return s print sayi(numbers) Observers。 Observable是一个可由一个或几个观察者观察的类。观察者可以观察几个Observables。

示例:

Observable

以下是如何在一个示例主函数中将它们连接起来

public class Visualisation extends JFrame {
    private Integer num;
    private A myInnerClass;

    public Visualisation(Observer o) {
        num = 8;
        myInnerClass = new A();
        myInnerClass.setObserver(o);
    }

    public onButtonPressed(Event e) {
        myInnerClass.notifyMyObservers();
    }

    public class A extends Observable {
        public A() {
        }

        public void notifyMyObservers() {
            this.setChanged();
            this.notifyObservers(num); // the parameter can be any object
        }
    }
}

public class B implements Observer {
    public B() {
    }

    public void update(Observable observed, Object arg) {
        if (observed instance of A) {
            if (arg instance of Integer) {
                // ... 
            }
        }
    }
}

答案 1 :(得分:0)

您可以使用如下对话框类:

public class Visualisation extends JDialog {

    private Board board;

    public Game(Frame owner, boolean modal) {
        super(owner, modal);

        // add a Listener to your button to dispose the dialog after you save your data in board
        JButton yourButton = new JButton();
        yourButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                board = ....;
                dispose();
            }
        });
    }

    public Board show(){
        setVisible(true);
        return Board ;
    }
}

并在游戏类中使用:

Visualisation visualisationDialog = new Visualisation(null, true);
Board board = visualisationDialog .show();
//do whatever you want with the board from here now