创建一个窗口
import java.awt.*;
public class WindowDemo {
public static void main(String[] args) {
//创建窗口window对象
Frame frame = new Frame("测试窗口");
//设置大小
frame.setSize(500,300);
//设置位置
frame.setLocation(100,100);
//设置为可见
frame.setVisible(true);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1URDp9At-1605521621959)(C:\Users\DZHooo\Pictures\Saved Pictures\微信图片_20201115185008.png)]
创建一个Panel容器放入window
import java.awt.*;
public class WindowDemo {
public static void main(String[] args) {
//创建一个window对象,因为panel以及其他容器,都不能独立存在,必须依附于window存在
Frame frame = new Frame("这里演示Panel");
//创建一个Panel
Panel p = new Panel();
//创建文本框和按钮,放入Panel
p.add(new TextField("这是一个测试文本"));
p.add(new Button("这是一个测试按钮"));
//把Panel放入window
frame.add(p);
//同时设置大小位置
frame.setBounds(100,100,500,300);
frame.setVisible(true);
}
}
按钮文字可能出现乱码,因为idea是UTF-8,要改成和操作系统一样的GBK才行
解决方法:
在VM options输入 -Dfile.encoding=gbk
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZjiEhpuf-1605521621963)(C:\Users\DZHooo\Pictures\Saved Pictures\微信图片_20201115185920.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MWg0vzjo-1605521621965)(C:\Users\DZHooo\Pictures\Saved Pictures\微信图片_202011151859201.png)]
重新设置布局(FLowLayout)
用**setLayout()**设置布局管理器
Frame frame = new Frame("这是布局演示");
frame.setLayout(new FlowLayout(FlowLayout.CENTER,20,20));//对齐方式 垂直间距 水平间距
for (int i = 0; i < 100; i++) {
frame.add(new Button(""+i));
}
//设置最佳大小
frame.pack();
frame.setBounds(100,100,1500,1000);
frame.setVisible(true);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sEY7Z1m9-1605521621967)(C:\Users\DZHooo\AppData\Roaming\Typora\typora-user-images\image-20201115193913511.png)]
重新设置布局(BorderLayout)
Frame frame = new Frame("这里测试BorderLayout");
frame.setLayout(new BorderLayout(30,10));
frame.add(new Button("东部按钮"),BorderLayout.EAST);
frame.add(new Button("西部按钮"),BorderLayout.WEST);
frame.add(new Button("南部按钮"),BorderLayout.SOUTH);
frame.add(new Button("北部按钮"),BorderLayout.NORTH);
frame.add(new Button("中部按钮"));
frame.pack();
frame.setBounds(100,100,500,300);
frame.setVisible(true);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-en1vKqNt-1605521621970)(C:\Users\DZHooo\AppData\Roaming\Typora\typora-user-images\image-20201115194253773.png)]
如果不往某个区域放入组件,那么这个区域不会空白出来,而是被其他区域占用
例如:中间区域要放文本和按钮,可以先放入Panel,再把文本和按钮放入Panel里面。
重新设置布局(GridLayout)
Frame默认布局管理器是BorderLayout
Panel默认布局管理器是FlowLayout
pack 有啥用
如果你没设置窗口大小啥的,大概就是撑开窗口,不然窗口会很小很小。
`void pack()
使此窗口的大小适合其子组件的首选大小和布局。 `
这里是在Frame里放两个Panel,Window布局Panel,Panel再布局组件。
//计算器
Frame frame = new Frame("这里演示GridLayout");
Panel p = new Panel();
p.add(new TextField(30));
frame.add(p,BorderLayout.NORTH);
Panel p2 = new Panel(new GridLayout(3,5,4,4));
for (int i = 0; i < 10; i++) {
p2.add(new Button(i+""));
}
p2.add(new Button("+"));
p2.add(new Button("-"));
p2.add(new Button("/"));
p2.add(new Button("*"));
p2.add(new Button("."));
frame.add(p2);
frame.pack();
frame.setVisible(true);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvZ2wzTz-1605521621972)(C:\Users\DZHooo\AppData\Roaming\Typora\typora-user-images\image-20201116154053128.png)]
重新设置布局(CardLayout)
卡片一张一张叠着
需要创建CardLayout对象,因为下面用到CardLayout的方法
Frame frame = new Frame("这里演示CardLayout");
Panel p = new Panel();
CardLayout card = new CardLayout();
p.setLayout(card);
String[] s = {"第一张","第二张","第三张","第四张","第五张"};
for (int i = 0; i < 5; i++) {
p.add(s[i],new Button(s[i]));
}
frame.add(p);
Panel p2 = new Panel();
Button b1 = new Button("上一张");
Button b2 = new Button("下一张");
Button b3 = new Button("第一张");
Button b4 = new Button("最后一张");
Button b5 = new Button("第三张");
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();
switch (actionCommand){
case "上一张":
card.previous(p);
break;
case "下一张":
card.next(p);
break;
case "第一张":
card.first(p);
break;
case "最后一张":
card.last(p);
break;
case "第三张":
card.show(p,"第三张");
break;
}
}
};
b1.addActionListener(actionListener);
b2.addActionListener(actionListener);
b3.addActionListener(actionListener);
b4.addActionListener(actionListener);
b5.addActionListener(actionListener);
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
p2.add(b5);
frame.add(p2,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
Listener(actionListener);
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
p2.add(b5);
frame.add(p2,BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zd9GaJjd-1605521621973)(C:\Users\DZHooo\AppData\Roaming\Typora\typora-user-images\image-20201116161937815.png)]