gpt4 book ai didi

java - 为什么这个 JPanel 实例的大小不正确?

转载 作者:行者123 更新时间:2023-12-02 05:27:03 27 4
gpt4 key购买 nike

当我运行此代码时,我的面板实例内部显示大约 20 x 20 像素,而不是我尝试将其设置为 300、400。有人可以帮我找出原因吗?显然我对 swing 或 java2D 不太有经验。谢谢

编辑:我尝试以尺寸 ​​600、600 显示面板,并在其中显示尺寸为 300、400 的蓝色面板

//Application.java

import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.*; //for Color

public class Application extends JFrame {

public Application() {

initUI();
}

private void initUI() {
//to put panels in here I have to write the class that defines them
//such as Board. Theyll all extend JPanel and import it!

Board brd = new Board();
setSize(600, 600);
setTitle("Application");

Panels inner = new Panels(300, 400);
brd.add(inner);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null); //Performed on JFrame
getContentPane().add(brd);
}

public static void main (String[] args) {

EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Application ex = new Application();
ex.setVisible(true);

}
});
} //end main()

}

//Board.java


import javax.swing.JPanel;

public class Board extends JPanel {

public Board() {}

} //end Board

//Panels.java

import javax.swing.JPanel;
import java.awt.*;

public class Panels extends JPanel {

public int width;
public int height;

public Panels(int w, int h) {

width = w;
height = h;

setSize(w, h);
setBackground(Color.BLUE);
}

//methods
}

最佳答案

首先,您需要阅读并理解 Laying Out Components Within a Container ...

您面临的问题是 Board 默认情况下使用 FlowLayout。您可以将其布局管理器更改为 BorderLayout 之类的内容,并且 Panels 将填充可用空间。

像素完美布局是现代 UI 设计中的一种幻觉。影响组件个体尺寸的因素太多,您无法控制其中任何一个。 Swing 的设计初衷是与布局管理器一起工作,放弃它们将导致无穷无尽的问题,您将花费越来越多的时间来尝试纠正

如果您想在布局管理器期间影响组件的大小,您应该重写 getPreferredSize 方法并返回您想要的默认大小。

您应该在窗口上使用pack,因为这会将窗口打包在内容周围,以便内容区域满足布局管理器指定的要求

关于java - 为什么这个 JPanel 实例的大小不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25906207/

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