gpt4 book ai didi

Java Swing - 位置测量单位?

转载 作者:行者123 更新时间:2023-12-02 06:04:18 26 4
gpt4 key购买 nike

我正在制作一个国际象棋游戏,我使用的是我在480x480处用油漆制作的棋盘。 ,并从某个 Sprite 中获取碎片并制作每一个 60x60和透明背景。我成功地将棋盘和棋子放到了屏幕上,但位置很乱。我正在使用空布局。我做了:

chessBoardLabel.setBounds(0, 0+25, 480, 480);

+25是因为Frame的东西在上面,看起来是在定位的时候考虑的。以作品为例:

for (int i = 0; i <= 7; i++)
whitePawnArray[i] = new whitePawnPiece(i*60,420+25);

参数设置 xPos 和 yPos。对于边界函数,我做了:

whitePawnLabel.setBounds(this.xPos, this.yPos, this.xPos+60, this.yPos+60);

但是这种情况发生了:http://i.imgur.com/MF9Njbi.jpg

如果我这样做:

for (int i = 0; i <= 7; i++)
whitePawnArray[i] = new whitePawnPiece(i*40,280+15);

发生这种情况:http://i.imgur.com/Pm1fMSp.jpg

第一:定位发生了什么?为什么它不符合我的预期?第二:第八 block 在荒无人烟的地方做什么?

package chess.game;
import java.util.*;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class chessMain extends JFrame{
public static void main (String arguments[]){

//Create White
whitePiece white_piece = new whitePiece();

whitePawnPiece[] whitePawnArray = new whitePawnPiece[8];
for (int i = 0; i <= 7; i++) whitePawnArray[i] = new whitePawnPiece(i*40,280+15);

/*whiteTowerPiece[] whiteTowerArray = new whiteTowerPiece[2];
whiteTowerArray[0] = new whiteTowerPiece(0,420);
whiteTowerArray[1] = new whiteTowerPiece(420,420);

whiteHorsePiece[] whiteHorseArray = new whiteHorsePiece[2];
whiteBishopPiece[] whiteBishopArray = new whiteBishopPiece[2];
whiteKingPiece whiteKing = new whiteKingPiece();
whiteQueenPiece whiteQueen = new whiteQueenPiece();*/

//Create Black

JFrame frame = new JFrame();
JPanel panel;

//Initialize
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Chess");
frame.setSize (640,640);
frame.setResizable(false);
frame.setLayout(null);
panel = new JPanel();
panel.setLayout(null);
frame.getContentPane().add(panel);

//draw chessBoard
ImageIcon chessBoardIcon = new ImageIcon(frame.getClass().getResource("/chess/art/Chess_Art/chessBoard.png"));
JLabel chessBoardLabel = new JLabel(chessBoardIcon);
panel.add(chessBoardLabel);
chessBoardLabel.setBounds(0, 0+25, 480, 480);
frame.setComponentZOrder(chessBoardLabel, 1);
frame.setComponentZOrder(panel, 2);
//draw Pawn
for (int i = 0; i<=7; i++){
panel.add(whitePawnArray[i].whitePawnLabel);
whitePawnArray[i].draw();
frame.setComponentZOrder(whitePawnArray[i].whitePawnLabel, 0);
}

frame.setVisible(true);

}
}

public class whitePawnPiece extends whitePiece{
JLabel whitePawnLabel;
ImageIcon whitePawnIcon;
public whitePawnPiece(int x, int y){
whitePawnIcon = new ImageIcon(getClass().getResource("/chess/art/Chess_Art/white/whitePawnPiece.png"));
whitePawnLabel = new JLabel (whitePawnIcon);
//whitePawnLabel.setOpaque(true);
this.xPos = x;
this.yPos = y;
//this.draw();
}

@Override
public void move(int newX, int newY){
this.xPos = (newX/60)*60; //calcular nova pos
this.yPos = (newY/60)*60;
this.draw();
}
/*public void possibleMoves(){
selectorMark.drawNew(this.xPos, this.yPos);
selectorMark.drawNew(this.xPos - 60, this.yPos - 60);
if (this.yPos == 420) selectorMark.drawNew(this.xPos - 120, this.yPos - 120);
}*/

@Override
public void draw(){
//whitePawnIcon.paintIcon(null, chessGUI2.getGraphics(), xPos, xPos);
whitePawnLabel.setBounds(this.xPos, this.yPos, this.xPos+60, this.yPos+60); //x, y, width, height
}

}

public class whitePiece{
int xPos, yPos;

public void move(){}
public void draw(){}

}

第一次写完整代码希望我编辑正确,呵呵

最佳答案

  • 请勿为此使用 CardLayout。
  • 我会使用一个 JPanel,该 JPanel 使用 GridLayout 来容纳国际象棋方形 JPanel 的 8x8 网格。
  • 我会将其放置在 JLayeredPane 中。
  • 我会将我的棋子添加到相应的国际象棋方 block JPanel 中。
  • 移动一 block 时,我会将其提升到 JLayeredPane 的拖动层。

另外:

  • 不要直接在 JFrame 等顶级窗口上绘图。
  • 不要重写绘制方法。
  • 相反,如果您必须进行绘图,请重写 JPanel 或 JComponent 的 paintComponent(Graphics g)
  • 但同样,如果您使用小型 JPanel 国际象棋方格创建棋盘,则可以轻松自然地将棋子放置在国际象棋方格上并放置得很好。

例如,请查看我的代码 here .

关于Java Swing - 位置测量单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com