Java Swing按钮没有出现在表单上



我有麻烦,我的形式有一个按钮的网格出现。该表单应该显示一个按钮网格,将被用作一个简单的战舰游戏的平台。

这是玩家网格面板的代码

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;  
    }               
}

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

  • 使用合适的布局管理器而不是AbsoluteLayout和从代码中计算位置

  • 要求AbsoluteLayout也使用Insets

  • 使用Gridlayout(int, int, inttap, inttap),

代码的一个主要问题是PositionButton覆盖了getX()getY()。似乎您希望使用这些方法来确定GridLayout中按钮的坐标,但是您将将它们命名为其他东西。例如:getXCoord()

试着看看这个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;
    }
}

相关内容

  • 没有找到相关文章

最新更新