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,那么底部和右边的灰色将是黑色的,就像它的意思一样。如何在不导致此问题的情况下禁用调整大小?
答案 0 :(得分:3)
您使用的是绝对布局(无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();