GridBagLayoutFrameDemo--摇号

参考文档:

swing布局详解(附示例图)

效果如下:



代码如下:


/**
 * 功能:
 * 1.可以从文件读取人员账号信息
 * 2.新增人员可以追加到文件中
 * 3.可以删除人员,并在文件中也删除
 * 4.摇号,随机
 */

package com.test1;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

public class GridBagLayoutFrame extends JFrame {
	private static final long serialVersionUID = 6819222900970457455L;
	// 定义需要的组件
	private JPanel mainPanel;
	private JButton addButton;
	private JButton leftButton;
	private JButton rightButton;
	private JLabel label;
	private JTextField field;
	private DefaultListModel leftModel;
	private DefaultListModel rightModel;
	private JList leftList;
	private JList rightList;
	BufferedReader br = null;
	BufferedWriter bw = null;
	FileReader fr = null;
	FileWriter fw = null;
	JScrollPane jsp ;
	// 临时存放变量的数组列表
	ArrayList dd;
	
	public static void main(String[] args) {
		// 为事件派发线程增加一个任务:
        // 创建并显示这个应用程序的GUI(图像用户界面)
        // 在事件派发线程中所有挂起的事件都被处理后才会调用如下方法,
        // 常用于更新界面。
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
			}
		});
	}
	
	 /**
     * 创建GUI并显示。为了线程安全,这个方法应该
     * 在事件派发线程中调用。
     * */
	private static void createAndShowGUI() {
		new GridBagLayoutFrame("摇号by毛二");
	}

	//构造函数
	public GridBagLayoutFrame(String title) {
		// 创建组件
		mainPanel = new JPanel();
		addButton = new JButton();
		leftButton = new JButton();
		rightButton = new JButton();
		label = new JLabel();
		field = new JTextField();
		leftModel = new DefaultListModel();
		rightModel = new DefaultListModel();
		leftList = new JList(leftModel);
		rightList = new JList(rightModel);
		dd = new ArrayList();
		
		initComponent();
		addData();
		
		//设置窗体属性
		setTitle(title);
		setPreferredSize(new Dimension(600, 300));
		setLocation(400,100);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 显示窗口
		pack();
		setVisible(true);
	}

	private void initComponent() {
		readFile(new File("D:\\摇号.txt"));
		label.setText("添加人员:");
		addButton.setText("添加");
		
//		 leftList.setPreferredSize(new Dimension(150, 250));
		// 从ArrayList中把数据显示到左边文本区
		int i = 0;
		while (i >= 0 && i < dd.size()) {
			((DefaultListModel) leftList.getModel()).addElement(dd.get(i));
			i++;
		}
		jsp = new JScrollPane(leftList);
		// 设置你希望显示多少的选项
		leftList.setVisibleRowCount(5);
		rightList.setPreferredSize(leftList.getSize());
		leftButton.setText("删除");
		rightButton.setText("开始摇号啦");
		mainPanel.setBorder(BorderFactory.createTitledBorder("摇号选择框"));
		mainPanel.setLayout(new GridBagLayout());

		GridBagConstraints c = new GridBagConstraints();

		c.gridx = 0; // 0行0列
		c.gridy = 0;
		c.gridwidth = 1;
		c.gridheight = 1;
		c.fill = GridBagConstraints.HORIZONTAL;
		c.weightx = 0;
		c.weighty = 0;
		mainPanel.add(label, c);

		c.gridx++;
		c.weightx = 1;
		mainPanel.add(field, c);

		c.gridx++;
		c.weightx = 0;
		c.gridwidth = 1;
		c.gridheight = 1;
		// c.fill = GridBagConstraints.HORIZONTAL;
		mainPanel.add(addButton, c);

		c.gridx = 0;
		c.gridy = 1;
		c.weightx = 1;
		c.weighty = 1;
		c.gridwidth = 2;
		c.gridheight = 2;
		c.fill = GridBagConstraints.BOTH;
		mainPanel.add(jsp, c);

		c.gridx = 2;
		c.gridy = 1;
		c.gridwidth = 1;
		c.gridheight = 1;
		c.weightx = 0;
		c.weighty = 0.5;
		c.anchor = GridBagConstraints.SOUTH;
		c.fill = GridBagConstraints.HORIZONTAL;
		mainPanel.add(leftButton, c);

		c.gridx = 2;
		c.gridy = 2;
		c.anchor = GridBagConstraints.NORTH;
		c.fill = GridBagConstraints.HORIZONTAL;
		mainPanel.add(rightButton, c);
		c.gridx = 3;
		c.gridy = 1;
		c.gridwidth = 1;
		c.gridheight = 2;
		c.weightx = 1;
		c.weighty = 1;
		c.fill = GridBagConstraints.BOTH;
		mainPanel.add(rightList, c);

		this.getContentPane().add(mainPanel);
	}

	private void addData() {
		addButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				addItem();
			}
		});

		leftButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				removeItem();
			}
		});

		rightButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				rockItem();
			}
		});
	}

	private void addItem() {

		if (field.getText() != null && !field.getText().equals("")) {
			((DefaultListModel) leftList.getModel())
					.addElement(field.getText());
			dd.add(field.getText());
			writeFile(dd);
			field.setText("");
		}
	}

	private void removeItem() {
		int v = leftList.getSelectedIndex();
		if (v != -1) {
			// 从左边列表中删除选中的人员
			Object o = leftList.getSelectedValue();
			((DefaultListModel) leftList.getModel()).remove(leftList
					.getSelectedIndex());

			// 从ArrayList中删除选中的人员。从而修改文件
			dd.remove(v);
			writeFile(dd);
		}
	}

	private void rockItem() {
		// 先清空右边显示的上一次摇号的数据
		for (int j = 0; j < ((DefaultListModel) rightList.getModel()).getSize(); j++) {
			((DefaultListModel) rightList.getModel()).removeAllElements();
		}

		// 准备随机选择摇号
		Random rand = new Random();
		int i = rand.nextInt(dd.size());
		leftList.setSelectedIndex(i);

		if (leftList.getSelectedIndex() != -1) {
			Object o = leftList.getSelectedValue();

			((DefaultListModel) rightList.getModel()).addElement(o);
		}
	}

	public void readFile(File f) {
		// 初始化,从文档中把数据读出到ArrayList中
		try {
			// 先创建一个FileReader对象,然后升级成BufferedReader对象
			fr = new FileReader(f);
			br = new BufferedReader(fr);

			/*
			 * Reader r = new InputStreamReader(new FileInputStream(f),"GBK");//防止乱码
			 * br = new BufferedReader(r);
			 */
			// 循环读取
			String s = "";
			while ((s = br.readLine()) != null && !"".equals(s)) {
				dd.add(s);
			}
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			try {
				br.close();
				fr.close();
			} catch (Exception e2) {
				// TODO: handle exception
			}
		}

	}

	public void writeFile(ArrayList a) {
		try {
			File f = new File("D:\\摇号.txt");
			//如果文件不存在,先创建
			if(!f.exists()){
				f.createNewFile();
			}
			fw = new FileWriter(f);
			bw = new BufferedWriter(fw);
			int i = 0;
			while (i >= 0 && i < a.size()) {
				if (i < (a.size() - 1)) {
					bw.write(dd.get(i).toString() + "\r\n");
				} else {
					bw.write(dd.get(i).toString());
				}
				i++;
			}
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			try {
				// 后开的先关闭流
				bw.close();
				fw.close();
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章