-1

関連するケース (グリッドの 2 行目) で表示したいのですが、私の JLabel は私の Pawn クラスに含まれています。

if(i==1 && (j>-1 && j<8)) { new Pawn(colorr); }

Pawn を生成しますが、グリッド上に「label」という名前の JLabel が表示されません。

編集: コンテナの使用方法などを修正しましたが、JLabel の表示と Pawn ピースの移動に関する問題はまだ残っています。

また、後でポーンをグリッド上の別の位置に移動したいと考えています。

package coordboutons;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CoordBoutons extends JFrame {
JFrame frame;
private Color colorr=Color.RED;
//private Container[][] cp=new Container[8][8];  
CoordBoutons() {
    super("GridLayout");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    Container contenant = getContentPane();
    contenant.setLayout(new GridLayout(8, 8));

    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            contenant.add(new CaseEchiquier(i, j));
        }
    }

    pack();
    setVisible(true);
}

class CaseEchiquier extends JPanel {

    private int lin, col;
    protected Color color;


    CaseEchiquier(int i, int j) {
        lin = i;
        col = j;
        setPreferredSize(new Dimension(80, 75));
        setBackground((i + j) % 2 == 0 ? Color.WHITE : Color.GRAY);
        if(i==1 && (j>-1 && j<8)) { new Pawn(colorr); }       
        addMouseListener(new MouseAdapter() {


            @Override
            public void mousePressed(MouseEvent e){
                CaseEchiquier current =(CaseEchiquier)e.getSource(); // get the object that the user pressed
               // int linX = current.getLin();
               // int colY = current.getCol();
                System.out.println(lin+"   "+col);

            }



        });

    }
    public int getCol() {
        return col;
    }

    public int getLin() {
        return lin;
    }

}

public class ChessPiece
{
    Color color;
    JLabel label;

}

public class Pawn extends ChessPiece
{
    public Pawn(Color c)
    {
        this.color = c;
        setBackground(colorr);
        System.out.println("YATAAA !");
        this.label = new JLabel(new ImageIcon("bp.png"));
        //I need to show this label !;

    }

    public Color getColor()
    {
        return this.color;
    }

}


public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            JFrame.setDefaultLookAndFeelDecorated(true);
            CoordBoutons coordBoutons = new CoordBoutons();
        }
    });
}
}
4

1 に答える 1

1

あなたのコードで見た 2 つの大きな問題を指摘したいと思います (他にもある可能性があります :))

  1. CoordButtonsコンストラクターでは、同じことを 64 回実行しています。私が理解したことによると、8x8 のグリッドを作成したいと考えています。したがって、コンテンツ ペインのレイアウトを 8x8 グリッドに設定し、それにパネルを追加します。

     CoordBoutons() {
           super("GridLayout");
           setDefaultCloseOperation(EXIT_ON_CLOSE);     
           getContentPane().setLayout(new GridLayout(8, 8));
           for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                   getContentPane().add(new CaseEchiquier(i, j));
                }
            }
            pack();
            setVisible(true);
     }
    
  2. CaseEchiquierクラスでは、オブジェクトを作成するだけでは、Pawnそれを表示するのに役立ちません。Pawn代わりに、オブジェクトのラベルをJPanel

       if(i==1 && (j>-1 && j<8)) { 
        Pawn p = new Pawn(colorr);
        add(p.label);
       }
    
于 2013-05-10T03:14:37.800 に答える