如何将一个代码添加到四个类?

时间:2014-11-03 13:25:57

标签: java class

我有一个代码已经完成编码,但我意识到很难在代码中看到所以我想要做的是添加四个类,其中一个将用于Viewer,UserInput,Player和Controller。

  • 观众将看到游戏信息(最重要的是JPanel)
  • UserInput是让用户选择带按钮的选项。
  • 播放器是计算机信息的位置(CPU的功能)
  • 控制器是所有数学的所在,新游戏(按下新游戏按钮时重启),制作积分等等。

所以我创建了一个类,它应该通过运行该类

来启动所有类
            SSPPlayer player = new SSPPlayer();
            SSPViewer viewer = new SSPViewer();
            SSPController controller = new SSPController();
            SSPUserInput userInput = new SSPUserInput();

            JFrame frame1 = new JFrame( "SSPViewer" );
            frame1.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
            frame1.add( viewer );
            frame1.pack();
            frame1.setVisible( true );

            JFrame frame2 = new JFrame( "SSPUserInput" );
            frame2.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
            frame2.add( userInput );
            frame2.pack(); frame2.setVisible( true );
        }
    }

然而,问题是我到目前为止已经制作了两个类,它们应该在Viewer和UserInput的每个窗口中,但我只能让查看器工作。

查看者类

public class SSPViewer extends JFrame{

    private JPanel  resultatPanel;
    private JLabel  infoLabel, resultatLabel;
    private JTextField UserResult, CompResult;


    SSPViewer() {
        super("SSPViewer");
        setSize(600, 400);
        UI();
    }

    public void UI() {
        Container container = getContentPane();  

        resultatPanel = new JPanel(new GridLayout(2,2));  
        resultatPanel.setBackground(Color.WHITE);
        UserResult = new JTextField(" Dina vinster:  ");
        resultatPanel.add(användarResultat);
        CompResult= new JTextField(" Datorns vinster:  ");
        resultatPanel.add(datorResultat);
        infoLabel = new JLabel("Börja spela genom att ", JLabel.RIGHT);
        resultatPanel.add(infoLabel);    
        resultatLabel = new JLabel("använda knapparna längst ner!", JLabel.LEFT);
        resultatPanel.add(resultatLabel); 
        container.add("Center",resultatPanel);

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
    }
}

UserInPut类

public class SSPUserInput extends JFrame implements ActionListener {
    final int ROCK = 0, Sciss = 1, Paper= 2;


    private JButton Rock; 
    private JButton Scoss;  
    private JButton Paper; 
    private JButton newgame, exit;
    private JPanel  UserPanel, UserPanel1;

    SSPUserInput() {
        super("SSPUserInput");
        setSize(800 , 600);
        UI1();
    }
    public void UI1() {
        Container container = getContentPane();  

        UserPanel= new JPanel();
        UserPanel.setLayout(new GridLayout(0,4));
        UserPanel.add(new JLabel("Du väljer här:", JLabel.CENTER));
        Rock = new JButton("Rock");
        Sciss  = new JButton("Sciss");
        PAper = new JButton("Paper");

        Rock.addActionListener(this);
        Sciss.addActionListener(this);
        Paper.addActionListener(this);

        UserPanel.add(rock); 
        UserPanel.add(Sciss); 
        UserPanel.add(Paper);

        container.add("South", userpanel);

        UserPanel1= new JPanel();

        newgame= new JButton("New Game");
        exit= new JButton("Exit");
        exit.addActionListener(this);
        UserPanel1.add(exit);
        newgame.addActionListener(this);
        UserPanel1.add(newgame);
        container.add("North", UserPanel1);
    }

    public void actionPerformed(ActionEvent e) {
        int val = 0;

        if(e.getSource() == exit) {

            System.exit(0); 
        }
        else if(e.getSource() == newgame) {

        }
        else if (e.getSource() == Rock) {
            val = Rock;       
        }
        else if (e.getSource() == Sciss) {
            val = Sciss;
        }
        else {
            val = Paper; 
        }


    }

}

所以我现在想知道为什么它不起作用。好像我做得对,但是......

如果有人可以使用teamviewer或skype,我和你就会更容易。

编辑:如果您在代码中有不明白的地方。只是评论!

错误即时消息:

Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
    at java.awt.Container.checkNotAWindow(Unknown Source)
    at java.awt.Container.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at javax.swing.JFrame.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at Redovisning3.Test.main(Test.java:15)

解决了这个问题。为了解决我之前遇到的这个问题,只需让第15行和第22行作为评论一段时间,直到你完成所有课程。

1 个答案:

答案 0 :(得分:0)

我已经完成并写了如何解决我以前遇到的问题(因为将来有人和我一样有麻烦)。但是还有另一个问题,现在包含if-else语句。 所以我有一个课程,可以让你选择SCiss,纸张和摇滚。其中哪些是他们自己的号码。

  

Rock = 0,Sciss = 1,Paper = 2.

我在其中一个课程中使用了这个,因为需要知道你在按什么按钮。

public void actionPerformed(ActionEvent e) {
    int val = 0  ;

    if(e.getSource() == exit) {

        System.exit(0); 
    }
    else if(e.getSource() == Newgame) {
       //Nothing here yet.
    }
    else if (e.getSource() == Rock) {
        choice = Rock;       
    }
    else if (e.getSource() == Sciss) {
        choice = Sciss;
    }
    else {
        choice = Paper; 
    }
    Sum(choice );

我想要做的是当你按下这三个按钮中的一个按钮时,它应该保存数字总和(选择),然后转到另一个类来制作其他功能,我的意思是:< / strong>

 public void berakna(int val){
        Userchoice = choice ;     
        Compchoice = (int)(Math.random() * 3);
        resultatLabel.setHorizontalAlignment(0); 
        infoLabel.setHorizontalAlignment(0);   
        infoLabel.setText("Result round" + ++round +":");   

        if (Userchoice == Compchoice )
            resultatLabel.setText("Tie!!");   
        else if (Userchoice == Rock &&  Compchoice == Sciss|| 
                Userchoice == Sciss &&  Compchoice == Paper ||
                Userchoice == Paper &&  Compchoice == Rock ) {
            resultLabel.setText("You win! One more time?");
            UserResult.setText(" You won: " + ++UserWin + "pcs");
        }
        else { 
            result.setText(" You lose, Try one more time!");
            CompResult.setText(" Comp won: " + ++CompWin+ "st");
        }
    }
}

我在考虑使用返回,所以我尝试了但是它没有让我任何前进。所以想法会很棒。也没有错误。