Java GUI编程

Posted 菜菜小谭

tags:

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

**********************网格布局 GridLayout**********************

类似于表格一样,可以设置一个 几行几列的表格


小技巧(让两个组件垂直排列的小技巧):


一个组件放到边框布局的北边,另一个组件放到中间


演示代码:


package com.awt.layout;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;

public class TestGridLayout {
public static void main(String[] args) {

Frame frame = new Frame("测试窗口");

//北边放置一个文本框
frame.add(new TextField(20),BorderLayout.NORTH);

//中间放一个Panel(计算器)
Panel panel = new Panel();

panel.setLayout(new GridLayout(3, 5, 4, 4));

String[] name = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/","."};

for (int i = 0; i < name.length; i++) {
panel.add(new Button(name[i]));
}

frame.add(panel);

frame.pack();//设置窗口为最佳大小

frame.setVisible(true);
}
}

**********************卡片布局 CardLayout**********************

类似扑克牌,第一次添加的组件在最上面,第二次添加组件会放到第一张卡片的下面,

第三次添加的组件会放到第二张卡片下面,始终只能看见第一次添加进去的组件


演示代码:


package com.chapter16.布局管理器;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestCardLayout {

private Frame frame = new Frame("测试卡片布局");

private Panel panel1 = new Panel();

private CardLayout cardLayout = new CardLayout();

private String[] nameArr = { "第1张", "第2张", "第3张", "第4张", "第5张" };

public static void main(String[] args) {
TestCardLayout test = new TestCardLayout();

test.init();
}

//专门用来初始化界面的方法
public void init() {

panel1.setLayout(cardLayout);

for (int i = 0; i < nameArr.length; i++) {

panel1.add(nameArr[i], new Button(nameArr[i]));//往panel中放5张卡片,并且为每张卡片 起一个名字 第一个参数是名字
}

frame.add(panel1);

// 设置按钮组panel 用来控制卡片 上一张 下一张
Panel panel2 = new Panel();

// 设置上一张的按钮
Button previousButton = new Button("上一张");

// 给按钮绑定事件
previousButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

// 上一张
cardLayout.previous(panel1);

}
});

// 设置下一张的按钮
Button nextButton = new Button("下一张");

// 给按钮绑定事件
nextButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

// 下一张
cardLayout.next(panel1);

}
});

// 设置第一张的按钮
Button firstButton = new Button("第一张");

// 给按钮绑定事件

//匿名内部类
firstButton.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {

cardLayout.first(panel1);

}




});

// 设置最后一张的按钮
Button lastButton = new Button("最后一张");

// 给按钮绑定事件
lastButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

// 最后一张
cardLayout.last(panel1);

}
});

// 设置跳到第三张的按钮
Button thirdButton = new Button("第3张");

// 给按钮绑定事件
thirdButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

// 第一张
cardLayout.show(panel1, "第3张");

}
});

//把这5个按钮放到第二个panel中
panel2.add(previousButton);
panel2.add(nextButton);
panel2.add(firstButton);
panel2.add(lastButton);
panel2.add(thirdButton);


frame.add(panel2,BorderLayout.SOUTH);

frame.pack();

frame.setVisible(true);

}

}

 

*******************************绝对定位*********************************

不使用任何布局管理器


如果程序员使用了这种布局方式,就必须主动的设置组件的大小和位置(失去了程序的跨平台的特性)

 

******************************BoxLayout盒式布局管理器和Box容器***************


使用BoxLayout可以实现让组件垂直排列或水平排列


f.setLayout(new BoxLayout(f,BoxLayout.Y_AXIS ));//垂直排列 水平排列的时候改成 X_AXIS

 


Box容器: 就是使用了BoxLayout布局的Panel


Box verticalBox = Box.createVerticalBox();//Box容器 就是使用了BoxLayout布局的Panel

相当于两步

Panel panel = new Panel();

panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS ));

 

*************************************回顾******************************************


1. FlowLayout 流式布局

Panel默认使用的是流式布局


2.BorderLayout 边框布局


Frame 默认使用的是边框布局


默认添加到中间


小技巧: 垂直排列 水平排列 都可以使用BorderLayout


3.GridLayout 网格布局


4.CardLayout 卡片布局


一叠扑克牌 先添加的在最上面 往下面添加 只能显示最上面那一张


5. 绝对定位 没有使用布局管理器


6. BoxLayout和Box容器


组件的垂直排列和水平排列

 

*******************************常用的awt组件*************************************


package com.chapter16;

import java.awt.*;

import javax.swing.Box;


/**
* 公司:蓝桥软件学院
* 作者:zhangzy
* 时间:2017年7月31日 下午3:24:47
* 功能:演示常用的Awt组件
*/
public class TestAwtComponent {

public static void main(String[] args) {


Frame frame = new Frame("演示常用的awt组件");


//----------------------------先写最里面的Panel----------------------------------
Panel panel = new Panel();

Choice colorChoice = new Choice();
colorChoice.add("红色");
colorChoice.add("绿色");
colorChoice.add("蓝色");


CheckboxGroup sexGroup = new CheckboxGroup();
//创建性别的单选框
Checkbox maleCheckBox = new Checkbox("男",sexGroup,true);//true默认被选中
Checkbox femaleCheckBox = new Checkbox("女",sexGroup,false);

Checkbox isMarried = new Checkbox("是否已婚",null,false);

panel.add(colorChoice);
panel.add(maleCheckBox);
panel.add(femaleCheckBox);
panel.add(isMarried);

//-----------------------创建一个垂直排列的Box----------------------------

Box verticalBox = Box.createVerticalBox();


TextArea textArea = new TextArea(5,20);
verticalBox.add(textArea);
verticalBox.add(panel);

//-----------------------创建一个水平排列的Box----------------------------
Box horizontalBox = Box.createHorizontalBox();

List list = new List(6,true);
list.add("绿色");
list.add("红色");
list.add("黄色");

horizontalBox.add(verticalBox);

horizontalBox.add(list);


//-----------------------创建一个Panel用来放单行文本框和按钮----------------------------

Panel panel2 = new Panel();

panel2.add(new TextField(50));
panel2.add(new Button("确认"));



frame.add(horizontalBox);
frame.add(panel2,BorderLayout.SOUTH);

frame.pack();

frame.setVisible(true);
}
}

 























































































































































































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

结对编程项目

QT 编程,关于QTableWidgetItem的问题

Python-GUI编程-PyQt5

Java GUI编程

GUI编程Swing的简单应用

Atitit gui界面ui技术发展史与未来趋势