gpt4 book ai didi

java - 在同一个 JPanel 上移动不同的元素

转载 作者:行者123 更新时间:2023-12-01 11:42:27 24 4
gpt4 key购买 nike

所以,自从我上一个问题以来,我已经找到了一种方法,并且改变了我现在做每件事的方式。

我当前的问题是:我有三个按钮和一个文本字段,我想将它们添加到我的单一 JPanel 中。我希望文本字段位于按钮下方并居中。有没有一种方法可以使用正常布局轻松完成此操作,以及如何做这样的事情?

此处代码

public class FarkleWindow extends JFrame{
public FarkleWindow()
{
this.setTitle("Farkle!");
this.setSize(windowWidth,windowHeight);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
inititalizeWindow();
addButtonListener();

this.setVisible(true);
}

private void inititalizeWindow() {

gameBoard = new FarkleGameBoard();
game = new FarkleGame();

roll = new JButton("Roll First Time");
reroll = new JButton("Roll Again!");
endTurn = new JButton("Let The Other Player Roll!");

gameBoard.add(roll, BorderLayout.CENTER);
gameBoard.add(reroll, BorderLayout.CENTER);
gameBoard.add(endTurn, BorderLayout.CENTER);

playerTurn = new JTextField();
if(game.isPlayer1Turn())
playerTurn.setText(game.getP1() + "\'s Score Turn Score Is " + game.getTurnScore());
else
playerTurn.setText(game.getP2() + "\'s Score Turn Score Is " + game.getTurnScore());

playerTurn.setEditable(false);

gameBoard.add(playerTurn, BorderLayout.SOUTH);

this.add(gameBoard, BorderLayout.CENTER);
repaint();
}
}

public class FarkleGameBoard extends JPanel{
public void paintComponent(Graphics g)
{
g.setColor(mainBackGround);
g.fillRect(0,0,2*playerDiceWidth+tossingAreaWidth+2*player1diceX,
playerDiceHeight+2*player1diceY);

g.setColor(diceArea);
g.fillRect(player1diceX,player1diceY,playerDiceWidth, playerDiceHeight);
g.fillRect(player1diceX+tossingAreaWidth,player1diceY,playerDiceWidth, playerDiceHeight);

g.setColor(scoreBoard);
g.fillRect(player1diceX+playerDiceWidth+currentScoreX, player1diceY+currentScoreY,
currentScoreWidth,currentScoreHeight);
g.fillRect(player1diceX+playerDiceWidth+runScoreX, player1diceY+runScoreY,
runScoreWidth,runScoreHeight);
}
}

在阅读了一些 API 后,我通常对布局管理器及其工作原理感到困惑。任何帮助都会很棒。

最佳答案

为按钮创建一个面板:

JPanel buttonPanel = new JPanel();
buttonPanel.add(button1);
buttonPanel.add(button2);
buttonPanel.add(button3);

为文本字段创建另一个面板:

JPanel textPanel = new JPanel( FlowLayout.CENTER );
textPanel.add( textField );

现在可以使用 BoxLayout 垂直显示面板并将该面板添加到框架中:

Box main = Box.createVerticalBox();
main.add(buttonPanel);
main.add(textPanel);
add(main, BorderLayout.SOUTH);

永远不要认为您必须使用一个面板。只需从逻辑上分解布局即可。

当然有很多方法可以做到这一点。这只是一种方法。从 Layout Managers 上的 Swing 教程了解每个布局管理器的基础知识

关于java - 在同一个 JPanel 上移动不同的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29423199/

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