0

私は Java にかなり慣れていないので、Swing でチェス ゲームを作ろうと決心しました。私のプログラムが非常に非効率であることはわかっていますが、それは私の問題ではありません。私の問題は、JButton を追加した後に白いポーンの画像を表示できないことですが、ボタンを追加する前にポーン JLabel を追加するコードを配置すると、ポーンが表示されます。このため、レイヤリングに問題があることが問題であると考え、パネルを LayeredPanes に置き換えてみましたが、うまくいきませんでした。

基本的に、私がやりたいことは、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();
}
4

1 に答える 1

1

レイアウト マネージャーのない にを追加しようとする代わりにJLabel、s アイコンを設定します。JButtonJButton

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

ボタンの使用方法を詳しく見てみたいと思うかもしれません

Ps画像の読み取りにもお勧めImageIOしますImageIcon

于 2013-04-25T01:04:10.477 に答える