提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@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的使用,有什么问题大家可以留言交流。