0

我的表单出现了一个按钮网格出现问题。该表单应该显示一个按钮网格,这些按钮将用作简单战舰游戏的平台。

这是播放器网格面板的代码

package view;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JPanel;

public class PlayerPanel extends JPanel {

    private List<PositionButton> ButtonList;


    public PlayerPanel()
    {

        ButtonList = new ArrayList<PositionButton>();
        for(int i = 0;i < 10;i++)
            for(int j = 0;j < 10;j++)
            {
                ButtonList.add(new PositionButton(i,j));
            }
        while(ButtonList.iterator().hasNext())
        {
            this.add(ButtonList.iterator().next());
        }
        while(ButtonList.iterator().hasNext())
        {
            ButtonList.iterator().next().setVisible(true);
        }
    }

}

这是实际表单的类:

package view;

import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GameForm {


    private JFrame theFrame;
    private JPanel BoardPanel;
    private PlayerPanel p1Panel;
    private PlayerPanel p2Panel;



    public GameForm()
    {
        //set up the Frame
        theFrame = new JFrame();
        theFrame.setSize(new Dimension(800,500));
        theFrame.setVisible(true);
        theFrame.setResizable(false);
        theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //set up the board panel
        BoardPanel = new JPanel();
        theFrame.add(this.BoardPanel);
        //set up the first players board
        p1Panel = new PlayerPanel();
        p1Panel.setLayout(new GridLayout(0,0));
        this.BoardPanel.add(p1Panel);
        p1Panel.setSize(new Dimension(400,250));
        //set up the second players boards
        p2Panel = new PlayerPanel();
        p2Panel.setLayout(new GridLayout(0,0));
        this.BoardPanel.add(p2Panel);
        p2Panel.setSize(new Dimension(400,250));

        BoardPanel.setVisible(true);
        p1Panel.setVisible(true);
        p2Panel.setVisible(true);
    }
}

这是单个按钮的代码

package view;

import javax.swing.JButton;

public class PositionButton extends JButton {    

    private int x;
    private int y;      

    public PositionButton(int x, int y)
    {
        this.x = x;
        this.y = y;
        this.setVisible(true);
    }


    public int getX()
    {
        return this.x;
    }

    public int getY()
    {
        return this.y;  
    }               
}

我正在努力找出为什么我的按钮没有出现。提前谢谢你的帮助。

4

2 回答 2

4
于 2013-04-18T13:50:10.457 回答
1

代码的一个主要问题PositionButton是. 您似乎希望使用这些方法来确定 中按钮的坐标,但您必须将它们命名为其他名称。EG等getX()getY()GridLayoutgetXCoord()

尝试查看此 SSCCE 以获取提示。

import java.awt.*;
import javax.swing.*;
import java.util.ArrayList;

public class GameForm {

    private JFrame theFrame;
    private JPanel BoardPanel;
    private PlayerPanel p1Panel;
    private PlayerPanel p2Panel;

    public static void main(String[] args) {
        new GameForm();
    }

    public GameForm()
    {
        //set up the Frame
        theFrame = new JFrame();
        //set up the board panel
        BoardPanel = new JPanel(new BorderLayout());
        BoardPanel.setBackground(Color.BLUE);
        theFrame.add(this.BoardPanel);
        //set up the first players board
        p1Panel = new PlayerPanel();
        p1Panel.setBackground(Color.RED);
        this.BoardPanel.add(p1Panel);

        theFrame.setSize(new Dimension(800,500));
        theFrame.setVisible(true);
        theFrame.setResizable(false);
        theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

class PlayerPanel extends JPanel {

    private java.util.List<PositionButton> ButtonList;

    public PlayerPanel()
    {

        ButtonList = new ArrayList<PositionButton>();
        for(int i = 0;i < 10;i++)
            for(int j = 0;j < 10;j++)
            {
                PositionButton pb = new PositionButton(i,j);
                ButtonList.add(pb);
                add(pb);
            }
    }
}

class PositionButton extends JButton {

    private int x;
    private int y;

    public PositionButton(int x, int y)
    {
        this.x = x;
        this.y = y;
        this.setVisible(true);
    }


    public int getXCoord()
    {
        return this.x;
    }

    public int getYCoord()
    {
        return this.y;
    }
}
于 2013-04-18T14:07:10.363 回答