Java Swing制作界面

Java Swing框架可以用于开发桌面窗体程序。下面是一个例子,是图论课大作业的UI展示界面。功能是读入课表数据(课程时间、课容量),按照课间通勤人数最小的原则,给课程排教室。

Java Swing制作界面_第1张图片

代码

1. 主类:绘制界面

用JPanel的setLayout方法绘制界面,例如:

contentPane.setLayout(new GridLayout(1,2));

表示将contentPane页面分为一行两列。

还有就是组件对象也可以一定对象数组,但是对象数组new出来之后数组的每个对象元素还要再new出来。

例如:

JRadioButton[] jr = new JRadioButton[j1Num+j2Num];		// 单选按钮数组
ActionListener[] ac_jr = new ActionSwitchTime[j1Num+j2Num];// 单选按钮事件监听器
for (i=0; i

完整代码

package gui;
import javax.swing.table.DefaultTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import baselineFromFile.CourseLoad;

public class GUI {
	static final int WIDTH = 1000;								// 页面宽度
	static final int HEIGHT = 1200;								// 页面高度
	static public String ctime = "11";							// 当前显示的课表的时间段
	static public final String[] head = {"课程名","教学楼","教室号"};// 表头
	static public DefaultTableModel model = new DefaultTableModel();	// 表格内容
	public static void main(String args[])
	{
		JFrame jf = new JFrame
		("基于二分图染色的教室集中化排课系统  2018年4月17日");	// 顶层容器
		jf.setSize(WIDTH, HEIGHT);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel contentPane = new JPanel();						// 中间容器
		contentPane.setLayout(new GridLayout(1,2));				// 总体横向布局
		jf.setContentPane(contentPane);							// 设置内容面板
		// 页面1:左侧页面
		JPanel jp1 = new JPanel();								// 左侧页面,放按钮
		jp1.setLayout(new GridLayout(1,2));						// 分左右2列					
		// 左侧页面的子页面
		JPanel jp11 = new JPanel();
		JPanel jp12 = new JPanel();
		jp11.setLayout(new GridLayout(11,1));
		jp12.setLayout(new GridLayout(11,1));
		jp1.add(jp11);
		jp1.add(jp12);
		// 文字
		JLabel jl = new JLabel("2017-2018春季学期");				// 固定的文字标签
		jl.setFont(new Font(null, Font.PLAIN, 25));				// 设置字体
		jp11.add(jl);
		// 按钮
		JButton b_do = new JButton("排课");						// "排课"按钮
		b_do.setFont(new Font(null, Font.PLAIN, 20));			// 设置按钮上文字的字体
		jp12.add(b_do);
		ActionListener ac_do = new ActionDo();					// "排课"按钮事件监听器
		b_do.addActionListener(ac_do);							// 向事件源"排课"按钮注册
		// 单选按钮
		int i = 0, j1Num = CourseLoad.FIRSTTABLE.length, 
		j2Num = CourseLoad.SECONDTABLE.length;
		ButtonGroup bg = new ButtonGroup();						// 互斥单选按钮组
		JRadioButton[] jr = new JRadioButton[j1Num+j2Num];		// 单选按钮数组
		ActionListener[] ac_jr = new ActionSwitchTime[j1Num+j2Num];// 单选按钮事件监听器
		for (i=0; i

2. 按钮的响应类:调用排课算法给出计算结果,放在excel文件里

package gui;

import java.awt.event.*;
import baselineFromFile.RunArrangeFromFile;

public class ActionDo implements ActionListener{
	public void actionPerformed(ActionEvent e)
	{
		String dfn = "data.xls";
		RunArrangeFromFile.doArrange(dfn);
	}
}
3. 单选按钮的响应类:加载不同的excel文件显示每个时间段的排课结果
package gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import baselineFromFile.CourseLoad;

public class ActionSwitchTime implements ActionListener			
// 根据按下的单选按钮的编号改变ctime即显示的课表的时间段
{
	public int i;					// 单选按钮编号
	public ActionSwitchTime(int ii)	// 设置单选按钮的编号
	{
		i = ii;
	}
	public void actionPerformed(ActionEvent e)	// 根据按钮编号改变课表时间段字符串
	{
		int len1 = CourseLoad.FIRSTTABLE.length;
		if (i < len1)
		{
			GUI.ctime = CourseLoad.FIRSTTABLE[i];// 左边一列按钮
		}
		else
		{
			GUI.ctime = CourseLoad.SECONDTABLE[i-len1];	// 右边一列按钮
		}
		loadResult();							// 重新加载当前时间段的排课结果
	}
	public void loadResult()					// 根据当前ctime的值从excel文件中加载排课数据
	{
		String fn = GUI.ctime + ".xls";			// ctime对应的结果的文件名
		int i = 0;
		try {
			File ff = new File(fn);
			FileInputStream fis = new FileInputStream(ff);
			Workbook wb = Workbook.getWorkbook(fis);	// Excel Workbook类
			Sheet sheet = wb.getSheet(0);	// 标签页,getSheet()里是标签页号
			String result[][] = new String[sheet.getRows()][3];	// 初始化result数组大小
			for (i=0; i

你可能感兴趣的:(面向对象,Java)