gpt4 book ai didi

Java setResizable 问题

转载 作者:行者123 更新时间:2023-11-29 05:09:39 25 4
gpt4 key购买 nike

package data;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main extends JFrame implements Runnable {

private JPanel contentPane;
private JPanel pp = new JPanel();

Thread page = new Thread();

public void run() {
while (!Thread.interrupted()) {

}
}

public Main() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 640 + 16, 480 + 39);
contentPane = new JPanel();
contentPane.setBounds(0, 0, 640, 480);
contentPane.setLayout(null);
setContentPane(contentPane);

pp.setBounds(0, 0, 640, 480);
pp.setBackground(Color.BLACK);
contentPane.add(pp);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
frame.setResizable(false);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

}

以上代码有效,但 setResizable 会导致问题:http://i.stack.imgur.com/hQxPU.png

如果我要删除 setResizable,那么底部和右侧的灰色将变成黑色。如何在不导致此问题的情况下禁用调整大小?

最佳答案

您使用的是绝对布局(未设置 LayoutManager),黑色面板具有固定边界。这正是在调整父级大小时黑色面板不会填充其父级边界的原因。

解决方案:使用 LayoutManager 自动重新计算内容的边界以填充可用空间。

   // BorderLayout is your friend
contentPane.setLayout(new BorderLayout());
...
// delete this line, no need to set fixed bounds
// pp.setBounds(0, 0, 640, 480);

有关如何在 AWT/Swing 中使用布局管理器的更多信息:
The Java™ Tutorials - Using Layout Managers

布局管理器有两个目的:

  • 计算容器的最小/最大/首选大小
  • 通过在容器内设置边界来布局组件。

如果您希望黑色面板的大小为 640x480,并且窗口不可调整大小,您可以设置首选大小,然后打包窗口 ,使其大小适合内容的首选尺寸:

pp.setPreferredSize(new Dimension(640, 480));
...
pack();

关于Java setResizable 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29092884/

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