第一次发表文章,不足之处还望大家指正
作为代码圈的新人,所以做的任务也都不是很复杂的,最近BOSS给了一个任务,利用JFrame做一个文件上传应用界面,应用界面的大致需求是支持系统托盘,登录界面,文件展示界面,文件上传界面等。因为第一次接触JFrame这系列的开发,所以做的不是很快,直接上代码吧!
完整代码链接:项目代码资源链接
public class Login {
private static JFrame frame;
public Login() {
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame = new JFrame();
frame.setTitle("登录页面");
frame.setSize(670, 300);
frame.setLocation(200, 200);
frame.setAlwaysOnTop(true);
frame.getContentPane().setLayout(null);
// 参数输入位置一
JLabel userName = new JLabel("*用户名:");
// 文字设置
userName.setForeground(Color.red);
userName.setBounds(30, 30, 120, 30);
userName.setLocation(50, 30);
userName.setFont(new Font("宋体", Font.PLAIN, 14));
frame.getContentPane().add(userName);
// 参数输入框一
JTextField userNameValue = new JTextField();
userNameValue.setLocation(134, 31);
userNameValue.setSize(454, 30);
userNameValue.setPreferredSize(new Dimension(100, 50));
userNameValue.setBackground(Color.WHITE);
// 对用户输入内容进行验证
userNameValue.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
// TODO Auto-generated method stub
JTextField textField = (JTextField) e.getSource();
String text = textField.getText();
if (text.length() == 0) {
return;
}
char charAt = text.charAt(text.length() - 1);
// 数字 0-9
// 英文字母 A-z
// 中文最常用的输入范围是u4E00-u9FA5,也有使用U+4E00~ U+9FFF 的,目前已知 U+9FA6~U+9FFF 之间的字符还属于空码
if (!(charAt >= '0' && charAt <= '9' || charAt >= 'A' && charAt <= 'z'
|| charAt >= '\u4E00' && charAt <= '\u9FA5')) {
// 提示
JOptionPane.showMessageDialog(textField, "只能输入中文,大小写字母,数字", "提示",
JOptionPane.PLAIN_MESSAGE);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// 去掉JTextField末尾字符
textField.setText(text.substring(0, text.length() - 1));
}
});
}
}
});
frame.getContentPane().add(userNameValue);
// 参数输入位置二
JLabel password = new JLabel("*密码:");
// 文字设置
password.setForeground(Color.red);
password.setBounds(71, 79, 120, 30);
password.setLocation(50, 80);
password.setFont(new Font("宋体", Font.PLAIN, 14));
frame.getContentPane().add(password);
// 参数输入框二
JTextField passwordValue = new JTextField("");
passwordValue.setLocation(134, 70);
passwordValue.setSize(454, 30);
passwordValue.setPreferredSize(new Dimension(100, 50));
passwordValue.setBackground(Color.WHITE);
// 对用户输入内容进行验证
passwordValue.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
// TODO Auto-generated method stub
JTextField textField = (JTextField) e.getSource();
String text = textField.getText();
if (text.length() == 0) {
return;
}
char charAt = text.charAt(text.length() - 1);
// 数字 0-9
// 英文字母 A-z
// 中文最常用的输入范围是u4E00-u9FA5
// 也有使用U+4E00~ U+9FFF 的,但目前 U+9FA6~U+9FFF 之间的字符还属于空码,暂时还未定义,但不能保证以后不会被定义
if (!(charAt >= '0' && charAt <= '9' || charAt >= 'A' && charAt <= 'z')) {
// 提示
JOptionPane.showMessageDialog(textField, "只能输入大小写字母,数字", "提示",
JOptionPane.PLAIN_MESSAGE);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// 去掉JTextField末尾字符
textField.setText(text.substring(0, text.length() - 1));
}
});
}
}
});
frame.getContentPane().add(passwordValue);
// 单选框
JCheckBox savePWCheckBox = new JCheckBox("保存密码");
// 默认不被选中
savePWCheckBox.setSelected(false);
savePWCheckBox.setBounds(50, 115, 130, 30);
savePWCheckBox.setLocation(50, 120);
frame.getContentPane().add(savePWCheckBox);
// 登录按钮
JButton loginButton = new JButton("登录");
loginButton.setBounds(200, 170, 120, 30);
loginButton.setLocation(200, 170);
// 事件监听--跳转文件界面
loginButton.addActionListener(getActionListener(userNameValue, passwordValue, frame));
// 增加快捷键
loginButton.registerKeyboardAction(getActionListener(userNameValue, passwordValue, frame),
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
frame.getContentPane().add(loginButton);
// 取消按钮
JButton cancellButton = new JButton("取消");
cancellButton.setBounds(615, 337, 120, 30);
cancellButton.setLocation(350, 170);
cancellButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
// 这里需要注意 dispose是可以后台运行的
frame.dispose();
}
});
// 增加快捷键
cancellButton.registerKeyboardAction(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
frame.dispose();
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
frame.getContentPane().add(cancellButton);
// 这句话是窗口关闭确认的重点--即能否后台运行的重点
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
super.windowClosing(e);
int option = JOptionPane.showConfirmDialog(frame, "确定退出系统? ", "提示 ",
JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
});
// 固定设置
frame.setVisible(true);// 显示
frame.setResizable(true);// 窗口可调
} catch (Exception e) {
e.printStackTrace();
}
}
});
// 添加应用托盘功能
if (SystemTray.isSupported()) {// 判断系统是否支持托盘
SystemTray tray = SystemTray.getSystemTray();// 获取系统托盘
// 创建一个托盘图标对象
Image image = Toolkit.getDefaultToolkit().getImage("resources/images/e6599b2722aefcc37912e87658aaa293.png");
TrayIcon icon = new TrayIcon(image);
/*
* try { trayicon = new
* TrayIcon(ImageIO.read(getClass().getClassLoader().getResource("d11.png"))
* ,"Tray demo",popup); } catch (IOException e1) {
* System.out.println("图片加载失败!"); }
*/
icon.setToolTip("FileUpload");
icon.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
if (e.getClickCount() == 2) {
frame.setVisible(true);
}
}
});
// 图片显示不出来的一个关键点--很多人做这块图片无法显示很可能是图片大小不能自适应系统
icon.setImageAutoSize(true);
try {
// 将托盘图表添加到系统托盘
tray.add(icon);
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 创建托盘弹出菜单
PopupMenu menu = new PopupMenu();
// 添加一个用于退出的按钮
MenuItem item = new MenuItem("exit");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
menu.add(item);
// 添加弹出菜单到托盘图标
icon.setPopupMenu(menu);
}
}
// 登录验证
public static ActionListener getActionListener(JTextField userNameValue, JTextField passwordValue, JFrame frame) {
ActionListener actionListener = new ActionListener() {
// TODO Auto-generated method stub
@Override
public void actionPerformed(ActionEvent e) {
// 获取用户输入的用户名密码
String userNameWord = userNameValue.getText();
String passwordWord = passwordValue.getText();
// 判断用户名密码是否正确
if ("zlq".equals(userNameWord) && "123".equals(passwordWord)) {
// 关闭当前窗口
frame.dispose();
// 跳转到文件上传界面
FileUpload fileUpload = new FileUpload();
fileUpload.main(null);
}
if ("".equals(userNameWord) && "".equals(passwordWord)) {
// 提示
JOptionPane.showMessageDialog(frame, "不能为空", "提示", JOptionPane.PLAIN_MESSAGE);
}
}
};
return actionListener;
}
}
以上是登录界面的代码,个人在做的时候注意的点包括:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
这句代码是重点,代表默认不做任何操作,一切交由窗口监听器frame.addWindowListener
处理icon.setImageAutoSize(true);
翻阅了很多博客,因为一开始我添加的图标一直无法正常显示,最后想明白了应该是图片没有适应系统图标的大小,敲了这句话就好了public class FileUpload {
private static JFrame frame;
private static int compareTo = 0;
public FileUpload() {
frame = new JFrame();
frame.setSize(1102, 585);
frame.setLocation(200, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private static void changDate(JTextField jTextField) {
Runnable runnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (compareTo < 0) {
jTextField.setText("");
}
}
};
SwingUtilities.invokeLater(runnable);
}
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frame.setTitle("上传列表");
frame.getContentPane().setLayout(null);
// 标题一
JLabel t1 = new JLabel(">>查条件");
// 文字颜色
t1.setForeground(Color.red);
t1.setBounds(50, 50, 120, 30);
t1.setLocation(5, 0);
frame.getContentPane().add(t1);
// 查询条件一
JLabel startTimeLable = new JLabel("上传开始时间:");
// 文字设置
startTimeLable.setForeground(Color.BLACK);
startTimeLable.setBounds(30, 30, 120, 30);
startTimeLable.setLocation(30, 30);
startTimeLable.setFont(new Font("宋体", Font.PLAIN, 14));
frame.getContentPane().add(startTimeLable);
// 搜索条件输入框一
JTextField searchStartTime1 = new JTextField("");
searchStartTime1.setLocation(150, 24);
searchStartTime1.setSize(120, 30);
searchStartTime1.setPreferredSize(new Dimension(100, 50));
searchStartTime1.setBackground(Color.WHITE);
// 日期选择插件
DateChooser startTimeDateChooser1 = DateChooser.getInstance("yyyy-MM-dd");
startTimeDateChooser1.register(searchStartTime1);
frame.getContentPane().add(searchStartTime1);
// 搜索条件中间字
JLabel middleWord1 = new JLabel(" ─ ");
// 文字设置
middleWord1.setForeground(Color.BLACK);
middleWord1.setBounds(264, 30, 120, 30);
middleWord1.setLocation(270, 25);
middleWord1.setFont(new Font("宋体", Font.PLAIN, 14));
frame.getContentPane().add(middleWord1);
// 搜索条件输入框二
JTextField searchStartTime2 = new JTextField("");
searchStartTime2.setLocation(300, 24);
searchStartTime2.setSize(120, 30);
searchStartTime2.setPreferredSize(new Dimension(100, 50));
searchStartTime2.setBackground(Color.WHITE);
// 日期选择插件
DateChooser startTimeDateChooser2 = DateChooser.getInstance("yyyy-MM-dd");
startTimeDateChooser2.register(searchStartTime2);
// 实现对输入框内容的实时监控
Document startTime2Document = searchStartTime2.getDocument();
startTime2Document.addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
System.out.println("remove:" + searchStartTime2.getText());
}
/*
* 这段代码是为了处理 Exception in thread "AWT-EventQueue-0"
* java.lang.IllegalStateException: Attempt to mutate in notification 这个错误,起因是
* 在调用文档监控器的内部方法中直接对 JTextField 进行修改 是不被允许的,因为当调用文档监控器时 JTextField会被监控器锁定
* 所以,此时需要调用一个延迟执行的线程队列,使得监控与更改队列执行,即可解决问题
*/
/*
* private void changDate() { Runnable runnable = new Runnable() {
*
* @Override public void run() { // TODO Auto-generated method stub if
* (compareTo<0) { searchStartTime2.setText(""); } } };
* SwingUtilities.invokeLater(runnable); }
*/
@Override
public void insertUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
String startTime1 = searchStartTime1.getText();
String startTime2 = searchStartTime2.getText();
// >1 大于 <0小于 =0等于
compareTo = startTime2.compareTo(startTime1);
// 尾日起小于首日期 ----不正确
if (compareTo < 0) {
JOptionPane.showMessageDialog(frame, "尾日期小于首日期", "提示", JOptionPane.PLAIN_MESSAGE);
changDate(searchStartTime2);
// searchStartTime1.setText(""); 直接在方法内更改这是错误的
}
}
@Override
public void changedUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
System.out.println("change" + searchStartTime2.getText());
}
});
frame.getContentPane().add(searchStartTime2);
// 查询条件二
JLabel endTimeLable = new JLabel("上传结束时间:");
// 文字设置
endTimeLable.setForeground(Color.BLACK);
endTimeLable.setBounds(30, 30, 120, 30);
endTimeLable.setLocation(30, 80);
endTimeLable.setFont(new Font("宋体", Font.PLAIN, 14));
frame.getContentPane().add(endTimeLable);
// 搜索条件输入框一
JTextField searchEndTime1 = new JTextField("");
searchEndTime1.setLocation(150, 74);
searchEndTime1.setSize(120, 30);
searchEndTime1.setPreferredSize(new Dimension(100, 50));
searchEndTime1.setBackground(Color.WHITE);
// 日期选择插件
DateChooser endTimeDateChooser1 = DateChooser.getInstance("yyyy-MM-dd");
endTimeDateChooser1.register(searchEndTime1);
// 实现对输入框内容的实时监控
Document endTime1Document = searchEndTime1.getDocument();
endTime1Document.addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void insertUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
String startTime2 = searchStartTime2.getText();
String endTime1 = searchEndTime1.getText();
compareTo = endTime1.compareTo(startTime2);
if (compareTo < 0) {
JOptionPane.showMessageDialog(frame, "尾日期小于首日期", "提示", JOptionPane.PLAIN_MESSAGE);
changDate(searchEndTime1);
}
}
@Override
public void changedUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
}
});
frame.getContentPane().add(searchEndTime1);
// 搜索条件中间字二
JLabel middleWord2 = new JLabel(" ─ ");
// 文字设置
middleWord2.setForeground(Color.BLACK);
middleWord2.setBounds(270, 64, 120, 30);
middleWord2.setLocation(270, 75);
middleWord2.setFont(new Font("宋体", Font.PLAIN, 14));
frame.getContentPane().add(middleWord2);
// 搜索条件输入框二
JTextField searchEndTime2 = new JTextField("");
searchEndTime2.setLocation(300, 74);
searchEndTime2.setSize(120, 30);
searchEndTime2.setPreferredSize(new Dimension(100, 50));
searchEndTime2.setBackground(Color.WHITE);
// 日期选择插件 --- 这个借鉴了博客
DateChooser endTimeDateChooser2 = DateChooser.getInstance("yyyy-MM-dd");
endTimeDateChooser2.register(searchEndTime2);
// 实现对输入框内容的实时监控
Document endTime2Document = searchEndTime2.getDocument();
endTime2Document.addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void insertUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
String startTime1 = searchEndTime1.getText();
String startTime2 = searchEndTime2.getText();
compareTo = startTime2.compareTo(startTime1);
if (compareTo < 0) {
JOptionPane.showMessageDialog(frame, "尾日期小于首日期", "提示", JOptionPane.PLAIN_MESSAGE);
changDate(searchEndTime2);
}
}
@Override
public void changedUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
}
});
frame.getContentPane().add(searchEndTime2);
// 查询条件三
JLabel upStatusLable = new JLabel("上传状态:");
// 文字设置
upStatusLable.setForeground(Color.BLACK);
upStatusLable.setBounds(30, 30, 120, 30);
upStatusLable.setLocation(500, 30);
upStatusLable.setFont(new Font("宋体", Font.PLAIN, 14));
frame.getContentPane().add(upStatusLable);
// 搜索条件下拉框
String[] heros = new String[] { "", "已上传", "上传中", "部分失败" };
JComboBox comboBox = new JComboBox(heros);
comboBox.setBounds(599, 23, 80, 30);
comboBox.setPreferredSize(new Dimension(500, 50));
comboBox.setSize(new Dimension(200, 30));
comboBox.setLocation(600, 24);
frame.getContentPane().add(comboBox);
// 查询按钮
JButton buttonSearch = new JButton("查询");
buttonSearch.setBounds(500, 90, 100, 20);
buttonSearch.setLocation(500, 84);
buttonSearch.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String startTime1 = searchStartTime1.getText();
String startTime2 = searchStartTime2.getText();
String endTime1 = searchEndTime1.getText();
String endTime2 = searchEndTime2.getText();
Object selectedItem = comboBox.getSelectedItem();
}
});
frame.getContentPane().add(buttonSearch);
// 重置按钮
JButton buttonReste = new JButton("重置");
buttonReste.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
searchStartTime1.setText("");
searchStartTime2.setText("");
searchEndTime1.setText("");
searchEndTime2.setText("");
comboBox.setSelectedIndex(0);
}
});
buttonReste.setBounds(500, 90, 100, 20);
buttonReste.setLocation(620, 84);
frame.getContentPane().add(buttonReste);
// 标题二
JLabel t2 = new JLabel(">>结果列表");
// 文字颜色
t2.setForeground(Color.red);
t2.setBounds(50, 50, 120, 30);
t2.setLocation(5, 110);
frame.getContentPane().add(t2);
// 上传文件按钮
JButton buttonUpLoadFile = new JButton("上传文件");
buttonUpLoadFile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 添加弹窗
final JFrame fileFrame = new JFrame(">文件选择<");
fileFrame.setSize(1070, 480);
fileFrame.setLocationRelativeTo(null);
fileFrame.getContentPane().setLayout(null);
// 左子窗口
JInternalFrame jInternalFrameL = new JInternalFrame("插入文件", true, true, true);
jInternalFrameL.setBounds(0, 0, 500, 380);
jInternalFrameL.setVisible(true);
fileFrame.getContentPane().add(jInternalFrameL);
// 以下是panelL 放置文件选择器
Panel panelL = new Panel();
panelL.setBounds(0, 0, 500, 500);
panelL.setLocation(0, 0);
panelL.setBackground(Color.WHITE);
panelL.setVisible(true);
jInternalFrameL.add(panelL);
// 默认打开E盘的文件选择器
final JFileChooser fileChooser = new JFileChooser("E://");
fileChooser.setBounds(10, 10, 500, 500);
fileChooser.setDialogTitle("nihao ");
fileChooser.setToolTipText("wohao");
// 文件选择策略
// FILES_ONLY 仅显示文件 0
// DIRECTORIES_ONLY 仅显示路径 1
// FILES_AND_DIRECTORIES 显示文件和路径 2
fileChooser.setFileSelectionMode(2);
// 可多选
fileChooser.setMultiSelectionEnabled(true);
// 设置默认使用的文件过滤器
fileChooser.setFileFilter(new FileNameExtensionFilter("文档(*.txt, *.doc)", "txt", "doc"));
// 添加可用的文件过滤器(FileNameExtensionFilter 的第一个参数是描述, 后面是需要过滤的文件扩展名 可变参数)
fileChooser.addChoosableFileFilter(
new FileNameExtensionFilter("压缩文档(*.zip, *.rar)", "zip", "rar"));
fileChooser.addChoosableFileFilter(
new FileNameExtensionFilter("图片(*.jpg, *.png, *.gif)", "jpg", "png", "gif"));
// 是否显示控制按钮
fileChooser.setControlButtonsAreShown(false);
panelL.add(fileChooser);
// 右子窗口
JInternalFrame jInternalFrameR = new JInternalFrame("待上传列表", true, true, true);
jInternalFrameR.setBounds(550, 0, 500, 380);
jInternalFrameR.setVisible(true);
fileFrame.getContentPane().add(jInternalFrameR);
// 以下是panelR 放置待上传列表
Panel panelR = new Panel();
panelR.setBounds(500, 0, 300, 500);
panelR.setLocation(500, 0);
panelR.setBackground(Color.WHITE);
panelR.setVisible(true);
jInternalFrameR.add(panelR);
// 待上传文件表格
// 表格
Object[][] dataTem = {
// 创建表格中的数据
{ "1", "C://", "项目原型", "文件夹", "16MB" }, { "2", "E://", "流程图", "文件", "8MB" }, };
// 创建表格中的横标题
String[] titlesTem = { "序号", "文件路径", "名称", "类型", "大小" };
// 声明表格默认数据
DefaultTableModel model = new DefaultTableModel(dataTem, titlesTem) {
private static final long serialVersionUID = 1L;
// 表格数据不可编辑但可以选中
public boolean isCellEditable(int row, int column) {
return false;
}
};
// 创建一个表格 引入数据
JTable table = new JTable(model);
table.setModel(model);
table.setBounds(300, 300, 500, 370);
table.setLocation(0, 0);
// table内容居中
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
tcr.setHorizontalAlignment(JLabel.CENTER);
// 创建容器保存表格(只能是scrollPane)
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(0, 0, 500, 370);
scrollPane.setSize(500, 370);
// 铺满整个容器
table.setFillsViewportHeight(true);
// 设置表数据居中显示
DefaultTableCellRenderer cellRenderer = new DefaultTableCellRenderer();
cellRenderer.setHorizontalAlignment(JLabel.CENTER);
table.setDefaultRenderer(Object.class, cellRenderer);
// 将table添加到scrollPane容器中
// scrollPane.add(table);
scrollPane.setViewportView(table);
// 将表格容器加入frame
panelR.add(scrollPane);
// 以下是中间图标
// 确认按钮
JButton confirmSelectedButton = new JButton(new ImageIcon());
confirmSelectedButton
.setIcon(new ImageIcon("C:\\Users\\张刘强\\Desktop\\DM上传\\images\\上传查询\\u105.png"));
confirmSelectedButton.setBounds(520, 90, 30, 40);
confirmSelectedButton.setLocation(510, 120);
confirmSelectedButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
File[] files = fileChooser.getSelectedFiles();
if (files.length == 0) {
System.out.println("文件夹是空的");
} else {
for (File file : files) {
if (file.isDirectory()) {
System.out.println("文件夹:" + file.getAbsolutePath());
} else {
System.out.println("文件:" + file.getAbsolutePath());
}
}
}
}
});
fileFrame.getContentPane().add(confirmSelectedButton);
// 取消按钮
JButton cancelSelectedButton = new JButton(new ImageIcon());
cancelSelectedButton
.setIcon(new ImageIcon("C:\\Users\\张刘强\\Desktop\\DM上传\\images\\上传查询\\u109.png"));
cancelSelectedButton.setBounds(520, 90, 30, 40);
cancelSelectedButton.setLocation(510, 200);
cancelSelectedButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int[] selectedRows = table.getSelectedRows();
for (int i = 0; i < selectedRows.length; i++) {
System.out.println("行号:" + selectedRows[i]);
}
}
});
fileFrame.getContentPane().add(cancelSelectedButton);
// 以下是底端按钮
// 上传按钮
JButton uploadButton = new JButton("上传");
uploadButton.setBounds(520, 90, 100, 25);
uploadButton.setLocation(350, 390);
fileFrame.getContentPane().add(uploadButton);
// 关闭按钮
JButton cancelButton = new JButton("关闭");
cancelButton.setBounds(520, 90, 100, 25);
cancelButton.setLocation(600, 390);
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
fileFrame.dispose();
}
});
fileFrame.getContentPane().add(cancelButton);
// 固定设置
fileFrame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
buttonUpLoadFile.setBounds(500, 90, 100, 20);
buttonUpLoadFile.setLocation(5, 150);
frame.getContentPane().add(buttonUpLoadFile);
// 表格
Object[][] data = {
// 创建表格中的数据
{ "1", "2018.10.18 11.12", "2018.10.18 11.13", "项目原型", "16MB", "已上传" },
{ "2", "2018.10.18 11.12", "2018.10.18 11.13", "流程图", "8MB", "未上传" },
{ "3", "2018.10.18 11.12", "2018.10.18 11.13", "相关文档", "10MB", "上传中" }, };
// 创建表格中的横标题
String[] titles = { "序号", "上传开始时间", "上传结束时间", "文件/文件夹名称", "文件大小", "上传状态" };
// 声明表格默认数据
DefaultTableModel model = new DefaultTableModel(data, titles) {
/**
*
*/
private static final long serialVersionUID = 1L;
// 表格数据不可编辑但可以选中
public boolean isCellEditable(int row, int column) {
return false;
}
};
// 创建一个表格 引入数据
JTable table = new JTable(model);
table.setModel(model);
table.setBounds(300, 300, 500, 500);
table.setLocation(5, 200);
// 为表格添加双击事件
table.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
super.mouseClicked(e);
if (e.getClickCount() == 2) {
int row = ((JTable) e.getSource()).rowAtPoint(e.getPoint()); // 获得行位置
int col = ((JTable) e.getSource()).columnAtPoint(e.getPoint());// 获得列位置
System.out.println("行:" + row + "列:" + col);
} else {
return;
}
}
});
// 设置此表视图的首选大小
table.setPreferredScrollableViewportSize(new Dimension(20, 20));
// table内容居中
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer();
tcr.setHorizontalAlignment(JLabel.CENTER);
// 创建容器保存表格(只能是scrollPane)
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(5, 180, 1100, 370);
// 铺满整个容器
table.setFillsViewportHeight(true);
// 设置表数据居中显示
DefaultTableCellRenderer cellRenderer = new DefaultTableCellRenderer();
cellRenderer.setHorizontalAlignment(JLabel.CENTER);
table.setDefaultRenderer(Object.class, cellRenderer);
// 将table添加到scrollPane容器中
// scrollPane.add(table);
scrollPane.setViewportView(table);
// scrollPane.setLayout(null);
// 将表格容器加入frame
frame.getContentPane().add(scrollPane);
// 该设置是保证初始大小的 但是应用造成页面无法正常显示 暂时不处理
// frame.pack();
// 固定设置
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
super.windowClosing(e);
int option = JOptionPane.showConfirmDialog(frame, "确定退出系统? ", "提示 ",
JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
});
frame.setVisible(true);
frame.setResizable(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
以上是文件展示界面和文件上传界面的代码,其中注意点是:
Document startTime2Document = searchStartTime2.getDocument(); startTime2Document.addDocumentListener()
一开始在选择监控器时,很纠结因为有两到三个控件都是可以实现这个功能的,个人认为这个更简易;这里需要实现日期大小的判断,如果日期选择错误,就把输入框置空,这里需要调用SwingUtilities.invokeLater()
,具体原因我在代码中的注释解释了fileChooser.setFileFilter
,个人认为这种声明方式比较简单明了大致就是这些,的确要感谢CSDN上的很多博主,借鉴了很多内容才拼出来三个界面,当然代码中的很多功能还没具体实现,因为目前就做了这么多,后期继续做的话继续发吧。
如果代码中存在其他博主的内容,我没有表明的请联系我,因为最近看的博客太多了,然后自己各种修改,也没有记住都看了哪些!
第一次写文章,不足之处大家海涵 谢谢谢