首页 > 编程语言 > 详细

Java GUI编程

时间:2021-02-24 15:25:00      阅读:19      评论:0      收藏:0      [点我收藏+]

GUI编程

1、GUI编程简介

  GUI核心技术:Swing和AWT

  不流行的原因:界面不美观和需要jre环境

 

2、AWT

  ①抽象的窗口工具,包含了很多类和接口

  ②类:java.awt

  ③AWT常用类

      技术分享图片

 

  2.1 组件和容器

    ①Frame

 1 public class TestFrame {
 2     public static void main(String[] args) {
 3         Frame frame=new Frame("我的第一个Frame窗口");
 4         //需要设置可见性
 5         frame.setVisible(true);
 6         //设置背景颜色
 7         frame.setBackground(new Color(38, 226, 85));
 8         //设置窗口大小
 9         frame.setSize(360,360);
10         //设置固定大小
11         frame.setResizable(false);
12         //设置初始位置
13         frame.setLocation(300,300);
14     }
15 }

          技术分享图片

    将Frame封装到类中

 1 public class TestFrame2 {
 2     public static void main(String[] args) {
 3         MyFrame myFrame1=new MyFrame(100,100,200,200,Color.blue);
 4         MyFrame myFrame2=new MyFrame(300,100,200,200,Color.green);
 5         MyFrame myFrame3=new MyFrame(100,300,200,200,Color.orange);
 6         MyFrame myFrame4=new MyFrame(300,300,200,200,Color.gray);
 7     }
 8 }
 9 ?
10 class MyFrame extends Frame{
11     static int id=0;
12     public MyFrame(int x,int y,int w,int h,Color color){
13         super("MyFrame"+(++id));
14         this.setBounds(x,y,w,h);
15         this.setBackground(color);
16         this.setResizable(false);
17         this.setVisible(true);
18     }
19 }

          技术分享图片

    ②Panel面板

 1 public class TestPanel {
 2     public static void main(String[] args) {
 3         Frame frame=new Frame("Frame窗口");
 4         Panel panel=new Panel();
 5         //设置布局   不设置,默认会置顶
 6         frame.setLayout(null);
 7         //设置位置和大小
 8         frame.setBounds(100,100,500,500);
 9         //设置背景颜色
10         frame.setBackground(new Color(151, 239, 50));
11         //panel设置位置,相对于frame而言
12         panel.setBounds(50,50,300,300);
13         panel.setBackground(new Color(250, 150, 25));
14         frame.add(panel);
15         frame.setVisible(true);
16         //监听事件,监听关闭事件
17         frame.addWindowListener(new WindowAdapter() {
18             //窗口点关闭时,需要做的事情
19             @Override
20             public void windowClosing(WindowEvent e) {
21                 System.exit(0);
22             }
23         });
24     }
25 }

          技术分享图片

 

    ③布局管理器

      1.流式布局

        FlowLayout从左向右排列所有组件,遇到边界就会折回下一行从新开始

 1 public class TestFlowLayout {
 2     public static void main(String[] args) {
 3         Frame frame=new Frame("Frame窗口");
 4         frame.setSize(300,300);
 5         //组件—按钮
 6         Button button1=new Button("buttton1");
 7         Button button2=new Button("buttton2");
 8         Button button3=new Button("buttton3");
 9         //设置为流式布局
10         frame.setLayout(new FlowLayout(FlowLayout.CENTER));//默认为居中,还可以改为FlowLayout.LEFT;FlowLayout.CENTER;v
11         frame.add(button1);
12         frame.add(button2);
13         frame.add(button3);
14         frame.setVisible(true);
15     }
16 }

      2.东西南北中

          技术分享图片

 1 public class TestBorderLayout {
 2     public static void main(String[] args) {
 3         Frame frame=new Frame("Frame窗口");
 4         Button east=new Button("East");
 5         Button west=new Button("West");
 6         Button center=new Button("Center");
 7         Button north=new Button("North");
 8         Button south=new Button("South");
 9         frame.add(east,BorderLayout.EAST);
10         frame.add(west,BorderLayout.WEST);
11         frame.add(center,BorderLayout.CENTER);
12         frame.add(north,BorderLayout.NORTH);
13         frame.add(south,BorderLayout.SOUTH);
14         frame.setSize(300,300);
15         frame.setVisible(true);
16     }
17 }

      3.表格布局GridLayout

 1 public class TestGridLayout {
 2     public static void main(String[] args) {
 3         Frame frame=new Frame("Frame窗口");
 4         Button btn1=new Button("btn1");
 5         Button btn2=new Button("btn2");
 6         Button btn3=new Button("btn3");
 7         Button btn4=new Button("btn4");
 8         Button btn5=new Button("btn5");
 9         Button btn6=new Button("btn6");
10         frame.setLayout(new GridLayout(3,2));//3行2列
11         frame.add(btn1);frame.add(btn2);frame.add(btn3);
12         frame.add(btn4);frame.add(btn5);frame.add(btn6);
13         frame.pack();//根据窗口里面的布局及组件的preferedSize来确定frame的最佳大小
14         frame.setVisible(true);
15     }
16 }

 

      练习:将布局进行分层,更细一层的结构可以通过多个panel来实现

 1 public class HomeWork1 {
 2     public static void main(String[] args) {
 3         Frame frame=new Frame("Frame窗口");
 4         frame.setLayout(new GridLayout(2,1));
 5         frame.setSize(300,200);
 6         frame.setVisible(true);
 7 ?
 8         Panel panel1=new Panel(new BorderLayout());
 9         Panel panel2=new Panel(new GridLayout(2,1));
10         Panel panel3=new Panel(new BorderLayout());
11         Panel panel4=new Panel(new GridLayout(2,2));
12 ?
13         panel2.add(new Button("p2-btn1"));
14         panel2.add(new Button("p2-btn2"));
15         panel1.add(new Button("WEST-1"),BorderLayout.WEST);
16         panel1.add(panel2,BorderLayout.CENTER);
17         panel1.add(new Button("EAST-1"),BorderLayout.EAST);
18         frame.add(panel1);
19 ?
20         panel4.add(new Button("p4-btn1"));panel4.add(new Button("p4-btn2"));
21         panel4.add(new Button("p4-btn3"));panel4.add(new Button("p4-btn4"));
22         panel3.add(new Button("WEST-2"),BorderLayout.WEST);
23         panel3.add(panel4,BorderLayout.CENTER);
24         panel3.add(new Button("EAST-2"),BorderLayout.EAST);
25         frame.add(panel3);
26 ?
27     }
28 }

            技术分享图片

 

  2.2 事件监听

    对组件设置监听器

 1 public class TestActionEvent {
 2     public static void main(String[] args) {
 3         Frame frame=new Frame("Frame窗口");
 4         Button btn=new Button("button");
 5         myActionListener listener=new myActionListener();
 6         btn.addActionListener(listener);
 7         frame.setSize(300,300);
 8         frame.add(btn);
 9         windoClose(frame);
10         frame.setVisible(true);
11     }
12     private static void windoClose(Frame frame){
13         frame.addWindowListener(new WindowAdapter() {
14             @Override
15             public void windowClosing(WindowEvent e) {
16                 System.exit(0);
17             }
18         });
19     }
20 }
21 ?
22 class myActionListener implements ActionListener{
23     @Override
24     public void actionPerformed(ActionEvent e) {
25         System.out.println("幸运");
26     }
27 }

 

    多个按钮共享一个事件

 1 class myActionListener implements ActionListener{
 2     @Override
 3     public void actionPerformed(ActionEvent e) {
 4         String s=e.getActionCommand();
 5         if(s.equals("start")){
 6             System.out.println("start");
 7         }else if(s.equals("stop")){
 8             System.out.println("stop");
 9         }else{
10             System.out.println("幸运");
11         }
12     }
13 }

 

  2.3 输入框TextFiled监听

    当按回车键时会触发事件

 1 public class TestTextFiled {
 2     public static void main(String[] args) {
 3         new myFrame();
 4     }
 5 }
 6 ?
 7 class myFrame extends Frame {
 8     public myFrame(){
 9         TextField textField=new TextField();
10         myActionListener2 myActionListener2=new myActionListener2();
11         //按enter键时才触发
12         textField.addActionListener(myActionListener2);
13         textField.setEchoChar(‘*‘);//输入的内容以*显示
14         add(textField);
15         pack();
16         setVisible(true);
17     }
18 }
19 ?
20 class myActionListener2 implements ActionListener{
21     @Override
22     public void actionPerformed(ActionEvent e) {
23         TextField field=(TextField) e.getSource();
24         System.out.println(field.getText());
25         field.setText("");//文本框清空
26     }
27 }

 

  2.4 画笔Paint

    继承Frame后,重写paint()方法

 1 public class TestPaint {
 2     public static void main(String[] args) {
 3         new myPaint();
 4     }
 5 }
 6 ?
 7 class myPaint extends Frame{
 8     public myPaint(){
 9         setSize(500,600);
10         setVisible(true);
11     }
12 ?
13     @Override
14     public void paint(Graphics g) {
15         g.drawOval(100,100,100,100);
16         g.drawOval(300,100,100,100);
17         g.setColor(Color.red);
18         g.fillRect(180,360,150,30);
19         //画笔用完后,将其还原成最初的颜色
20         g.setColor(Color.BLACK);
21     }
22 }

 

  2.5 鼠标监听

    画图—鼠标每点击一次,就绘制一个点

 1 public class TestMouseListener {
 2     public static void main(String[] args) {
 3         new myFrame2("画图");
 4     }
 5 }
 6 ?
 7 class myFrame2 extends Frame{
 8     ArrayList points;
 9     public myFrame2(String title){
10         super(title);
11         setBounds(100,100,500,600);
12         setVisible(true);
13         //鼠标监听器
14         this.addMouseListener(new myMouseListener());
15         //存鼠标点击的点
16         points=new ArrayList();
17     }
18 ?
19     @Override
20     public void paint(Graphics g) {
21         //画画,监听鼠标的事件
22         Iterator iterator=points.iterator();
23         while(iterator.hasNext()){
24             Point point=(Point) iterator.next();
25             g.setColor(Color.BLACK);
26             g.fillOval(point.x,point.y,10,10);
27         }
28     }
29 ?
30     //添加一个点到界面上
31     public void addPaint(Point point){
32         points.add(point);
33     }
34 ?
35     private class myMouseListener extends MouseAdapter{
36         @Override
37         public void mousePressed(MouseEvent e) {
38             myFrame2 frame2=(myFrame2) e.getSource();
39             frame2.addPaint(new Point(e.getX(),e.getY()));
40             //每次点击鼠标都需要重画一次
41             frame2.repaint();
42         }
43     }
44 }

 

  2.6 窗口监听

    主要的两个事件是windowClosing和windowActivated

 1 public class TestWindow {
 2     public static void main(String[] args) {
 3         new windowFrame();
 4     }
 5 }
 6 ?
 7 class windowFrame extends Frame{
 8     public windowFrame(){
 9         setBounds(100,100,300,500);
10         setVisible(true);
11         this.addWindowListener(new WindowAdapter() {
12             //匿名内部类
13             //关闭窗口
14             @Override
15             public void windowClosing(WindowEvent e) {
16                 System.out.println("windowClosing");
17                 System.exit(0);
18             }
19             //激活窗口
20             @Override
21             public void windowActivated(WindowEvent e) {
22                 System.out.println("windowActivated");
23             }
24         });
25     }
26 }

 

  2.7 键盘监听

    监听不同按钮按下时触发不同的事件

 1 public class TestKeyListener {
 2     public static void main(String[] args) {
 3         new keyFrame();
 4     }
 5 }
 6 ?
 7 class keyFrame extends Frame{
 8     public keyFrame(){
 9         setBounds(100,100,200,300);
10         setVisible(true);
11         this.addKeyListener(new KeyAdapter() {
12             @Override
13             public void keyPressed(KeyEvent e) {
14                 //获得键盘下的键是哪一个,当前的码是多少
15                 int keyCode=e.getKeyCode();
16                 if(keyCode==KeyEvent.VK_UP){    //按上键触发
17                     System.out.println("上键");
18                 }else if(keyCode==KeyEvent.VK_DOWN){ //按下键触发
19                     System.out.println("下键");
20                 }else if(keyCode==KeyEvent.VK_LEFT){ //按左键触发
21                     System.out.println("左键");
22                 }else if(keyCode==KeyEvent.VK_RIGHT){ //按右键触发
23                     System.out.println("右键");
24                 }
25             }
26         });
27     }
28 }

 

3、Swing

  3.1 窗口、面板

    通过JFrame实例化顶级窗口,使用方式和Frame类似

 1 public class TestJFrame {
 2     public static void main(String[] args) {
 3         new myJFrame().init();
 4     }
 5 }
 6 ?
 7 class myJFrame extends JFrame{
 8     public void init(){
 9         this.setBounds(100,100,300,200);
10         this.setVisible(true);
11         JLabel label=new JLabel("欢迎你的到来");
12         label.setHorizontalAlignment(SwingConstants.CENTER);//设置水平居中
13         this.add(label);
14         //获得一个容器
15         Container container=this.getContentPane();
16         container.setBackground(Color.green);//只有通过这种方式才可以设置背景颜色
17         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭事件
18     }
19 }

 

  3.2 弹窗

    通过JDialog进行实例化

 1 class myDialog extends JDialog{
 2     public myDialog(){
 3         this.setVisible(true);
 4         this.setBounds(100,100,500,500);
 5         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 6         Container container=this.getContentPane();
 7         container.setLayout(null);
 8         container.add(new Label("欢迎你的到来"));
 9     }
10 }

 

  3.3 ImageIcon标签

    可以通过该标签放图片

 1 public class imageIcon extends JFrame {
 2     public imageIcon(){
 3         //获取图片的地址
 4         JLabel label=new JLabel("ImageIcon");
 5         URL url=imageIcon.class.getResource("tx.jpg");
 6         ImageIcon img=new ImageIcon(url);
 7         label.setIcon(img);
 8         label.setHorizontalAlignment(SwingConstants.CENTER);
 9         Container container=getContentPane();
10         container.add(label);
11         setBounds(100,100,300,300);
12         setVisible(true);
13         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
14     }
15 ?
16     public static void main(String[] args) {
17         new imageIcon();
18     }
19 }

 

  3.4 面板

    ①通过JPanel实例化

 1 public class JPanelDemo extends JFrame {
 2     public JPanelDemo() {
 3         Container container=getContentPane();
 4         container.setLayout(new GridLayout(2,1,10,10));//后两个参数是间距
 5         JPanel panel1=new JPanel(new GridLayout(2,1));
 6         JPanel panel2=new JPanel(new GridLayout(1,3));
 7         panel1.add(new Button("btn1"));
 8         panel1.add(new Button("btn1"));
 9         panel2.add(new Button("btn2"));
10         panel2.add(new Button("btn2"));
11         panel2.add(new Button("btn2"));
12 ?
13         container.add(panel1);
14         container.add(panel2);
15         this.setVisible(true);
16         this.setSize(360,360);
17         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
18     }
19 ?
20     public static void main(String[] args) {
21         new JPanelDemo();
22     }
23 }

            技术分享图片

 

    ②JScroll,带有滚动条的面板

 1 public class JScrollDemo extends JFrame {
 2     public JScrollDemo(){
 3         Container container=getContentPane();
 4         //文本域
 5         TextArea textArea=new TextArea(20,50);
 6         textArea.setText("欢迎你的到来");
 7         //Scroll面板
 8         JScrollPane scrollPane=new JScrollPane(textArea);
 9         container.add(scrollPane);
10         this.setVisible(true);
11         this.setBounds(100,100,300,300);
12         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
13     }
14 ?
15     public static void main(String[] args) {
16         new JScrollDemo();
17     }
18 }

            技术分享图片

 

  3.5 按钮

    ①图片按钮

 1 public class JButtonDemo extends JFrame {
 2     public JButtonDemo(){
 3         Container container=getContentPane();
 4         //将一个图片变为图标
 5         URL url=JButtonDemo.class.getResource("tx.jpg");
 6         Icon icon=new ImageIcon(url);
 7         //将图标放在按钮上
 8         JButton button=new JButton();
 9         button.setIcon(icon);
10         button.setToolTipText("图片按钮");//鼠标悬停时的提示信息
11         button.setSize(300,300);
12         container.add(button);
13         this.setSize(500,300);
14         this.setVisible(true);
15         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
16     }
17 ?
18     public static void main(String[] args) {
19         new JButtonDemo();
20     }
21 }

 

    ②单选按钮

 1 public class JButtonDemo1 extends JFrame{
 2     public JButtonDemo1(){
 3         Container container=getContentPane();
 4         //单选框按钮
 5         JRadioButton btn1=new JRadioButton("篮球");
 6         JRadioButton btn2=new JRadioButton("足球");
 7         JRadioButton btn3=new JRadioButton("羽毛球");
 8         //由于单选框只能选择一个,因此要将其放在同一个组中
 9         ButtonGroup group=new ButtonGroup();
10         group.add(btn1);
11         group.add(btn2);
12         group.add(btn3);
13         container.add(btn1,BorderLayout.NORTH);
14         container.add(btn2,BorderLayout.CENTER);
15         container.add(btn3,BorderLayout.SOUTH);
16         this.setSize(500,300);
17         this.setVisible(true);
18         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
19     }
20 ?
21     public static void main(String[] args) {
22         new JButtonDemo1();
23     }
24 }

 

    ③多选按钮

 1 public class JButtonDemo2 extends JFrame{
 2     public JButtonDemo2(){
 3         Container container=getContentPane();
 4         //多选框按钮
 5         JCheckBox btn1=new JCheckBox("篮球");
 6         JCheckBox btn2=new JCheckBox("足球");
 7         JCheckBox btn3=new JCheckBox("羽毛球");
 8 ?
 9         container.add(btn1,BorderLayout.NORTH);
10         container.add(btn2,BorderLayout.CENTER);
11         container.add(btn3,BorderLayout.SOUTH);
12         this.setSize(500,300);
13         this.setVisible(true);
14         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
15     }
16 ?
17     public static void main(String[] args) {
18         new JButtonDemo2();
19     }
20 }

 

  3.6 列表

    ①下拉框

 1 public class ComboboxDemo1 extends JFrame {
 2     public ComboboxDemo1(){
 3         Container container=getContentPane();
 4         JComboBox comboBox=new JComboBox();
 5         comboBox.addItem("正在热映");
 6         comboBox.addItem("已下架");
 7         comboBox.addItem("即将上映");
 8         container.add(comboBox);
 9         this.setBounds(100,100,160,60);
10         this.setVisible(true);
11         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
12     }
13 ?
14     public static void main(String[] args) {
15         new ComboboxDemo1();
16     }
17 }

 

    ②列表框

 1 public class ComboboxDemo2 extends JFrame {
 2     public ComboboxDemo2(){
 3         Container container=getContentPane();
 4         //生成内容
 5         Vector contents=new Vector();
 6         JList jList=new JList(contents);
 7 ?
 8         contents.add("正在热映");
 9         contents.add("已下架");
10         contents.add("即将上映");
11         container.add(jList);
12         this.setBounds(100,100,160,100);
13         this.setVisible(true);       this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
14     }
15 ?
16     public static void main(String[] args) {
17         new ComboboxDemo2();
18     }
19 }

 

  3.7 文本框

    文本框JTextField,密码框JPasswordField,文本域JTextArea

 1 public class TextFiledDemo1 extends JFrame {
 2     public TextFiledDemo1(){
 3         Container container=this.getContentPane();
 4         //文本框
 5         JTextField field=new JTextField("hello",20);
 6         //密码框
 7         JPasswordField passwordField=new JPasswordField();
 8         passwordField.setEchoChar(‘*‘);
 9         //文本域
10         JTextArea textArea=new JTextArea(20,30);
11         textArea.setText("欢迎你的到来");
12 ?
13         container.add(field,BorderLayout.NORTH);
14         container.add(passwordField,BorderLayout.SOUTH);
15         container.add(textArea,BorderLayout.CENTER);
16         this.setBounds(100,100,300,200);
17         this.setVisible(true);
18         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
19     }
20 ?
21     public static void main(String[] args) {
22         new TextFiledDemo1();
23     }
24 }

 

 

Java GUI编程

原文:https://www.cnblogs.com/yqsumAll/p/14441395.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!