GridBagLayoutFrameDemo--摇号

来源:互联网 发布:淘宝营销中心 编辑:程序博客网 时间:2024/04/27 22:39

参考文档:

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}}}}


0 0
原创粉丝点击