Java Swing 实战

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

@TOCJava Swing 实战


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Java Swing 介绍

Swing是一个用于开发Java应用程序用户界面的开发工具包。

以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这 一点不像AWT。 它们是JFC的一部分。 它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台 上使用JAVA支持的任意面板。 轻量级元件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。

二、使用步骤

1.JFrame开发示例:

代码如下(示例):

package com.wisdom.clientproxy;

import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

import com.eltima.components.ui.DatePicker;
import com.nari.slsd.hd.clientproxy.ClientProxy;
import com.nari.slsd.hd.common.FuncActionItem;
import com.nari.slsd.hd.common.IRunEntry;
import com.nari.slsd.hd.common.IStaticMsgCard;
import com.nari.slsd.hd.common.MessageBody;
import com.wisdom.model.DateModle;
import com.wisdom.service.IShowService;

public class ShowMain extends JPanel implements IRunEntry,IStaticMsgCard {
    
    
	
	private static final long serialVersionUID = 1L;

	private static IShowService testService;
	
//	private JFrame frame;
	private JTextField textField;
	private JComboBox<String> comboBox;
	private JPanel panelStart;
	private JPanel panelEnd;
	private JTable table;
	private JTextField textField_1;
	private JLabel lblNewLabel;
	private JScrollPane scrollPane;
	private JLabel lblNewLabel_1_2_1;
	private JButton btnNewButton_1;
	private JButton btnNewButton_1_1;
	
	
//	private IShowService testService;
	private Object [][]dataModel=null;
	private String title[]=null;
	private JComboBox<String> comboBox_1;
	private JComboBox<String> comboBox_2;
	private String[] cpName;
	//	数据列表存储数据
	private List<DateModle> list;
	//	下拉框字符值
	private String pageString = "每页100条";
	
	private String meterName,rcpName,startTime,endTime,timeInterval;
	
	//	总页数
	private int total;
	//	当前页数
	private int currentPage = 1;
	//	每页总数
	private int rowPerPage = 100;
	
	private Map<Integer, DateModle> changeData;

	/**
	 * Launch the application.
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
    
    
		
		
		ShowMain panel = new ShowMain();
		JFrame frame = new JFrame();
		//frame.getContentPane().setFont(new Font("宋体", Font.PLAIN, 14));
		frame.setContentPane(panel);
		frame.setBounds(100, 100, 1603, 691);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
//		
//		EventQueue.invokeLater(new Runnable() {
    
    
//			public void run() {
    
    
//				try {
    
    
//					ShowMain window = new ShowMain();
//					window.frame.setVisible(true);
//				} catch (Exception e) {
    
    
//					e.printStackTrace();
//				}
//			}
//		});
	}
	
	
	
	
	

	/**
	 * Create the application.
	 * @throws Exception 
	 */
	public ShowMain() throws Exception {
    
    
		initialize();
//		HTMLViews();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
    
    
		/*frame = new JFrame();
		frame.getContentPane().setFont(new Font("宋体", Font.PLAIN, 14));
		frame.setBounds(100, 100, 1303, 691);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);*/
		
		this.setLayout(null);
		
		textField = new JTextField();
		textField.setBounds(89, 15, 120, 23);
		this.add(textField);
		textField.setColumns(10);
		
		if(testService == null)
			testService = (IShowService) ClientProxy.getDataService("1234", "testWis");
		
		JLabel lblNewLabel_1 = new JLabel("开始日期:");
		lblNewLabel_1.setFont(new Font("宋体", Font.PLAIN, 14));
		lblNewLabel_1.setBounds(241, 9, 76, 34);
		this.add(lblNewLabel_1);
		
		//	开始时间框选择
		panelStart = new JPanel();
		panelStart.setBounds(306, 9, 133, 34);
		this.add(panelStart);
		DatePicker datePicker = new DatePicker(new Date(new Date().getTime()-24*60*60*1000),"yyyy-MM-dd",new Font("Times New",Font.BOLD,14),new Dimension(120,24));
		datePicker.getInnerTextField().setEditable(false);
		panelStart.add(datePicker);
		
		JLabel lblNewLabel_1_3 = new JLabel("结束日期:");
		lblNewLabel_1_3.setFont(new Font("宋体", Font.PLAIN, 14));
		lblNewLabel_1_3.setBounds(477, 9, 76, 34);
		this.add(lblNewLabel_1_3);
		
		//	结束时间框选择
		panelEnd = new JPanel();
		panelEnd.setBounds(539, 9, 133, 34);
		this.add(panelEnd);
		DatePicker datePicker_1 = new DatePicker(new Date(), "yyyy-MM-dd", new Font("Dialog", Font.BOLD, 14), new Dimension(120, 24));
		datePicker_1.getInnerTextField().setEditable(false);
		panelEnd.add(datePicker_1);
		
		JLabel lblNewLabel_1_1 = new JLabel("表计名称:");
		lblNewLabel_1_1.setFont(new Font("宋体", Font.PLAIN, 14));
		lblNewLabel_1_1.setBounds(31, 10, 76, 34);
		this.add(lblNewLabel_1_1);
		
		JLabel lblNewLabel_1_2 = new JLabel("终端名称:");
		lblNewLabel_1_2.setFont(new Font("宋体", Font.PLAIN, 14));
		lblNewLabel_1_2.setBounds(711, 9, 76, 34);
		this.add(lblNewLabel_1_2);
		
		//	下拉框选择
		comboBox = new JComboBox<String>();
		comboBox.setModel(new DefaultComboBoxModel<String>(queryCPName()));
		comboBox.setBounds(782, 15, 112, 23);
		this.add(comboBox);
		

		//	搜索按钮
		JButton btnNewButton = new JButton("搜索");
		btnNewButton.addActionListener(new ActionListener() {
    
    
			public void actionPerformed(ActionEvent e) {
    
    
			}
		});
		btnNewButton.addMouseListener(new MouseAdapter() {
    
    
			//	点击搜索事件
			@Override
			public void mouseClicked(MouseEvent e) {
    
    
				//	表计名称
				meterName = textField.getText();
				//	时间间隔
				rcpName = comboBox.getSelectedItem().toString();
				//	开始时间
				startTime = ((DatePicker)(panelStart.getComponent(0))).getText();
				//	结束时间
				endTime = ((DatePicker)(panelEnd.getComponent(0))).getText();
				timeInterval =  comboBox_2.getSelectedItem().toString();
				switch (timeInterval) {
    
    
				case "1小时":
					timeInterval = "00";
					break;
				case "30分钟":
					timeInterval = "30";
					break;
				case "15分钟":
					timeInterval = "15";
					break;
				default:
					timeInterval = null;
					break;
				}
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				Long dayTest = (long) 1;
		        try {
    
    
		        	dayTest = (sdf.parse(endTime).getTime()-sdf.parse(startTime).getTime())/(24*60*60*1000);
				} catch (ParseException e1) {
    
    
					e1.printStackTrace();
				}
		        if(dayTest >= 1) {
    
    

//		    		table = new JTable();
		    		table.setModel(new DefaultTableModel(queryData(),title) {
    
    
		    			private static final long serialVersionUID = 1L;
		    			//	设置数据表格行列不可编辑
		    			public boolean isCellEditable(int row, int column) {
    
    
		    				return column==6 || column==7 || column==8 || column==9?true:false;
		    			}
		    		});
		    		tableWidth();
		    		scrollPane.setViewportView(table);
		    		//	修改总页数
		    		lblNewLabel.setText("共计"+total+"条");
		    		textField_1.setText(currentPage+"/"+(int)Math.ceil((float)total/rowPerPage));
//		    		this.add(lblNewLabel);
		        } else {
    
    
		        	JOptionPane.showMessageDialog(null, "开始日期必须小于结束日期!", "", JOptionPane.ERROR_MESSAGE);
		        }
			}
		});
		btnNewButton.setBounds(1142, 15, 97, 23);
		this.add(btnNewButton);
		
		
		//		数据修改按钮
		JButton btnModifyButton = new JButton("修改数据");
		btnModifyButton.addActionListener(new ActionListener() {
    
    
			public void actionPerformed(ActionEvent e) {
    
    
			}
		});
		btnModifyButton.addMouseListener(new MouseAdapter() {
    
    
			//	点击搜索事件
			@Override
			public void mouseClicked(MouseEvent e) {
    
    
				System.out.println("changeData:   " + changeData);
			}
		});
		btnModifyButton.setBounds(1242, 15, 97, 23);
		this.add(btnModifyButton);
	
		

		//	定义表格抬头
		title = new String[] {
    
    
				"序号","管理单位", "变电站", "终端名称", "表计名称", "数据时间","正向有功总","反向有功总","正向无功总","反向无功总"
			};
		scrollPane = new JScrollPane();
		scrollPane.setBounds(31, 53, 1208, 512);
		this.add(scrollPane);
		
		table = new JTable();
		table.setModel(new DefaultTableModel(null,title) {
    
    
			private static final long serialVersionUID = 1L;
			//	设置数据表格行列不可编辑
			public boolean isCellEditable(int row, int column) {
    
    
				return column==6 || column==7 || column==8 || column==9 ? true : false;
			}
		});
		
		//添加监听事件
//		table.addMouseListener(new MouseAdapter(){
    
    
//			public void mouseClicked(MouseEvent event){
    
    
//				//单击事件
//				if(1==event.getClickCount()){
    
    
//					int row=table.rowAtPoint(event.getPoint());
//					contentFlag = table.getValueAt(row,4).toString();
//					//获取指定行和列的值
//					System.out.println(contentFlag);
//					System.out.println(table.getValueAt(row,6).toString());
//					System.out.println(table.getValueAt(row,7).toString());
//				}
//			}
//		});
		
		
		//	修改表格数据后触发该方法
		@SuppressWarnings("serial")
		Action action = new AbstractAction() {
    
    
		public void actionPerformed(ActionEvent e)
	      {
    
    
	        TableCellListener tcl = (TableCellListener)e.getSource();
	        if(changeData == null) {
    
    
				changeData = new HashMap<Integer, DateModle>();
	        }
	        
	        DateModle data = new DateModle();
	        data.setMpedName(table.getValueAt(tcl.getRow(),4).toString());
	        data.setP1r0(table.getValueAt(tcl.getRow(),6).toString());
	        data.setP2r0(table.getValueAt(tcl.getRow(),7).toString());
	        data.setP3r0(table.getValueAt(tcl.getRow(),8).toString());
	        data.setP4r0(table.getValueAt(tcl.getRow(),9).toString());
	        switch (tcl.getColumn()) {
    
    
			case 6:
				data.setP1r0(tcl.getNewValue().toString());
				break;
			case 7:
				data.setP2r0(tcl.getNewValue().toString());
				break;
			case 8:
				data.setP3r0(tcl.getNewValue().toString());
				break;
			case 9:
				data.setP4r0(tcl.getNewValue().toString());
				break;
			default:
				break;
			}
	        changeData.put(tcl.getRow(),data);
	      }
	    };
	    new TableCellListener(table, action);

		//	设置表格宽度
		tableWidth();

		scrollPane.setViewportView(table);
		
		
		//	上一页内容
		btnNewButton_1 = new JButton("<");
		btnNewButton_1.addMouseListener(new MouseAdapter() {
    
    
			@Override
			public void mouseClicked(MouseEvent e) {
    
    
				if(currentPage>1) {
    
    
					currentPage = currentPage - 1;
					changeData();
				}
			}
		});
		btnNewButton_1.setForeground(Color.BLACK);
		btnNewButton_1.setFont(new Font("宋体", Font.PLAIN, 14));
		btnNewButton_1.addActionListener(new ActionListener() {
    
    
			public void actionPerformed(ActionEvent e) {
    
    
			}
		});
		btnNewButton_1.setBounds(1076, 575, 45, 23);
		this.add(btnNewButton_1);
		
		//	下一页内容
		btnNewButton_1_1 = new JButton(">");
		btnNewButton_1_1.addActionListener(new ActionListener() {
    
    
			public void actionPerformed(ActionEvent e) {
    
    
			}
		});
		btnNewButton_1_1.addMouseListener(new MouseAdapter() {
    
    
			@Override
			public void mouseClicked(MouseEvent e) {
    
    
				if(currentPage<(int)Math.ceil((float)total/rowPerPage)) {
    
    
					currentPage = currentPage + 1;
					changeData();
				}
			}
		});
		btnNewButton_1_1.setForeground(Color.BLACK);
		btnNewButton_1_1.setFont(new Font("宋体", Font.PLAIN, 14));
		btnNewButton_1_1.setBounds(1194, 575, 45, 23);
		this.add(btnNewButton_1_1);
		
		//	中间页数说明 1/30
		textField_1 = new JTextField();
		textField_1.setEditable(false);
		textField_1.setText(currentPage+"/"+(int)Math.ceil((float)total/rowPerPage));
		textField_1.setBounds(1131, 576, 53, 21);
		this.add(textField_1);
		textField_1.setColumns(10);
		
		//	总页数记录
		lblNewLabel = new JLabel("共计0条");
		lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 14));
		lblNewLabel.setBounds(883, 575, 88, 23);
		this.add(lblNewLabel);
		
		comboBox_1 = new JComboBox<String>();
		comboBox_1.setModel(new DefaultComboBoxModel<String>(new String[] {
    
    "每页100条","每页300条","每页500条"}));
		comboBox_1.addActionListener(new ActionListener() {
    
    
			public void actionPerformed(ActionEvent e) {
    
    
				if(comboBox_1.getSelectedItem().toString() != pageString) {
    
    
					pageString = comboBox_1.getSelectedItem().toString();
					switch (pageString) {
    
    
					case "每页100条":
						rowPerPage = 100;
						break;
					case "每页300条":
						rowPerPage = 300;
						break;
					case "每页500条":
						rowPerPage = 500;
						break;
					default:
						rowPerPage = 100;
						break;
					}
				}
				changeData();
			}
		});
		comboBox_1.setBounds(981, 575, 85, 23);
		this.add(comboBox_1);
		
		//	时间间隔选择框
		lblNewLabel_1_2_1 = new JLabel("时间间隔:");
		lblNewLabel_1_2_1.setFont(new Font("宋体", Font.PLAIN, 14));
		lblNewLabel_1_2_1.setBounds(928, 9, 76, 34);
		this.add(lblNewLabel_1_2_1);
		
		comboBox_2 = new JComboBox<String>(new String[] {
    
    "1小时","30分钟","15分钟"});
		comboBox_2.setBounds(1005, 15, 112, 23);
		this.add(comboBox_2);
		
		
	    
	    //让窗口响应大小改变事件
	    this.addComponentListener(new ComponentAdapter() {
    
    
            @Override
            public void componentResized(ComponentEvent e) {
    
    
            	resizeTable(true);
            }
        });
	   
		
		
	
	}
	
	//	实时调整窗口大小
	public void resizeTable(boolean bool) {
    
    
        scrollPane.setBounds(31, 53, this.getSize().width-100, this.getSize().height-180);
        this.add(scrollPane);
		scrollPane.setViewportView(table);
		
		comboBox_1.setBounds(this.getSize().width-322, this.getSize().height-116, 85, 23);
		lblNewLabel.setBounds(this.getSize().width-420, this.getSize().height-116, 88, 23);
		btnNewButton_1.setBounds(this.getSize().width-227, this.getSize().height-116, 45, 23);
		btnNewButton_1_1.setBounds(this.getSize().width-109, this.getSize().height-116, 45, 23);
		textField_1.setBounds(this.getSize().width-172, this.getSize().height-116, 53, 21);
		this.add(comboBox_1,lblNewLabel);
		this.add(btnNewButton_1,comboBox_2);
		this.add(textField_1);
	}

	
	//	设置表格宽度
	public void tableWidth() {
    
    
		table.getColumnModel().getColumn(0).setPreferredWidth(15);
		table.getColumnModel().getColumn(6).setPreferredWidth(40);
		table.getColumnModel().getColumn(7).setPreferredWidth(40);
		table.getColumnModel().getColumn(8).setPreferredWidth(40);
		table.getColumnModel().getColumn(9).setPreferredWidth(40);
		setColumnColor(table);
	}
	
	
	//	设置table表格隔行变色功能
	public static void setColumnColor(JTable table) {
    
    
		try
		{
    
    
			DefaultTableCellRenderer tcr = new DefaultTableCellRenderer(){
    
    
				private static final long serialVersionUID = 1L;
				public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected, boolean hasFocus,int row, int column){
    
    
					if(row%2 == 0)
						setBackground(Color.WHITE);//设置奇数行底色
					else if(row%2 == 1)
						setBackground(new Color(220,230,241));//设置偶数行底色
					return super.getTableCellRendererComponent(table, value,isSelected, hasFocus, row, column);
				}
			};
			for(int i = 0; i < table.getColumnCount(); i++) {
    
    
				table.getColumn(table.getColumnName(i)).setCellRenderer(tcr);
			}
			tcr.setHorizontalAlignment(JLabel.CENTER);
		}
		catch (Exception e){
    
    
			e.printStackTrace();
		}
	}
	
	
	//	改变每页显示条数时触发
	public void changeData () {
    
    
		 	dataModel=new Object[rowPerPage][title.length];
	        if(list!=null) {
    
    
	        	for(int i=(currentPage-1)*rowPerPage;i<currentPage*rowPerPage;i++){
    
    
	        		if(list.size()>i) {
    
    
	        			dataModel[i%rowPerPage][0]=list.get(i).getNo();
		            	dataModel[i%rowPerPage][1]=list.get(i).getOrgName();
		            	dataModel[i%rowPerPage][2]=list.get(i).getSubsName();
		            	dataModel[i%rowPerPage][3]=list.get(i).getRcpName();
		            	dataModel[i%rowPerPage][4]=list.get(i).getMpedName();
		            	dataModel[i%rowPerPage][5]=list.get(i).getDataTime();
		            	dataModel[i%rowPerPage][6]=list.get(i).getP1r0();
		            	dataModel[i%rowPerPage][7]=list.get(i).getP2r0();
		            	dataModel[i%rowPerPage][8]=list.get(i).getP3r0();
		            	dataModel[i%rowPerPage][9]=list.get(i).getP4r0();
	        		}
		        }
		        
//	    		table = new JTable();
	    		table.setModel(new DefaultTableModel(dataModel,title) {
    
    
	    			private static final long serialVersionUID = 1L;
	    			//	设置数据表格行列不可编辑
	    			public boolean isCellEditable(int row, int column) {
    
    
	    				return false;
	    			}
	    		});
	    		tableWidth();
	    		scrollPane.setViewportView(table);
	    		textField_1.setText(currentPage+"/"+(int)Math.ceil((float)total/rowPerPage));
	    		this.add(textField_1);
	        }
	}
	
	
	//	查询数据方法
	public Object[][] queryData(){
    
    
        list=testService.getData(meterName,rcpName,startTime,endTime,timeInterval);
        total = list.size();
        dataModel=new Object[rowPerPage][title.length];
        if(list !=null && list.size()>0) {
    
    
        	 for(int i=(currentPage-1)*rowPerPage;i<rowPerPage;i++){
    
    
         		dataModel[i%rowPerPage][0]=list.get(i).getNo();
             	dataModel[i%rowPerPage][1]=list.get(i).getOrgName();
             	dataModel[i%rowPerPage][2]=list.get(i).getSubsName();
             	dataModel[i%rowPerPage][3]=list.get(i).getRcpName();
             	dataModel[i%rowPerPage][4]=list.get(i).getMpedName();
             	dataModel[i%rowPerPage][5]=list.get(i).getDataTime();
             	dataModel[i%rowPerPage][6]=list.get(i).getP1r0();
             	dataModel[i%rowPerPage][7]=list.get(i).getP2r0();
             	dataModel[i%rowPerPage][8]=list.get(i).getP3r0();
             	dataModel[i%rowPerPage][9]=list.get(i).getP4r0();
             }
        }
      
        return dataModel;
    }
	
	
	//	添加终端下拉框数据
	public String[] queryCPName() {
    
    
		
		List<String> list = testService.getCPName();
		cpName=new String[list.size()];
		for(int i=0;i<cpName.length;i++){
    
    
			cpName[i]=list.get(i);
        }
		return cpName;
	}
	


}


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Swing的使用,有什么问题大家可以留言交流。

猜你喜欢

转载自blog.csdn.net/wzw_wwl/article/details/124187633