Java 向JFrame或layeredPane动态添加按钮 publicchessgamedemo(){ 尺寸板尺寸=新尺寸(600600); //使用分层窗格 layeredPane=新的JLayeredPane(); 添加(分层窗格); layeredPane.setPreferredSize(新维度(700700)); //创建一个将重置游戏的重置按钮 JButton按钮=新JButton(“重置”); 按钮。设置首选尺寸(新尺寸(50,50)); 添加(按钮,BorderLayout.EAST); //将棋盘添加到分层窗格 棋盘=新JPanel(); layeredPane.add(棋盘,JLayeredPane.DEFAULT_层); 棋盘布局(新网格布局(8,8)); 棋盘。设置首选大小(棋盘大小); 棋盘.立根(0,0,boardSize.width,boardSize.height); 对于(int i=0;i

Java 向JFrame或layeredPane动态添加按钮 publicchessgamedemo(){ 尺寸板尺寸=新尺寸(600600); //使用分层窗格 layeredPane=新的JLayeredPane(); 添加(分层窗格); layeredPane.setPreferredSize(新维度(700700)); //创建一个将重置游戏的重置按钮 JButton按钮=新JButton(“重置”); 按钮。设置首选尺寸(新尺寸(50,50)); 添加(按钮,BorderLayout.EAST); //将棋盘添加到分层窗格 棋盘=新JPanel(); layeredPane.add(棋盘,JLayeredPane.DEFAULT_层); 棋盘布局(新网格布局(8,8)); 棋盘。设置首选大小(棋盘大小); 棋盘.立根(0,0,boardSize.width,boardSize.height); 对于(int i=0;i,java,swing,jframe,jpanel,layout-manager,Java,Swing,Jframe,Jpanel,Layout Manager,正如你在这里看到的,我在一个面板中创建了一个棋盘,并将其添加到一个分层的窗格中,而该窗格又是框架的一部分。我的想法是有一个菜单栏和两个按钮,以使其看起来更为美观。但当我尝试添加按钮时,它会捕获框架的整个高度,而忽略我指定的尺寸。我只是I don’我看不到一个高的按钮延伸了整个窗口/框架的高度。这里有什么错误?我如何在这里动态添加正常大小的按钮?它正好位于棋盘旁边 但当我尝试添加按钮时,它会捕获帧的整个高度,忽略我指定的尺寸 这就是BorderLayout.EAST的工作方式。有关详细信息,请阅读

正如你在这里看到的,我在一个面板中创建了一个棋盘,并将其添加到一个分层的窗格中,而该窗格又是框架的一部分。我的想法是有一个菜单栏和两个按钮,以使其看起来更为美观。但当我尝试添加按钮时,它会捕获框架的整个高度,而忽略我指定的尺寸。我只是I don’我看不到一个高的按钮延伸了整个窗口/框架的高度。这里有什么错误?我如何在这里动态添加正常大小的按钮?它正好位于棋盘旁边

但当我尝试添加按钮时,它会捕获帧的整个高度,忽略我指定的尺寸

这就是BorderLayout.EAST的工作方式。有关详细信息,请阅读上Swing教程的部分

您始终可以嵌套布局管理器以获得所需的外观,例如:

public ChessGameDemo(){
Dimension boardSize = new Dimension(600, 600);

//  Using a Layered Pane 
layeredPane = new JLayeredPane();
add(layeredPane);
layeredPane.setPreferredSize(new Dimension(700,700));

//Create a reset button that will reset the game
JButton button = new JButton("Reset");
button.setPreferredSize(new Dimension(50,50));
add(button,BorderLayout.EAST);


//Add the chessboard to the Layered Pane 

chessBoard = new JPanel();
layeredPane.add(chessBoard, JLayeredPane.DEFAULT_LAYER);
chessBoard.setLayout( new GridLayout(8, 8) );
chessBoard.setPreferredSize( boardSize );
chessBoard.setBounds(0, 0, boardSize.width, boardSize.height);

for (int i = 0; i < 64; i++) {
    JPanel square = new JPanel( new BorderLayout() );
    chessBoard.add( square );

int row = (i / 8) % 2;
if (row == 0)
    square.setBackground( i % 2 == 0 ? Color.blue : Color.white );
else
    square.setBackground( i % 2 == 0 ? Color.white : Color.blue );
}
但当我尝试添加按钮时,它会捕获帧的整个高度,忽略我指定的尺寸

这就是BorderLayout.EAST的工作方式。有关详细信息,请阅读上Swing教程的部分

您始终可以嵌套布局管理器以获得所需的外观,例如:

public ChessGameDemo(){
Dimension boardSize = new Dimension(600, 600);

//  Using a Layered Pane 
layeredPane = new JLayeredPane();
add(layeredPane);
layeredPane.setPreferredSize(new Dimension(700,700));

//Create a reset button that will reset the game
JButton button = new JButton("Reset");
button.setPreferredSize(new Dimension(50,50));
add(button,BorderLayout.EAST);


//Add the chessboard to the Layered Pane 

chessBoard = new JPanel();
layeredPane.add(chessBoard, JLayeredPane.DEFAULT_LAYER);
chessBoard.setLayout( new GridLayout(8, 8) );
chessBoard.setPreferredSize( boardSize );
chessBoard.setBounds(0, 0, boardSize.width, boardSize.height);

for (int i = 0; i < 64; i++) {
    JPanel square = new JPanel( new BorderLayout() );
    chessBoard.add( square );

int row = (i / 8) % 2;
if (row == 0)
    square.setBackground( i % 2 == 0 ? Color.blue : Color.white );
else
    square.setBackground( i % 2 == 0 ? Color.white : Color.blue );
}