java 图形界面

java GUI基础类库抽象窗口工具箱(Abstract Window Toolkit,AWT位于java.awt包下 ,提供了一套与本地图形界面进行交互的接口 底层调用的系统图形库函数 由于需要跨平台保持兼容性所以只保留了一些基础函数库界面也不炫丽 由于此原因右在awt的基础上使用java语言开发了一些图形库如swing swing位于javax.swing包下 awt有的功能swing都有 awt组件名前面加J就是swing的组件名了

在AWT中,主要有以下3点 组件(Component)、容器(Container )、布局管理器(LayoutManager) 所有能在屏幕上显示的组件都是抽象类Component的子类。Component有个抽象类Container 允许其它组件加入其中包括Container 通过LayoutManager来管理布局 它有2个实现类 Panel(面板)、ScrollPane(待滚动条的面板)和Window(无边界和菜单栏的窗口)  window用来展示界面的根   panel用来组织控件显示的 必须依附于window不能独立存在 我们一般不直接使用Window而是使用它的子类如Dialog(对话框)和frame(有边界菜单栏的窗口)来展示界面

public class MyFrame extends Frame{
        public MyFrame(String name){
            super(name);
            //创建容器 并把容器添加到窗口上
            Panel p = new Panel();
            add(p);

            //把组件添加到容器里
            p.add(new TextField(20));
            p.add(new Button("提交"));

            //设置窗口的大小与显示区域
            setBounds(50,50,350,220);
        }

        public void show(){
            //显示窗口
            setVisible(true);
        }
    }

    public class FrameTest {
        public static void main(String[] args) {
            MyFrame myFrame=new MyFrame("窗口测试");
            myFrame.show();
        }
    }

常用对话框为FileDialog 

public class FileDialogTest {
    Frame f = new Frame("测试");
    FileDialog d1 = new FileDialog(f,"load file",FileDialog.LOAD);
    FileDialog d2 = new FileDialog(f,"save file",FileDialog.SAVE);
    Button b1 = new Button("open");
    Button b2 = new Button("save");
    public void init() {
        b1.addActionListener(e->{
            d1.setVisible(true);
            System.out.println(d1.getDirectory()+d1.getFile());
        });

        b2.addActionListener(e->{
            d2.setVisible(true);
            System.out.println(d2.getDirectory()+d2.getFile());
        });

        f.add(b1);
        f.add(b2,BorderLayout.SOUTH);
        f.pack();
        f.setVisible(true);

    }

    public static void main(String[] args) {
        new FileDialogTest().init();
    }
}
效果图

java 图形界面_第1张图片

常用awt组件如下

组件名称 构造方法 使用说明
按钮(Button) Buttonb=newButton("退出"); 单击按钮产生ActionEvent事件,实现ActionListener接口并重写actionPenformed()方法监听和处理事件
复选框(Checkbox) Checkboxch=newCheckbox("one",true) 选中复选框产生ItemAction事件,实现ItemListener接口监听和处理事件
下拉菜单(Choice) ChoicecolorChoose=newChoice() 实现ItemListener接口监听和处理事件;Add()方法可在下拉列表中添加选项
画布(Canvas)
  ———
重写Canvas类的paint()方法实现完成图形处理;实现MouseListener和KeyListener接口监听Canvas组件的鼠标和键盘事件
文本框(TextField)
TextFieldft=newTextField(16);
//宽度为16个字符
文本框只能显示一行,按Enter键时产生ActionEvent事件,通过ActionListener接口中的actionPerformed()方法处理事件
文本域(TextAera)
TextAreata=newTextArea("Textarea",4,10);
//4行10列
可显示多行多列文本和滚动条
列表框(List)
Listlst=newList(4,false);
//4行,不允许多选
提供多个文本选项,支持滚动条,可以浏览多项
对话框(Dialog)   Window类的子类
文件对话框(FileDialog) Filedialogfd=newFiledialog(frm,"fileddilog"); 当用户想打开或存储文件时,可使用文件对话框进行操作
菜单栏(MenuBar) MenuBarmb=newMenuBar(); 通过frm.setMenuBar(mb)语句可将菜单mb设置为Frame对象frm的主菜单
下拉菜单(Menu) Menum=newMenu("Menu"); 通过mb.add(m)可将m下拉列表添加到菜单栏中
菜单项(MenuItem) MenuItemmi=newMenuItem("Openit"); 通过mi.add(mi)将菜单项mi添加到下一个下拉列表m中。
颜色(Color)
//非构造方法,两种方法设置组件背景色
setBackground(Color.BLUE);
setBackground(newColor(100,100,100));
通过setForeground()方法设置组件前景色,通过setBackground()方法设置组件背景色。颜色值可使用Color类的颜色常量来设置,也可通过指定RGB颜色对象值设置
字体(Font)
Fontfnt=newFont("宋体",Font.BOLD,10);
//宋体,10号,加粗
按顺序向Font()构造方法传递有关字体设置的参数

常用swing组件如下

按钮(JButton)

JButton是我们常用的一个组件,其表现形式为一个按钮。

构造方法

方法 说明
JButton() 创建不带有设置文本或图标的按钮
JButton(Action a) 创建一个按钮,其属性从所提供的 Action 中获取
JButton(Icon icon) 创建一个带图标的按钮
JButton(String text) 创建一个带文本的按钮
JButton(String text, Icon icon) 创建一个带初始文本和图标的按钮

按钮(JToggleButton)

JToggleButton与JButton的区别在于JToggleButton有两个状态:按下和弹起。

构造方法

方法 说明
JToggleButton() 创建最初未选定的切换按钮,不设置文本或图像
JToggleButton(Action a) 创建一个切换按钮,其属性从所提供的 Action 获取
JToggleButton(Icon icon) 创建一个最初未选定的切换按钮,该按钮具有指定的图像但是没有文本
JToggleButton(Icon icon, boolean selected) 创建具有指定图像和选择状态但没有文本的切换按钮
JToggleButton(String text) 创建具有指定文本的未选定的切换按钮
JToggleButton(String text, boolean selected) 创建具有指定文本和选择状态的切换按钮
JToggleButton(String text, Icon icon) 创建一个最初未选定的切换按钮,该按钮具有指定的文本和图像。
JToggleButton(String text, Icon icon, boolean selected) 创建具有指定文本、图像和选择状态的切换按钮

标签(JLabel)

用于短文本字符串或图像或二者的显示区。

构造方法

方法 说明
JLabel() 创建无图像并且其标题为空字符串的 JLabel
JLabel(Icon image) 创建具有指定图像的 JLabel 实例
JLabel(Icon image, int horizontalAlignment) 创建具有指定图像和水平对齐方式的 JLabel 实例
JLabel(String text) 创建具有指定文本的 JLabel 实例
JLabel(String text, Icon icon, int horizontalAlignment) 创建具有指定文本、图像和水平对齐方式的 JLabel 实例
JLabel(String text, int horizontalAlignment) 创建具有指定文本和水平对齐方式的 JLabel 实例

复选框(JCheckBox)

复选框的实现,复选框是一个可以被选定和取消选定的项,它将其状态显示给用户。

构造方法

方法 说明
JCheckBox() 创建一个没有文本、没有图标并且最初未被选定的复选框
JCheckBox(Action a) 创建一个复选框,其属性从所提供的 Action 获取
JCheckBox(Icon icon) 创建有一个图标、最初未被选定的复选框
JCheckBox(Icon icon, boolean selected) 创建一个带图标的复选框,并指定其最初是否处于选定状态
JCheckBox(String text) 创建一个带文本的、最初未被选定的复选框
JCheckBox(String text, boolean selected) 创建一个带文本的复选框,并指定其最初是否处于选定状态
JCheckBox(String text, Icon icon) 创建带有指定文本和图标的、最初未选定的复选框
JCheckBox(String text, Icon icon, boolean selected) 创建一个带文本和图标的复选框,并指定其最初是否处于选定状态

单选按钮(JRadioButton)

实现一个单选按钮,此按钮项可被选择或取消选择,并可为用户显示其状态。与 ButtonGroup 对象配合使用可创建一组按钮,一次只能选择其中的一个按钮。
方法 说明
JRadioButton() 创建一个初始化为未选择的单选按钮,其文本未设定
JRadioButton(Action a) 创建一个单选按钮,其属性来自提供的 Action
JRadioButton(Icon icon) 创建一个初始化为未选择的单选按钮,其具有指定的图像但无文本
JRadioButton(Icon icon, boolean selected) 创建一个具有指定图像和选择状态的单选按钮,但无文本
JRadioButton(String text 创建一个具有指定文本的状态为未选择的单选按钮
JRadioButton(String text, boolean selected) 创建一个具有指定文本和选择状态的单选按钮
JRadioButton(String text, Icon icon) 创建一个具有指定的文本和图像并初始化为未选择的单选按钮
JRadioButton(String text, Icon icon, boolean selected) 创建一个具有指定的文本、图像和选择状态的单选按钮

文本框(JTextField)

JTextField 是一个轻量级组件,它允许编辑单行文本。

构造方法

方法 说明
JTextField() 构造一个新的 TextField
JTextField(Document doc, String text, int columns) 构造一个新的 JTextField,它使用给定文本存储模型和给定的列数
JTextField(int columns) 构造一个具有指定列数的新的空 TextField
JTextField(String text) 构造一个用指定文本初始化的新 TextField
JTextField(String text, int columns) 构造一个用指定文本和列初始化的新 TextField

JPasswordField 是一个轻量级组件,允许编辑单行文本,其视图指示键入内容,但不显示原始字符。

密码框(JPasswordField)

构造方法

方法 说明
JPasswordField() 构造一个新 JPasswordField,使其具有默认文档、为 null 的开始文本字符串和为 0 的列宽度
JPasswordField(Document doc, String txt, int columns) 构造一个使用给定文本存储模型和给定列数的新 JPasswordField
JPasswordField(int columns) 构造一个具有指定列数的新的空 JPasswordField
JPasswordField(String text) 构造一个利用指定文本初始化的新 JPasswordField
JPasswordField(String text, int columns) 构造一个利用指定文本和列初始化的新 JPasswordField

文本域(JTextArea)

JTextArea 是一个显示纯文本的多行区域。

构造方法

方法 说明
JTextArea() 构造新的 TextArea
JTextArea(Document doc) 构造新的 JTextArea,使其具有给定的文档模型,所有其他参数均默认为 (null, 0, 0)
JTextArea(Document doc, String text, int rows, int columns) 构造具有指定行数和列数以及给定模型的新的 JTextArea
JTextArea(int rows, int columns) 构造具有指定行数和列数的新的空 TextArea
JTextArea(String text) 构造显示指定文本的新的 TextArea。
JTextArea(String text, int rows, int columns) 构造具有指定文本、行数和列数的新的 TextArea

有如下布局管理器

流式布局管理器(FlowLayout)

FlowLayout是Panel和Applet的默认布局管理器。在该布局管理器中,组件在容器中按照从上到下或从左到右的顺序进行排列,行满后则换行。

构造方法较多,例如:
  • FlowLayout();
    默认构造方法,设置居中对齐方式,横向和纵向间隔均为默认5 像素
  • FlowLayout(FlowLayout.LEFT);
    设置居左对齐,横向和纵向间隔均为默认5像素
  • FlowLayout(FlowLayout.RIGHT,20,40);
    设置居右对齐,横向间隔20像素,纵向间隔40像
  • public class FlowLayoutTest {
        public static void main(String[] args) {
            Frame f = new Frame("流式布局测试");
            // 设置Frame使用FlowLayout布局管理器
            f.setLayout(new FlowLayout(FlowLayout.LEFT,20,5));
            // 向窗口添加10个按钮
            for (int i = 0;i<10;i++) {
                f.add(new Button("Button"+i));
            }
            // 设置窗口为最佳大小
            f.pack();
            f.setVisible(true);
        }
    }	
界布局管理器( BorderLayout )
BorderLayout是Window、Frame和Dialog的默认布局管理器,其将容器分成North、South、East、West和Center 5个区域,每个区域只能放置一个组件。在使用add()方法添加组件到容器时,必须指定将其放置在哪个区域中。使用BorderLayout时,如果容器大小发生变换,组件的相对位置不变。java 图形界面_第2张图片

构造方法:
BorderLayout(): 构造一个组件之间没有间距(默认间距为0像素)的新边框布局。
BorderLayout(int hgap, int vgap) :  构造一个具有指定组件(hgap为横向间距,vgap为纵向间距)间距的边框布局。
普通方法:

int

getHgap()           返回组件之间的水平间距。

int

getVgap()           返回组件之间的垂直间距。

void

removeLayoutComponent(Component comp) 从此边框布局中移除指定组件。

void

setHgap(int hgap)          设置组件之间的水平间距。

void

setVgap(int vgap)           设置组件之间的垂直间距。

public class BorderLayoutTest {
    public static void main(String[] args) {
        Frame f = new Frame("测试窗口");
        // 设置Frame容器使用BorderLayout布局管理器
        f.setLayout(new BorderLayout(50,50));
	//南
        f.add(new Button("S"),BorderLayout.SOUTH);
	//北
        f.add(new Button("N"),BorderLayout.NORTH);
        // 默认添加到中间区域
        f.add(new Button("M"));
	//东
        f.add(new Button("E"),BorderLayout.EAST);
	//西
        f.add(new Button("W"),BorderLayout.WEST);

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

    }
}
计算器
public class BorderLayoutDemo1 extends JFrame {

         JPanel p=new JPanel();

  public BorderLayoutDemo(){

     setLayout(new BorderLayout(5,5));

     setFont(new Font("Helvetica", Font.PLAIN, 14));

     getContentPane().add("North", new JButton("North"));

     getContentPane().add("South", new JButton("South"));

     getContentPane().add("East",  new JButton("East"));

     getContentPane().add("West",  new JButton("West"));

         //设置面板为流式布局居中显示,组件横、纵间距为5个像素

          p.setLayout(new FlowLayout(1,5,5));

          //使用循环添加按钮,注意每次添加的按钮对象名称都是b

//但按钮每次均是用new新生成的,所有代表不同的按钮对象。

          for(int i=1;i<10;i++){

                    //String.valueOf(i),将数字转换为字符串

                   JButton b=new JButton(String.valueOf(i));

                   p.add(b);           //将按钮添加到面板中

          }

     getContentPane().add("Center",p);  //将面板添加到中间位置

  }  

  public static void main(String args[]) {

     BorderLayoutDemo1 f = new BorderLayoutDemo1();

       f.setTitle("边界布局");

       f.pack();  //让窗体自适应组建大小

       f.setVisible(true);

            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            f.setLocationRelativeTo(null);             //让窗体居中显示

    }

  }
程序执行效果
java 图形界面_第3张图片
网格布局管理器( GridLayout )
构造方法:
1
GridLayout gl =  new  GridLayout( 3 , 5 );  //3行5列
GridLayout 可使容器中的各个组件呈网格状布局,平局占据容器的空间,即使容器的大小发生变化,每个组件还是平均占据容器的空间。和FlowLayout一样,GridLayout也是按照从上到下,从左到右的规律进行排列的。
public class GridLayoutTest {
    public static void main(String[] args) {
        Frame f = new Frame("计算器");
        Panel p1 = new Panel();
        p1.add(new TextField(30));
        f.add(p1,NORTH); // import static java.awt.BorderLayout.*;
        Panel p2 = new Panel();
        p2.setLayout(new GridLayout(3,5,4,4));
        String[] name = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/","."};
        for (int i = 0;i
GridBagLayout
与GridLayout不同,它可以跨越一个或多个网格,并可以设置网格的大小互不相同。
public class GridBagTest {
    private Frame f = new Frame("测试窗口");
    //创建GridBagLayout布局管理器
    //创建GridBagConstraints对象
    //创建关联 添加组件
    private GridBagLayout gb = new GridBagLayout();
    private GridBagConstraints gbc = new GridBagConstraints();
    private Button[] bs = new Button[10];

    public void init() {
        f.setLayout(gb);
        for (int i = 0;i

BoxLayout
BoxLayout 可以在垂直和水平两个方向摆放控件
public class BoxLayoutTest {
    private Frame f = new Frame("测试");
    public void init() {
        f.setLayout(new BoxLayout(f,BoxLayout.Y_AXIS));
        // 下面按钮将垂直排列
        f.add(new Button("First Button"));
        f.add(new Button("Second Button"));
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        new BoxLayoutTest().init();
    }
}
 
public class BoxTest {
    private Frame f = new Frame("测试");
    // 定义水平组件Box对象
    private Box horizontal = Box.createHorizontalBox();
    // 定义垂直组件Box对象
    private Box verical = Box.createVerticalBox();
    public void init() {
        horizontal.add(new Button("H btn1"));
        horizontal.add(new Button("H btn2"));
        verical.add(new Button("V btn1"));
        verical.add(new Button("V btn2"));
        f.add(horizontal,BorderLayout.NORTH);
        f.add(verical);
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        new BoxTest().init();
    }
}
卡片布局管理器(CardLayout)
CardLayout能够帮助用户处理两个乃至跟多的成员共享同一显示空间。它把容器分成许多层,每层的显示空间占据真个容器的大小,并且每层之允许反之一个组件,可以通过Panel来实现每层复杂的用户界面。
方法 说明
public CardLayout() 创建一个间距大小为0的新卡片布局
public CardLayout(int hgap,int vgap) 创建一个具有指定水平间距和垂直间距的新卡片布局。水平间距置于左右边缘。垂直间距置于上下边缘
public void first(Container parent) 翻转到容器的第一张卡片
public void last(Contain parent) 翻转到容器的最后一张卡片
public void next(Contain parent) 翻转到指定容器的下一张卡片

public void previous(Contain

parent)

翻转到指定容器的前一张卡片
public void show(Contain parent,String name) 翻转到使用addLayoutComponent添加到此布局的具有指定name的组件
public class CardLayoutDemo extends JFrame {
    private JPanel pane = null;
    private JPanel p = null;
    private CardLayout card = null;
    private JButton button_1=null;
    private JButton button_2=null;
    private JButton b_1=null,b_2=null,b_3=null;
    private JPanel p_1=null,p_2=null,p_3=null;
    public CardLayoutDemo(){
        card = new CardLayout(5,5);
        pane = new JPanel(card);
        p = new JPanel();
        button_1 = new JButton("< 上一步");
        button_2 = new JButton("下一步   >");
        b_1 = new JButton("1");
        b_2 = new JButton("2");
        b_3 = new JButton("3");
        b_1.setMargin(new Insets(2,2,2,2));
        b_2.setMargin(new Insets(2,2,2,2));
        b_3.setMargin(new Insets(2,2,2,2));
        p.add(button_1);
        p.add(b_1);
        p.add(b_2);
        p.add(b_3);
        p.add(button_2);
        p_1 = new JPanel();
        p_2 = new JPanel();
        p_3 = new JPanel();
        p_1.setBackground(Color.RED);
        p_2.setBackground(Color.BLUE);
        p_3.setBackground(Color.GREEN);
        p_1.add(new JLabel("JPanel_1"));
        p_2.add(new JLabel("JPanel_2"));
        p_3.add(new JLabel("JPanel_3"));
        pane.add(p_1,"p1");
        pane.add(p_2,"p2");
        pane.add(p_3,"p3");

        button_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                card.previous(pane);
            }
        });
        button_2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                card.next(pane);
            }
        });
        b_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                card.show(pane,"p1");
            }
        });
        b_2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                card.show(pane,"p2");
            }
        });
        b_3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                card.show(pane,"p3");
            }
        });
        this.getContentPane().add(pane);
        this.getContentPane().add(p,BorderLayout.SOUTH);
        this.setSize(300, 200);
        this.setVisible(true);
    }


    public static void main(String[] args) {
        new CardLayoutDemo();
    }

}  
     运行效果
java 图形界面_第4张图片
java 图形界面_第5张图片
java 图形界面_第6张图片
日常实例
public class CommonComponent {
    Frame f = new Frame("测试");
    Button ok = new Button("Confirm");
    CheckboxGroup cbg = new CheckboxGroup();
    Checkbox male = new Checkbox("Male",cbg,true);
    Checkbox female = new Checkbox("Female",cbg,false);

    Choice colorChooser = new Choice();
    List colorList = new List(6,true);
    TextArea ta = new TextArea(5,20);
    TextField name = new TextField(50);
    public void init() {
        colorChooser.add("red");
        colorChooser.add("green");
        colorChooser.add("blue");
        colorList.add("red");
        colorList.add("green");
        colorList.add("blue");
        Panel bottom = new Panel();
        bottom.add(name);
        bottom.add(ok);
        f.add(bottom,BorderLayout.SOUTH);
        Panel checkPanel = new Panel();
        checkPanel.add(colorChooser);
        checkPanel.add(male);
        checkPanel.add(female);
        Box topLeft = Box.createVerticalBox();
        topLeft.add(ta);
        topLeft.add(checkPanel);

        Box top = Box.createHorizontalBox();
        top.add(topLeft);
        top.add(colorList);
        f.add(top);
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        new CommonComponent().init();
    }
}
运行效果
java 图形界面_第7张图片
参照页面:
Java图形化界面设计——布局管理器之BorderLayout
Java学习笔记之卡片式布局CardLayout
java可视化awt

你可能感兴趣的:(JAVA)