GUI编程
图形用户界面(Graphical User Interface)
组件
- 窗口
- 弹窗
- 面板
- 文本框
- 列表框
- 按钮
- 图片
- 监听事件
- 鼠标
- 键盘事件
- 破解工具
GUI核心技术
Swing Awt
缺点:界面不美观,需要jre环境
优点:写小工具、了解MVC架构
Awt
Frame 窗口
public static void main(String[] args) {
Frame frame = new Frame("hello!");
frame.setVisible(true);
frame.setSize(400,400);
frame.setBackground(Color.cyan);
frame.setLocation(400,300);
frame.setResizable(false);
}
Panel 画板
public static void main(String[] args) {
Frame frame = new Frame();
// frame.setSize(400,400);
// frame.setLocation(400,300);
frame.setBounds(400,300,400,400);
frame.setBackground(new Color(0xA0A0D8));
frame.setLayout(null);
Panel panel = new Panel();
panel.setBackground(new Color(0x85D0B7));
panel.setBounds(50,50,300,300);
frame.add(panel);
frame.setVisible(true);
/*
监听事件
适配器
*/
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
// 结束程序
System.exit(0);
}
});
}
布局管理器
流式布局
public static void main(String[] args) {
Frame frame = new Frame("FlowLayout");
frame.setBounds(400,300,400,600);
frame.setBackground(new Color(0x8483E6E6));
Button btn1 = new Button("btn1");
Button btn2 = new Button("btn2");
Button btn3 = new Button("btn3");
// 参数:位置 水平间距 垂直间距
// frame.setLayout(new FlowLayout(0,10,20));
frame.setLayout(new FlowLayout(FlowLayout.LEFT));
frame.add(btn1);
frame.add(btn2);
frame.add(btn3);
frame.setVisible(true);
}
东西南北
public static void main(String[] args) {
Frame frame = new Frame("BorderLayout");
frame.setBounds(400,400,800,600);
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.setVisible(true);
}
表格布局
public static void main(String[] args) {
Frame frame = new Frame("GridLayout");
frame.setBounds(400,400,800,600);
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");
frame.setLayout(new GridLayout(3,2));
frame.add(btn1);
frame.add(btn2);
frame.add(btn3);
frame.add(btn4);
frame.add(btn5);
frame.pack(); //Java函数,自动选择最优的布局摆放
frame.setVisible(true);
}
花式布局-练手
public static void main(String[] args) {
Frame frame = new Frame("花式布局-练手");
frame.setBounds(400,400,800,600);
Panel panel1 = new Panel(new BorderLayout());
Panel panel2 = new Panel(new BorderLayout());
Panel panel3 = new Panel(new GridLayout(2,1));
Panel panel4 = new Panel(new GridLayout(2,2));
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");
Button btn7 = new Button("btn7");
Button btn8 = new Button("btn8");
Button btn9 = new Button("btn9");
Button btn10 = new Button("btn10");
frame.setLayout(new GridLayout(2,1));
panel1.setBackground(new Color(0x7070DE));
panel2.setBackground(new Color(0x70DEB9));
panel3.setBackground(new Color(0xE2E277));
panel4.setBackground(new Color(0xE29977));
// panel1.setBounds(0,0,800,300);
// panel2.setBounds(0,300,800,300);
// panel3.setBounds(150,0,500,300);
frame.add(panel1);
frame.add(panel2);
//p1
panel1.add(btn1,BorderLayout.WEST);
panel1.add(panel3,BorderLayout.CENTER);
panel1.add(btn2,BorderLayout.EAST);
//p2
panel2.add(btn3,BorderLayout.WEST);
panel2.add(panel4,BorderLayout.CENTER);
panel2.add(btn4,BorderLayout.EAST);
//p3
panel3.add(btn5);
panel3.add(btn6);
//p4
panel4.add(btn7);
panel4.add(btn8);
panel4.add(btn9);
panel4.add(btn10);
frame.setVisible(true);
}
事件监听
当某事发生时,干什么?
public class Demo01 {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setBounds(400,400,800,600);
Button btn1 = new Button("btn1");
MyActionListener myActionListener = new MyActionListener();
btn1.addActionListener(myActionListener);
frame.add(btn1);
frame.setVisible(true);
}
}
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("ActionEvent");
}
}
画笔
public class Demo01 {
public static void main(String[] args) {
new MyPaint().loadFrame();
}
}
class MyPaint extends Frame{
public void loadFrame(){
setBounds(400,400,800,600);
setVisible(true);
}
//画笔
@Override
public void paint(Graphics g) {
// super.paint(g);
g.setColor(new Color(0xE329B6));
g.drawLine(50,50,100,100);
g.setColor(new Color(0x29B8E3));
g.drawOval(100,100,50,50);
g.setColor(new Color(0x2948E3));
g.fill3DRect(200,200,100,150,false);
}
}
鼠标监听
MouseListener
MouseAdapter
窗口监听
WindowAdapter
键盘监听
class MyKeyListener extends KeyAdapter{
@Override
public void keyTyped(KeyEvent e) {
// super.keyTyped(e);
System.out.println(" 当前输入的字符是 : " +e.getKeyChar());
// int keyCode = e.getKeyCode();
// System.out.println(" 当前输入的keycode是 : " + e.getKeyCode());
// if(keyCode == KeyEvent.VK_J){
// System.out.println("按下了 J 键");
// }
}
}
Swing
窗口、面板
public void init(){
//JFrame
JFrame jf = new JFrame("Jframe");
jf.setBounds(400,400,400,400);
jf.setVisible(true);
jf.setBackground(Color.cyan);
//JLabel
JLabel jLabel = new JLabel("欢迎来到钢镚核恒!");
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
jf.add(jLabel);
//关闭窗口
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
弹窗
public class Demo02 {
public Demo02() {
JFrame jf = new JFrame("JFrame");
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jf.setBounds(400,400,400,400);
jf.setBackground(Color.cyan);
Container contentPane = jf.getContentPane();
//绝对布局
contentPane.setLayout(null);
JButton jb = new JButton("弹窗");
jb.setBackground(Color.pink);
jb.setBounds(10,10,150,100);
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new MyDialog();
}
});
jf.add(jb);
}
public static void main(String[] args) {
new Demo02();
}
}
class MyDialog extends JDialog{
public MyDialog() {
this.setVisible(true);
this.setBounds(100,100,200,300);
Container cp = this.getContentPane();
JLabel jl = new JLabel("欢迎来到钢镚核恒!");
cp.add(jl);
}
}
图片
public class Demo03 extends JFrame {
public Demo03() {
this.setBackground(Color.pink);
this.setBounds(400,400,400,600);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JLabel jl = new JLabel("ImageIcon");
//获取icon 的 url
URL url = Demo03.class.getResource("gb.jpg");
System.out.println("url : "+url);
ImageIcon imageIcon = new ImageIcon(url);
jl.setIcon(imageIcon);
jl.setHorizontalAlignment(SwingConstants.CENTER);
//获取容器
Container cp = this.getContentPane();
cp.add(jl);
this.setVisible(true);
}
public static void main(String[] args) {
new Demo03();
}
}
画板
public Demo04() {
Container cp = this.getContentPane();
cp.setLayout(new GridLayout(2,2));
JPanel jp1 = new JPanel(new GridLayout(2,1));
JPanel jp2 = new JPanel(new GridLayout(1,2));
JPanel jp3 = new JPanel(new GridLayout(2,2));
JPanel jp4 = new JPanel(new GridLayout(3,2));
JButton jb1 = new JButton("1");
JButton jb2 = new JButton("1");
JButton jb3 = new JButton("2");
JButton jb4 = new JButton("2");
JButton jb5 = new JButton("3");
JButton jb6 = new JButton("3");
JButton jb7 = new JButton("3");
JButton jb8 = new JButton("3");
JButton jb9 = new JButton("4");
JButton jb10 = new JButton("4");
JButton jb11 = new JButton("4");
JButton jb12 = new JButton("4");
JButton jb13 = new JButton("4");
jp1.add(jb1);
jp1.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
jp3.add(jb5);
jp3.add(jb6);
jp3.add(jb7);
jp3.add(jb8);
jp4.add(jb9);
jp4.add(jb10);
jp4.add(jb11);
jp4.add(jb12);
jp4.add(jb13);
cp.add(jp1);
cp.add(jp2);
cp.add(jp3);
cp.add(jp4);
this.setVisible(true);
this.setBounds(400,400,400,400);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
下拉框
public Demo05() {
Container cp = this.getContentPane();
//文本框
JTextArea jTextArea = new JTextArea("欢迎来到钢镚核恒!",30,40);
// scroll面板
JScrollPane jScrollPane = new JScrollPane(jTextArea);
cp.add(jScrollPane);
this.setVisible(true);
this.setBounds(400,400,400,400);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
单选框、多选框
public Demo06() {
Container cp = this.getContentPane();
cp.setLayout(new GridLayout(2,4));
//单选框
JRadioButton jrb1 = new JRadioButton("JRadioButton1");
JRadioButton jrb2 = new JRadioButton("JRadioButton2");
JRadioButton jrb3 = new JRadioButton("JRadioButton3");
JRadioButton jrb4 = new JRadioButton("JRadioButton4");
// 多选框
JCheckBox jcb1 = new JCheckBox("JCheckBox1");
JCheckBox jcb2 = new JCheckBox("JCheckBox2");
JCheckBox jcb3 = new JCheckBox("JCheckBox3");
JCheckBox jcb4 = new JCheckBox("JCheckBox4");
//分组-单选
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(jrb1);
buttonGroup.add(jrb2);
buttonGroup.add(jrb3);
buttonGroup.add(jrb4);
cp.add(jrb1);
cp.add(jrb2);
cp.add(jrb3);
cp.add(jrb4);
cp.add(jcb1);
cp.add(jcb2);
cp.add(jcb3);
cp.add(jcb4);
this.setVisible(true);
this.setBounds(400,400,400,400);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
列表
public Demo07() throws HeadlessException {
Container cp = this.getContentPane();
cp.setLayout(new GridLayout(2,1));
//下拉框
JComboBox jComboBox = new JComboBox();
jComboBox.addItem("正在热映");
jComboBox.addItem("已下架");
jComboBox.addItem("即将上映");
cp.add(jComboBox);
//列表框
String[] list = {"1","2","3","4"};
JList jList = new JList(list);
cp.add(jList);
this.setVisible(true);
this.setBounds(400,400,400,400);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
总结
思路
顶级窗口:Frame、JFrame
容器:Container:getContentPane()
布局:FlowLayout、GridLayout、BorderLayout
组件:按钮、文本框等
窗口的显示与退出
关系
容器在窗口上
组件在容器上
布局是窗口或容器的一种排列属性
注:JFrame 上面自带一层容器