package swing; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Vector; import javax.swing.DefaultCellEditor; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableModel; public class QueryJTable extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private DefaultTableModel tableModel; //表格模型对象 private JTable table; JComboBox yearbox; JComboBox mthBox; public QueryJTable() { super(); setTitle("详情"); setBounds(400, 400, 600, 300); //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //获取当前日期 String yearMth = getCurDateStr(); String curYear = yearMth.substring(0, 4); String curMth = yearMth.substring(4); JPanel ym = new JPanel(); ym.setLayout(new GridLayout(1, 2)); yearbox = new JComboBox(); for (int i = 2010; i < 2050; i++) { yearbox.addItem(i); } yearbox.setSelectedItem(Integer.valueOf(curYear)); mthBox = new JComboBox(); mthBox.addItem("01"); mthBox.addItem("02"); mthBox.addItem("03"); mthBox.addItem("04"); mthBox.addItem("05"); mthBox.addItem("06"); mthBox.addItem("07"); mthBox.addItem("08"); mthBox.addItem("09"); mthBox.addItem("10"); mthBox.addItem("11"); mthBox.addItem("12"); mthBox.setSelectedItem(curMth); ym.add(yearbox); ym.add(mthBox); getContentPane().add(ym, BorderLayout.NORTH); JButton changeTheLabel = new JButton("查询"); changeTheLabel.setMnemonic(KeyEvent.VK_C); changeTheLabel.setAlignmentX(Component.LEFT_ALIGNMENT); changeTheLabel.addActionListener(this); getContentPane().add(changeTheLabel, BorderLayout.SOUTH); JScrollPane scrollPane = new JScrollPane(); //支持滚动 getContentPane().add(scrollPane, BorderLayout.CENTER); String[] columnNames = { "时间", "交通费", "伙食费" }; Vector columnNameV = new Vector(); //获得表头 for (int column = 0; column < columnNames.length; column++) { columnNameV.add(columnNames[column]); } Vector tableValueV = new Vector(); for (int row = 1; row < 11; row++) //获得数据 { Vector rowV = new Vector(); for (int column = 0; column < columnNames.length; column++) { rowV.add(columnNames[column] + row); //数据 } tableValueV.add(rowV); } tableModel = new DefaultTableModel(tableValueV, columnNameV); table = new MyTable(tableModel); table.setDefaultEditor(Object.class, new MyEditor()); //table = new MyTable(tableValueV, columnNameV); //自定义的表格 //设置列宽 table.getColumnModel().getColumn(0).setMinWidth(200); table.getColumnModel().getColumn(1).setMinWidth(200); table.getColumnModel().getColumn(2).setMinWidth(200); DefaultTableCellRenderer cellrender = new DefaultTableCellRenderer(); cellrender.setHorizontalAlignment(JTextField.CENTER); table.getColumnModel().getColumn(0).setCellRenderer(cellrender); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); //关闭表格列的自动调整功能。 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //单选 table.setSelectionBackground(Color.YELLOW); table.setSelectionForeground(Color.RED); table.setRowHeight(20); scrollPane.setViewportView(table); //支持滚动 } /** * 获取当前年月的字符串 */ public static String getCurDateStr() { Date date = Calendar.getInstance().getTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM"); return sdf.format(date); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub QueryJTable jTableDefineTest = new QueryJTable(); jTableDefineTest.setVisible(true); } public void actionPerformed(ActionEvent e) { if (tableModel.getRowCount() > 0) { for (int row = tableModel.getRowCount() - 1; row >= 0; row--) { tableModel.removeRow(row); } } String ym = yearbox.getSelectedItem().toString() + "-" + mthBox.getSelectedItem().toString(); ArrayList al = FileTool.readFileContent("e:/test.txt", ym); for (int i = 0; i < al.size(); i++) { ArrayList obj = (ArrayList)al.get(i); tableModel.addRow(obj.toArray()); } } } class MyEditor extends DefaultCellEditor { private static final long serialVersionUID = 1781979580278898929L; public MyEditor() { super(new JTextField()); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { //获得默认表格单元格控件 JTextField editor = (JTextField)super.getTableCellEditorComponent(table, value, isSelected, row, column); if (value != null) editor.setText(value.toString()); if (column == 0) { //设置对齐方式 editor.setHorizontalAlignment(SwingConstants.CENTER); editor.setFont(new Font("Serif", Font.BOLD, 14)); } else { editor.setHorizontalAlignment(SwingConstants.RIGHT); editor.setFont(new Font("Serif", Font.ITALIC, 12)); } return editor; } } class MyTable extends JTable { private static final long serialVersionUID = 1L; public MyTable(Vector rowData, Vector columnNames) { super(rowData, columnNames); } public MyTable(TableModel dm) { super(dm); } public JTableHeader getTableHeader() { JTableHeader tableHeader = super.getTableHeader(); tableHeader.setReorderingAllowed(false); //设置表格列不可重排 DefaultTableCellRenderer hr = (DefaultTableCellRenderer)tableHeader.getDefaultRenderer(); //获得表格头的单元格对象 hr.setHorizontalAlignment(DefaultTableCellRenderer.CENTER); //列名居中 return tableHeader; } public TableCellRenderer getDefaultRenderer(Class<?> columnClass) { DefaultTableCellRenderer cr = (DefaultTableCellRenderer)super .getDefaultRenderer(columnClass); cr.setHorizontalAlignment(DefaultTableCellRenderer.RIGHT); //单元格内容居中 return cr; } public boolean isCellEditable(int row, int column) { return false; //单元格不可修改 } }