经常使用组件和用途:java
GUI核心技术:Swing AWT
1.界面不美观
2.须要jre环境web
1.能够写出内心想要的小工具
2.工做时可能要维护Swing界面
3.了解MVC架构,了解监听器编程
1.包含不少类和接口! GUI:图形 用户 界面编程
2.元素:窗口 按钮 文本框
3.java.awt包架构
import java.awt.*; //GUI的第一个界面 public class TestFrame { public static void main(String[] args) { //Frame.JDK 看源码:按Ctrl再点击类 Frame frame= new Frame("个人第一个Java图像界面窗口"); //须要设置可见性 frame.setVisible(true); //设置窗口大小 frame.setSize(400,400); //设置背景颜色 Color类 frame.setBackground(Color.yellow);//frame.setBackground(new Color(1,1,1)); 也能够经过RGB输入颜色 //弹出初始位置 frame.setLocation(200,200); //设置大小固定 frame.setResizable(false); } }
界面为:
出现问题:窗口关不掉!!!!ide
public class TestFrame2 { public static void main(String[] args) { //展现多个窗口 new MyFrame myFrame1=new MyFrame(100,100,200,200,Color.BLUE); MyFrame myFrame2= new MyFrame(300,100,200,200,Color.BLACK); MyFrame myFrame3= new MyFrame(100,300,200,200,Color.GREEN); MyFrame myFrame4= new MyFrame(300,300,200,200,Color.DARK_GRAY); } } class MyFrame extends Frame{ static int id=0;//可能存在多个窗口,咱们须要一个计数器 public MyFrame(int x,int y,int w,int h,Color color){ super(("Myframe"+(++id)));//每多一个窗口,id计数加一 setBounds(x,y,w,h); //位置和大小 setVisible(true); setBackground(color); } }
界面为:svg
用适配器模式添加监听事件,解决了窗口关闭的问题。函数
//Panel 能够当作一个空间 但不能单独存在 要放在Frame上 public class TestPanel { public static void main(String[] args) { Frame frame=new Frame(); //布局的概念 Layout Panel panel= new Panel(); //设置布局 frame.setLayout(null); //坐标 frame.setBounds(300,300,500,500); frame.setBackground(new Color(60, 100, 25)); //panel设置坐标 相对于fame panel.setBounds(50,50,400,400); panel.setBackground(new Color(75, 177, 120)); //frame.add frame.add(panel); frame.setVisible(true); //监听事件 监听窗口关闭事件 System.exit(0) /* 普通作法:须要重写所有方法 麻烦 frame.addWindowListener(new WindowListener() { @Override public void windowOpened(WindowEvent e) { } @Override public void windowClosing(WindowEvent e) { } @Override public void windowClosed(WindowEvent e) { } @Override public void windowIconified(WindowEvent e) { } @Override public void windowDeiconified(WindowEvent e) { } @Override public void windowActivated(WindowEvent e) { } @Override public void windowDeactivated(WindowEvent e) { } }); */ //适配器模式 不须要每一个都重写 不须要写的继承父类中默认方法 frame.addWindowListener(new WindowAdapter() { //窗口关闭时要作的事 @Override public void windowClosing(WindowEvent e) { //结束程序 System.exit(0); } });} }
public static void main(String[] args) { Frame frame=new Frame(); //组件 Button button1 = new Button("button1"); Button button2 = new Button("button2"); Button button3 = new Button("button3"); //设置为流式布局 // frame.setLayout(new FlowLayout()); //设置为靠左对齐 frame.setLayout(new FlowLayout(FlowLayout.LEFT)); frame.setSize(200,200); //把按钮添加上去 frame.add(button1); frame.add(button2); frame.add(button3); frame.setVisible(true);
public class TestBorderLayout { public static void main(String[] args) { Frame frame = new Frame("Test BorderLayout"); Button east = new Button("East"); Button west = new Button("West"); Button north = new Button("North"); Button south = new Button("South"); Button center = new Button("Center"); //放置按钮 不能自动填充,要挨个指定位置 frame.add(east,BorderLayout.EAST); frame.add(west,BorderLayout.WEST); frame.add(north,BorderLayout.NORTH); frame.add(south,BorderLayout.SOUTH); frame.add(center,BorderLayout.CENTER); frame.setSize(200,200); frame.setVisible(true); } }
import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class TestGridLayout { public static void main(String[] args) { Frame frame = new Frame(); Button btn1 = new Button("btn1"); Button btn2 = new Button("btn2"); Button btn3 = new Button("btn3"); Button btn4 = new Button("btn4"); Button btn5 = new Button("btn5"); Button btn6 = new Button("btn6"); frame.setLayout(new GridLayout(3,2)); frame.add(btn1); frame.add(btn2); frame.add(btn3); frame.add(btn4); frame.add(btn5); frame.add(btn6); frame.pack();//Java函数 自动使用优化布局 frame.setVisible(true); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } }
题目:实现如图架构
工具
public static void main(String[] args) { Frame frame = new Frame(); frame.setSize(400,300); frame.setBackground(new Color(4,56,88)); Panel panel1 = new Panel(); Panel panel2 = new Panel(); Panel panel3 = new Panel(); Panel panel4 = new Panel(); panel1.setLayout(new BorderLayout()); panel1.add(new Button("East-1"),BorderLayout.EAST); panel1.add(new Button("West-1"),BorderLayout.WEST); panel1.add(panel2,BorderLayout.CENTER); panel2.setLayout(new GridLayout(2,1)); panel2.add(new Button("Center-1")); panel2.add(new Button("Center-2")); panel3.setLayout(new BorderLayout()); panel3.add(new Button("East-2"),BorderLayout.EAST); panel3.add(new Button("West-2"),BorderLayout.WEST); panel3.add(panel4,BorderLayout.CENTER); panel4.setLayout(new GridLayout(2,2)); panel4.add(new Button("Center-5")); panel4.add(new Button("Center-6")); panel4.add(new Button("Center-7")); panel4.add(new Button("Center-8")); frame.setLayout(new GridLayout(2,1)); frame.add(panel1); frame.add(panel3); frame.pack(); frame.setVisible(true); }
1.Frame是一个顶级窗口布局
2.Panel没法单独显示,必须添加到某个容器中
3.布局管理器优化