gpt4 book ai didi

java - JFrame 非常小,使用空布局

转载 作者:行者123 更新时间:2023-11-29 09:41:12 26 4
gpt4 key购买 nike

您好,我正在编写一个简单的程序来显示框架。但是,当我键入 setLayout(null) 时,框架变得很小;但是如果我忽略这个命令,按钮总是在顶部中心有人可以指出我的错误吗?

import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

class theframe {

private static void create() {
JFrame frame = new JFrame("FrameDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Insets insets = frame.getInsets();
frame.setSize(500 + insets.left + insets.right, 350 + insets.top + insets.bottom);
add(frame.getContentPane()); //my function add
frame.pack();
frame.setVisible(true);
}

public static void add(Container pane) {
pane.setLayout(null);
Insets insets = pane.getInsets();

JPanel p1 = new JPanel();
p1.setPreferredSize(new Dimension(500, 350));

JButton b1 = new JButton("one");
Dimension size = b1.getPreferredSize();
b1.setBounds(25 + insets.left, 5 + insets.top, size.width, size.height);

pane.add(p1);
p1.add(b1);
}

public static void main(String Args[]) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
create();
}
});
}
}

最佳答案

如果您看到 pack() 函数,它不在 JFrame.java 中,而是在 Window.java 中

public void pack() {
Container parent = this.parent;
if (parent != null && parent.getPeer() == null) {
parent.addNotify();
}
if (peer == null) {
addNotify();
}
Dimension newSize = getPreferredSize();
if (peer != null) {
setClientSize(newSize.width, newSize.height);
}

if(beforeFirstShow) {
isPacked = true;
}

validateUnconditionally();
}

现在,如果您在 Container.java 中看到 getPreferredSize() 函数

@Deprecated
public Dimension preferredSize() {
/* Avoid grabbing the lock if a reasonable cached size value
* is available.
*/
Dimension dim = prefSize;
if (dim == null || !(isPreferredSizeSet() || isValid())) {
synchronized (getTreeLock()) {
prefSize = (layoutMgr != null) ?
layoutMgr.preferredLayoutSize(this) :
super.preferredSize();
dim = prefSize;
}
}
if (dim != null){
return new Dimension(dim);
}
else{
return dim;
}
}

一切都归结为 layoutMgr.preferredLayoutSize(this);由于您没有设置布局(或 null),因此您遇到了这个问题。删除该语句或使用一些布局。

关于java - JFrame 非常小,使用空布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17858500/

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