Frame默认自带BorderLayout
用 frame.setLayout(null); 可以去除
然后可以 setBounds(x, y, w, h);setLocation(x, y); setSize(w, h);
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class FrameTest220517 {
public static void main(String...ags) {
Frame frame = new Frame("220517Test");
frame.setSize(1600, 900);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) { //点击关闭按钮后调用
System.exit(0);
}
});
System.out.println(frame.getLayout()); // 默认的布局 : java.awt.BorderLayout[hgap=0,vgap=0]
Button btn = new Button("Button");
btn.setBounds(80, 60, 200, 100); // 第一次设置按钮的位置和大小, 此时不起作用, 因为容器有布局
btn.setSize(400, 200); // 也不起作用
btn.setBackground(Color.PINK);
frame.add(btn);
frame.setVisible(true);
try {Thread.sleep(2000); }catch(Exception ex) {}
frame.setLayout(null); // 去除布局, 此时效果不会显现, 要再次设置位置或大小
btn.setBounds(80, 60, 200, 100); // 第二次设置位置和大小 , 此时可看到变化
try {Thread.sleep(1000); }catch(Exception ex) {}
btn.setSize(400, 200); // 起作用了
try {Thread.sleep(500); }catch(Exception ex) {}
btn.setSize(500, 300);
try {Thread.sleep(500); }catch(Exception ex) {}
btn.setSize(600, 400);
try {Thread.sleep(500); }catch(Exception ex) {}
btn.setSize(700, 500);
try {Thread.sleep(500); }catch(Exception ex) {}
btn.setSize(800, 600);
}
}