代码之家  ›  专栏  ›  技术社区  ›  user2317760

国际象棋分层问题

  •  0
  • user2317760  · 技术社区  · 11 年前

    我对Java相当陌生,我决定尝试用Swing制作一款国际象棋游戏。 我知道我的程序效率非常低,但这并不是我真正的问题。 我的问题是,在添加JButtons之后,我无法查看白色典当的图像,但如果我在添加按钮之前放入添加典当JLabel的代码,我可以看到典当。出于这个原因,我认为问题在于我有分层问题,我尝试用分层窗格替换面板,但没有成功。

    基本上,我想做的是让JButton和JLabel都显示在同一个正方形中,并保持按钮可点击。 此外,我真的不想加入任何新的导入,只想使用JButtons、JLabels等。 如果我的解释有点混乱,很抱歉,提前谢谢。 这是我的代码:

    private JFrame frame = new JFrame();
    private JPanel[][] square = new JPanel[8][8];
    private JButton[][] squareB = new JButton[8][8];
    private JPanel blank[] = new JPanel[6];
    private JButton newGame = new JButton("New Game");
    private JButton exitGame = new JButton("Exit");
    
    ArrayList <Chess> pieces = new ArrayList<Chess>();
    ChessGame() throws IOException
    {   
    
        frame.setLayout(new GridLayout(9,8));
        frame.setSize(800,900);
        for(int x=0; x<8; x++)
        {
            for(int y=0; y<8; y++)
            {
                square[x][y] = new JPanel();
                square[x][y].setSize(100,100);
            }
        }
    
        for(int y=0; y<8; y++)
        {
            for(int x=0; x<8; x++)
            {
                frame.add(square[x][y]);
                if(y%2==0)
                    if(x%2==0)
                        square[x][y].setBackground(Color.cyan);
                    else
                        square[x][y].setBackground(Color.blue);
                else
                    if(x%2==0)
                        square[x][y].setBackground(Color.blue);
                    else
                        square[x][y].setBackground(Color.cyan);
            }
        }
        for(int x=0; x<8; x++)
        {
            for(int y=0; y<8; y++)
            {
                squareB[x][y] = new JButton();
                squareB[x][y] = new Chess(x,y);
                square[x][y].add(squareB[x][y]);
                squareB[x][y].setSize(square[x][y].getSize());
                squareB[x][y].setMargin(new Insets(0, 0, 100, 100));
                squareB[x][y].setContentAreaFilled( false );  
                squareB[x][y].setOpaque(false);
                squareB[x][y].setContentAreaFilled(false);
                squareB[x][y].setBorderPainted(false);
                squareB[x][y].addActionListener(this);
            }
        }
        for(int x=0; x<6; x++)
        {
            blank[x] = new JPanel();
            frame.add(blank[x]);
            if(x==2)
            {
                frame.add(newGame);
                frame.add(exitGame);
            }
        }
    
        JLabel WPawn = new JLabel(new ImageIcon(((new ImageIcon("C:\\Users\\Matthew\\Desktop\\Chess Pieces\\WPawn.png")).getImage()).getScaledInstance(80, 83, java.awt.Image.SCALE_SMOOTH)));
        squareB[1][1].add(WPawn);
    
        newGame.addActionListener(this);
        exitGame.addActionListener(this);
        frame.setVisible(true);
    }
    public static void main(String[] args) throws IOException
    {
        new ChessGame();
    }
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   MadProgrammer    11 年前

    而不是尝试添加 JLabel JButton ,它没有布局管理器,设置 按扭 s图标

    Image WPawn = new ImageIcon(ImageIcon("C:\\Users\\Matthew\\Desktop\\Chess Pieces\\WPawn.png").getImage().getScaledInstance(80, 83, java.awt.Image.SCALE_SMOOTH));
    squareB[1][1].setIcon(WPawn);
    

    你可能想仔细看看 How to use Buttons

    第页 我也推荐 ImageIO 结束 ImageIcon 用于读取图像