GUI编程

Posted lsswudi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GUI编程相关的知识,希望对你有一定的参考价值。

 

AWT
?AWT(Abstract Window Toolkit)包括了很多类和接口,用于Java Application
的GUI (Grapbics User Interface图形用户界面)编程。
?GUI的各种元素(如: 窗口,按钮,文本框等)由Java类来实现。
?使用AWT所涉 及的类-般在java.awt包及其子包中。
?Container和Component是 AWT中的两个核心类。

技术图片

 

 

 

 

 Component & Container
Java的图形用户界面的最基本组成部分是Component,Component类及其子类的对象
用来描述以图形化的方式显示在屏幕上并能与用户进行交互的GUI元素,例如,-一个按钮,
一个标签等。
?一般的Component对 象不能独立地显示出来,必须将”放在"某-的Container对象中才可
  以显示出来。
?Container是Component子类,Container子 类对象可以“容纳”别的Component对象。
?Container对象可使用方法add(..)向其中添加其他Component对象。
?Containter 是Component的子类,因此Containter对象也可以被当作Component对象添
加到其他Container对象中。
?有 两种常用的Containter:
Window:其对象表示自由停泊的顶级窗口
Panel:其对象可作为容纳其它Component对象,但不能独立存在,必须被添加到其
它Containner中(如Window或Applet)

技术图片

 

package com.shuai01;

import java.awt.*;

public class TestFrameDemo01 
    public static void main(String[] args) 
        myFrame m1 = new myFrame(100,100,200,200,Color.yellow);
        myFrame m2 = new myFrame(300,100,200,200,Color.green);
        myFrame m3 = new myFrame(100,300,200,200,Color.red);
        myFrame m4 = new myFrame(300,300,200,200,Color.orange);

    


class myFrame extends Frame 
    static int id = 0;
    myFrame(int x,int y,int w,int h,Color color) 
        super("myFrame"+ (++id));
        setBackground(color);
        setLayout(null);
        setBounds(x,y,w,h);
        setVisible(true);
    

 

 技术图片

 

 

 

程序1

 

package com.shuai01;

import java.awt.*;

public class TestPanel 
    public static void main(String[] args) 
        Frame f = new Frame("java Frame with panel");
        Panel p = new Panel(null);

        f.setLayout(null);
        f.setBounds(300,300,500,500);
        f.setBackground(new Color(100,220,100));
        p.setBounds(50,50,400,400);
        p.setBackground(new Color(204,204,255));
        f.add(p);
        f.setVisible(true);
    

 

程序2

package com.shuai01;

import java.awt.*;

public class TestmultiPanel 
    public static void main(String[] args) 
        MyFrame2 m = new MyFrame2("java frame",300,300,400,300);

    


class MyFrame2 extends Frame 
    private Panel p1, p2, p3, p4;

    MyFrame2(String s, int x, int y, int w, int h) 
        super(s);
        setLayout(null);
        p1 = new Panel(null);
        p2 = new Panel(null);
        p3 = new Panel(null);
        p4 = new Panel(null);
        p1.setBounds(0,0,w/2,h/2);
        p2.setBounds(0,h/2,w/2,h/2);
        p3.setBounds(w/2,0,w/2,h/2);
        p4.setBounds(w/2,h/2,w/2,h/2);

        p1.setBackground(Color.blue);
        p2.setBackground(Color.green);
        p3.setBackground(Color.orange);
        p4.setBackground(Color.cyan);

        add(p1);add(p2);add(p3);add(p4);
        setBounds(x,y,w,h);
        setVisible(true);
    

 

 


 

布局管理器类:

◆Java语言中,提供了布局管理器类的对象可以管理
◆管 理Component在Container中的布局,不必直接设置
Component位置和大小。
◆每 个Container都有一个布局管理器对象,当容器需要对某个组件
进行定位或判断其大小尺寸时,就会调用其对应的布局管理器,调用
Container的setLayout方法改变其布局管理器对象。
◎Awt提供了5种布局管理器类:
◆FlowLayaout
◆BorderLayout
◆GridlLayou
◆CardLayout
◆GridBagLayout
技术图片

 

 

 

技术图片

 

 

 

1mport java.aut. *:
public class TestFlowLayout (
public static void main(String args[]) 
Frane I。new Frane ("F lou Layout") ;
Button button1 neu Button("Ok") ;
Button button2 = new Button("Open") :
Button button3 = new Button("Close") :
f.setLayout (new FlowLayout (FlowLayout .LEFT)) ;
f. add (button1) ;
f. add (button2) ;
f. add (button3) ;
f.setSize (100, 100) ;
f.setVisible(true) ;

 


 

 

技术图片

 

 

 

技术图片

 

 

 

package com.shuai01;

import java.awt.*;

public class TestBorderLayout 
    public static void main(String[] args) 
        Frame f;
        f = new Frame("Border Layout");
        Button bn = new Button("BN");
        Button bs = new Button("BS");
        Button bw = new Button("BW");
        Button be = new Button("BE");
        Button bc = new Button("BC");

        f.add(bn,BorderLayout.NORTH);
        f.add(bs,BorderLayout.SOUTH);
        f.add(bw, BorderLayout.WEST);
        f.add(be,BorderLayout.EAST);
        f.add(bc,BorderLayout.CENTER);

        f.setSize(200,200);
        f.setVisible(true);
    

 

 


 

 

技术图片

 

 

 

package com.shuai01;

import java.awt.*;

public class TestBorderLayout 
    public static void main(String[] args) 
        Frame f;
        f = new Frame("GridLayout");
        Button bn = new Button("BN");
        Button bs = new Button("BS");
        Button bw = new Button("BW");
        Button be = new Button("BE");
        Button bc = new Button("BC");

        f.setLayout(new GridLayout(3,4));

        f.add(bn);
        f.add(bs);
        f.add(bw);
        f.add(be);
        f.add(bc);

        f.pack();
        f.setVisible(true);
    

 

 

技术图片

 

 

 

addActionListener?(ActionListener l)
添加指定的动作侦听器以从此按钮接收动作事件。

 

技术图片

 

 

package com.shuai01;

import java.awt.*;

import java.awt.event.*;

public class TestActionEvent2 
    public static void main(String args[]) 
        Frame f = new Frame("Teat");
        Button b1 = new Button("Start");
        Button b2 = new Button("Stop");
        Monitor2 bh = new Monitor2();

        b1.addActionListener (bh);

        b2.addActionListener (bh);
        b2.setActionCommand("game over");
        f.add(b1, "North");
        f.add(b2, "Center");
        f.pack();
        f.setVisible(true);
    

class Monitor2 implements ActionListener
        public void actionPerformed(ActionEvent e)
            System.out.println("a button has been pressed,"+
            "the relativeinfo 18:\\n "+ e.getActionCommand()) ;

        

 

技术图片

 

 

技术图片

 

 

public void setEchoChar?(char c)
设置此文本字段的回音字符

 技术图片

 

 持有对方引用

计算机加法

技术图片

 

 代码如下

package com.shuai01;


import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TFmath 
    public static void main(String[] args) 
        TFFrame t1 = new TFFrame();
        t1.setTitle("计算器");
        t1.launchFrame();

    


class TFFrame extends Frame 
    TextField num1, num2, num3;

    public void launchFrame() 
        num1 = new TextField(10);
        num2 = new TextField(10);
        num3 = new TextField(15);
        Label lblPlus = new Label("+");
        Button btnEqual = new Button("=");

//        btnEqual.addActionListener(new myMonnitor(num1, num2, num3));
        btnEqual.addActionListener(new myMonnitor(this));
        setLayout(new FlowLayout());
        add(num1);
        add(lblPlus);
        add(num2);
        add(btnEqual);
        add(num3);
        pack();
        setVisible(true);


    


class myMonnitor implements ActionListener 
    /*
    TextField num1, num2, num3;

    public myMonnitor(TextField num1, TextField num2, TextField num3) 
        this.num1 = num1;
        this.num2 = num2;
        this.num3 = num3;
    
    */
    //持有对方的引用
    TFFrame tf = null;
    public myMonnitor(TFFrame tf) 
        this.tf = tf;
    

    @Override
    public void actionPerformed(ActionEvent e) 
        int n1 = Integer.parseInt(tf.num1.getText());
        int n2 = Integer.parseInt(tf.num2.getText());
        tf.num3.setText(String.valueOf(n1+n2));
    

 

 

内部类改进后

package com.shuai01;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TFmathDemo01 
    public static void main(String[] args) 

        new TFFrame().lanuchFrame();
    


class TFFrame extends Frame 
    TextField num1, num2, num3;

    public void lanuchFrame() 
        num1 = new TextField(10);
        num2 = new TextField(10);
        num3 = new TextField(15);
        Label lblplus = new Label("+");
        Button equals = new Button("=");
        equals.addActionListener(new myMonitor());
        setLayout(new FlowLayout());
        add(num1);
        add(lblplus);
        add(num2);
        add(equals);
        add(num3);
        pack();
        setVisible(true);
    

    class myMonitor implements ActionListener 
        @Override
        public void actionPerformed(ActionEvent e) 
            int n1 = Integer.parseInt(num1.getText());
            int n2 = Integer.parseInt(num2.getText());
            num3.setText(" " + (n1 + n2));

        
    

 

以上是关于GUI编程的主要内容,如果未能解决你的问题,请参考以下文章

Python之GUI编程

Java实验5 GUI编程

Python GUI编程之WxPython

Python GUI编程(Tkinter)

python GUI编程(Tkinter)

使用 Eclipse 编程 Java GUI [重复]