Java Swing in action

Tip: After the article is written, the table of contents can be automatically generated. How to generate it can refer to the help document on the right

@ TOC Java Swing in action


foreword

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

For example: With the continuous development of artificial intelligence, the technology of machine learning is becoming more and more important. Many people have started to learn machine learning. This article introduces the basic content of machine learning.


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

1. Introduction to Java Swing

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

Based on the Abstract Window Toolkit (AWT) to enable cross-platform applications to use any pluggable look and feel. Swing developers can take advantage of Swing's rich, flexible features and modular components to create elegant user interfaces with very little code.
Swing provides many better screen display elements than AWT. They're written in pure Java, so they're as cross-platform as Java itself, unlike AWT. They are part of JFC. They support replaceable panels and themes (default themes unique to various operating systems), but instead of really using the devices provided by the native platform, they only mimic them superficially. This means you can use any panel supported by JAVA on any platform. The disadvantage of lightweight components is slower execution speed, and the advantage is that they can adopt uniform behavior on all platforms.

2. Use steps

1. JFrame development example:

The code is as follows (example):

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


}


Summarize

The above is what I want to talk about today. This article only briefly introduces the use of Swing. If you have any questions, you can leave a message to communicate.

Guess you like

Origin blog.csdn.net/wzw_wwl/article/details/124187633