GridBagLayout使用案例+获取目录下所有的文件+获取创建时间及最后修改时间
package vvv;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFileChooser;
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.DefaultTableModel;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.vci.vm.pdm.Pdm;
//导入必要的包
public class denglu<E> extends JFrame {
JTextField jTextField;
JTextField jPasswordField;
JLabel jLabel1, jLabel2;
JPanel jp1, jp2, jp4;
JScrollPane jp3;
JButton jb1, jb2, imbtn;
JTable jtable;
String[] columnTitle = { "请选择", "文件名", "创建时间", "最后修改时间" };
List<Column216> list = new ArrayList<Column216>();
CustomModel mod;
public denglu() {
// 设置窗口居中显示
int windowWidth = this.getWidth(); // 获得窗口宽
int windowHeight = this.getHeight(); // 获得窗口高
Toolkit kit = Toolkit.getDefaultToolkit(); // 定义工具包
Dimension screenSize = kit.getScreenSize(); // 获取屏幕的尺寸
int screenWidth = screenSize.width; // 获取屏幕的宽
int screenHeight = screenSize.height; // 获取屏幕的高
this.setLocation(screenWidth / 2 - windowWidth / 2, screenHeight / 2
- windowHeight / 2);// 设置窗口居中显示
jTextField = new JTextField("localhost",12);
jPasswordField = new JTextField(12);
jLabel1 = new JLabel("服务器地址");
jLabel2 = new JLabel("ZIP所在文件夹");
jb1 = new JButton("确认");
jb2 = new JButton("取消");
imbtn = new JButton("浏览");
jtable = new JTable();
mod= new CustomModel();
// 设置布局
GridBagLayout layout = new GridBagLayout();
this.setLayout(layout);
jp1 = new JPanel();
jp2 = new JPanel();
jp4 = new JPanel();
// 设置布局
jTextField.addMouseListener(new MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
if(e.getClickCount()==2){
jTextField.setText("");
}
};
} );
jp1.add(jLabel1);
jp1.add(jTextField);// 第一块面板添加用户名和文本框
jp2.add(jLabel2);
jp2.add(jPasswordField);// 第二块面板添加密码和密码输入框
// 对按钮添加事件
imbtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
ImportButton_actionPerformed(e);
// 将list中的数据转变为二维数组
for (int i = 0; i < columnTitle.length; i++) {
mod.addColumn(columnTitle[i]);
}
for (int i = 0; i < list.size(); i++) {
Column216 column216 = list.get(i);
Vector vector=new Vector();
vector.add(column216.getFlag());
vector.add(column216.getFileName());
vector.add(column216.getCreate_time());
vector.add(column216.getLastModified_time());
mod.addRow(vector);
}
jtable.setModel(mod);
jtable.repaint();
jtable.updateUI();
}
});
jb1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
ConfirmButton_actionPerformed(e);
}
});
jb2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
CancelButton_actionPerformed(e);
}
});
jp2.add(imbtn);// 第二块面板添加密码和密码输入框
jp3 = new JScrollPane(jtable);
jp4.add(jb1);
jp4.add(jb2); // 第四块面板添加确认和取消
// 进行布局管理
GridBagConstraints s = new GridBagConstraints();// 定义一个GridBagConstraints,
// 是用来控制添加进的组件的显示位置
s.fill = GridBagConstraints.BOTH;
// 该方法是为了设置如果组件所在的区域比组件本身要大时的显示情况
// NONE:不调整组件大小。
// HORIZONTAL:加宽组件,使它在水平方向上填满其显示区域,但是不改变高度。
// VERTICAL:加高组件,使它在垂直方向上填满其显示区域,但是不改变宽度。
// BOTH:使组件完全填满其显示区域。
s.gridx = 0;
s.gridy = 0;
s.gridwidth = 1;// 该方法是设置组件水平所占用的格子数,如果为0,就说明该组件是该行的最后一个
s.gridheight = 1;
s.weightx = 1;// 该方法设置组件水平的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
s.weighty = 0;// 该方法设置组件垂直的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
layout.setConstraints(jp1, s);// 设置组件
this.add(jp1);
s.gridx = 0;// 组件的横向坐标
s.gridy = 1;
s.gridwidth = 1;// 该方法是设置组件水平所占用的格子数,如果为0,就说明该组件是该行的最后一个
s.gridheight = 1;
s.weightx = 1;// 该方法设置组件水平的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
s.weighty = 0;// 该方法设置组件垂直的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
layout.setConstraints(jp2, s);// 设置组件
this.add(jp2);
s.gridx = 0;
s.gridy = 3;
s.gridwidth = 1;// 该方法是设置组件水平所占用的格子数,如果为0,就说明该组件是该行的最后一个
s.gridheight = 1;
s.weightx = 1;// 该方法设置组件水平的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
s.weighty = 2;// 该方法设置组件垂直的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
layout.setConstraints(jp3, s);// 设置组件
this.add(jp3); // 将三块面板添加到登陆框上面
s.gridx = 0;
s.gridy = 4;
s.gridwidth = 1;// 该方法是设置组件水平所占用的格子数,如果为0,就说明该组件是该行的最后一个
s.gridheight = 1;
s.weightx = 1;// 该方法设置组件水平的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
s.weighty = 0;// 该方法设置组件垂直的拉伸幅度,如果为0就说明不拉伸,不为0就随着窗口增大进行拉伸,0到1之间
layout.setConstraints(jp4, s);// 设置组件
this.add(jp4);
// 设置显示
this.setSize(700, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setTitle("216手动调用窗口");
}
void ImportButton_actionPerformed(ActionEvent e) {
try {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("c:/"));
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY );
int state = chooser.showOpenDialog(this);
if (chooser.getSelectedFile().getPath() != null) {
// 选中文件夹后,则来到此界面
jPasswordField.setText(chooser.getSelectedFile().getPath());
// 查看此文件夹下的所有文件,将文件名,创建时间,最后修改时间赋值到二维数组中
readfile(chooser.getSelectedFile().getPath());
}
} catch (Exception exdia) {
}
}
void CancelButton_actionPerformed(ActionEvent e) {
this.dispose();
}
void ConfirmButton_actionPerformed(ActionEvent e) {
String ip = jTextField.getText();
// 获取选中的行
//遍历表格,找到第一行是true的列
int rowCount = mod.getRowCount();
for (int i = rowCount-1; i >=0; i--) {
Boolean flag = (Boolean) mod.getValueAt(i, 0);
if(flag){
String String_filename = (String) mod.getValueAt(i, 1);
System.out.println("文件名:"+String_filename+" ip地址:"+ip);
client_method(String_filename, ip);
mod.removeRow(i);
}
}
jtable.setModel(mod);
jtable.repaint();
jtable.updateUI();
}
/**
* 读取某个文件夹下的所有压缩文件
*/
public String readfile(String filepath) throws Exception {
try {
File file = new File(filepath);
if (!file.isDirectory()) {
} else if (file.isDirectory()) {
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File readfile = new File(filepath + "\\" + filelist[i]);
if (!readfile.isDirectory()) {
// 判断文件夹下面的文件是否是zip文件,是的话放入二维数组
if (readfile.getName().endsWith(".zip")
|| readfile.getName().endsWith(".ZIP")
|| readfile.getName().endsWith(".rar")) {
long lastModified = readfile.lastModified();// 最后修改时间
String lastModified_time = new SimpleDateFormat(
"yyyy/MM/dd hh:mm:dd").format(new Date(
lastModified));
String path = readfile.getPath();
String replace = path.replace(" ", "^ ");
String replace1 = replace.replace("(", "^(");
String replace2 = replace1.replace(")", "^)");
// 获取文件的创建时间
//备注方法适用于jdk1.7
/**String path = readfile.getPath();
Path path111=Paths.get(path);
BasicFileAttributeView basicview=Files.getFileAttributeView(path111, BasicFileAttributeView.class,LinkOption.NOFOLLOW_LINKS );
BasicFileAttributes attr = basicview.readAttributes();
Date createDate = new Date(attr.creationTime().toMillis());//
System.out.println(createDate);
String create_time = new SimpleDateFormat(
"yyyy/MM/dd hh:mm:dd").format(createDate);*/
Process p = Runtime.getRuntime()
.exec("cmd /C dir " + replace2
+ " /tc");
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
String str;
int j = 0;
String create_time = null;
while ((str = br.readLine()) != null) {
j++;
if (j == 6) {
if("".equals(str)){
create_time = null;
}else{
create_time = str.substring(0, 17);
}
}
}
// 获取文件名称
String fileName = readfile.getName();
Column216 arr = new Column216();
arr.setFlag(new Boolean(false));
arr.setFileName(fileName);
arr.setCreate_time(create_time);
arr.setLastModified_time(lastModified_time);
list.add(arr);
}
} else if (readfile.isDirectory()) {
// 获取所有子文件的zip文件
readfile(filepath + "\\" + filelist[i]);
}
}
}
} catch (Exception e) {
System.out.println("readfile() Exception:" + e.getMessage());
}
return "sucess";
}
class CustomModel extends DefaultTableModel {
/**
* 每次勾选的时候,无论是选中还是去掉勾选,都会使用此方法,row是行数,从0开始
*/
public boolean isCellEditable(int row, int column) {
// 首先将行数放到set中 ,如果set中有这个行数,则代表二次勾选,将行数从set中拿掉.最终set中是勾选的行数的索引
/*if (set.contains(row)) {
set.remove(row);
} else {
set.add(row);
}*/
if (column > 0) {
return false;
} else {
return true;
}
}
public Class getColumnClass(int c) {
if(c == 0)
return Boolean.class;
else
return Object.class;
}
}
private void client_method(String filename,String ip) {
// 工作中,将此注释部分打开即可
String lantai_wsdl_url = "http://"+ip+":4931/soa?wsdl";// 服务地址,将用户输入的服务器IP地址替换localhost
String lantai_namespace_url = "http://server.integration.sf.tji.com/";
String lantai_service_name = "ImplPDMService";
try {
URL wsdlURL = new URL(lantai_wsdl_url);
// 可以从wsdl的wsdl:definitions的targetNamespace查到第一个参数 //
// 从wsdl:service的name查到第二个参数ImplUserServiceService
QName SERVICE_NAME = new QName(lantai_namespace_url,
lantai_service_name);
// use Service.create to create Service instances Service service =
Service service = Service.create(wsdlURL, SERVICE_NAME);
Pdm port = service.getPort(Pdm.class);
String pdmToVm = port.pdmToVm(filename);// 文件名
if("0".equals(pdmToVm)){
JOptionPane.showMessageDialog(this, filename+"传输成功!");
}else{
JOptionPane.showMessageDialog(this, filename+"传输失败!"+pdmToVm);
}
System.out.println(pdmToVm);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, filename+"传输失败!"+e.getMessage());
e.printStackTrace();
}
}
public static void main(String[] args) {
new denglu();
}
}