Swing之JTable篇综合例子,在表中插入一行记录,对表列排序等

例子:通过实现AbstractTableModel接口实现即使向表中增加一行记录 Java代码 import java.awt.BorderLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JViewport; import javax.swing.SwingUtilities; import javax.swing.table.AbstractTableModel; public class RowAdder extends JFrame { final SimpleModel tableData = new SimpleModel(); JTable table = new JTable(tableData); public static void main(String[] args) { RowAdder ra = new RowAdder(); ra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ra.setSize(400, 300); ra.setVisible(true); } public RowAdder() { final JTextField textField = new JTextField(); setLayout(new BorderLayout()); add(new JScrollPane(table), BorderLayout.CENTER); textField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { tableData.addText(textField.getText()); textField.setText(""); } }); add(textField, BorderLayout.SOUTH); } } class SimpleModel extends AbstractTableModel { Vector textData = new Vector(); public void addText(String text) { textData.addElement(text); fireTableDataChanged(); } public int getRowCount() { return textData.size(); } public int getColumnCount() { return 3; } public Object getValueAt(int row, int column) { return textData.elementAt(row); } } import java.awt.BorderLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JViewport; import javax.swing.SwingUtilities; import javax.swing.table.AbstractTableModel; public class RowAdder extends JFrame { final SimpleModel tableData = new SimpleModel(); JTable table = new JTable(tableData); public static void main(String[] args) { RowAdder ra = new RowAdder(); ra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ra.setSize(400, 300); ra.setVisible(true); } public RowAdder() { final JTextField textField = new JTextField(); setLayout(new BorderLayout()); add(new JScrollPane(table), BorderLayout.CENTER); textField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { tableData.addText(textField.getText()); textField.setText(""); } }); add(textField, BorderLayout.SOUTH); } } class SimpleModel extends AbstractTableModel { Vector textData = new Vector(); public void addText(String text) { textData.addElement(text); fireTableDataChanged(); } public int getRowCount() { return textData.size(); } public int getColumnCount() { return 3; } public Object getValueAt(int row, int column) { return textData.elementAt(row); } } 例子:对表列实现排序 Java代码 import java.awt.BorderLayout; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; class SampleSortingTableModel extends AbstractTableModel implements TableModelListener { protected TableModel base; protected int sortColumn; protected int[] row; public SampleSortingTableModel(TableModel tm, int sortColumn) { this.base = tm; this.sortColumn = sortColumn; tm.addTableModelListener(this); rebuild(); } public Class getColumnClass(int c) { return base.getColumnClass(c); } public int getColumnCount() { return base.getColumnCount(); } public String getColumnName(int c) { return base.getColumnName(c); } public int getRowCount() { return base.getRowCount(); } public Object getValueAt(int r, int c) { return base.getValueAt(row[r], c); } public boolean isCellEditable(int r, int c) { return base.isCellEditable(row[r], c); } public void setValueAt(Object value, int r, int c) { base.setValueAt(value, row[r], c); // Notification will cause re-sort } public void tableChanged(TableModelEvent event) { rebuild(); } protected void rebuild() { int size = base.getRowCount(); row = new int[size]; for (int i = 0; i < size; i++) { row[i] = i; } sort(); } protected void sort() { // Sort and notify listeners for (int i = 1; i < row.length; i++) { int j = i; while (j > 0 && compare(j - 1, j) > 0) { int temp = row[j]; row[j] = row[j - 1]; row[j - 1] = temp; j--; } } fireTableStructureChanged(); } protected int compare(int i, int j) { String s1 = base.getValueAt(row[i], sortColumn).toString(); String s2 = base.getValueAt(row[j], sortColumn).toString(); return s1.compareTo(s2); } } public class SortableTableModelAbstractTableModel extends JFrame { DefaultTableModel model = new DefaultTableModel(new Object[][] { { "this", "1" }, { "text", "2" }, { "will", "3" }, { "be", "4" }, { "sorted", "5" } }, new Object[] { "Column 1", "Column 2" }); public SortableTableModelAbstractTableModel() { setDefaultCloseOperation(EXIT_ON_CLOSE); JTable tableOrig = new JTable(model); tableOrig.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); JTable tableSorted = new JTable(new SampleSortingTableModel(model, 0)); tableSorted.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); JPanel panel = new JPanel(new GridLayout(1, 2)); panel.add(new JScrollPane(tableOrig)); panel.add(new JScrollPane(tableSorted)); getContentPane().add(panel, BorderLayout.CENTER); pack(); } public static void main(String arg[]) { new SortableTableModelAbstractTableModel().setVisible(true); } } import java.awt.BorderLayout; import java.awt.GridLayout; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; class SampleSortingTableModel extends AbstractTableModel implements TableModelListener { protected TableModel base; protected int sortColumn; protected int[] row; public SampleSortingTableModel(TableModel tm, int sortColumn) { this.base = tm; this.sortColumn = sortColumn; tm.addTableModelListener(this); rebuild(); } public Class getColumnClass(int c) { return base.getColumnClass(c); } public int getColumnCount() { return base.getColumnCount(); } public String getColumnName(int c) { return base.getColumnName(c); } public int getRowCount() { return base.getRowCount(); } public Object getValueAt(int r, int c) { return base.getValueAt(row[r], c); } public boolean isCellEditable(int r, int c) { return base.isCellEditable(row[r], c); } public void setValueAt(Object value, int r, int c) { base.setValueAt(value, row[r], c); // Notification will cause re-sort } public void tableChanged(TableModelEvent event) { rebuild(); } protected void rebuild() { int size = base.getRowCount(); row = new int[size]; for (int i = 0; i < size; i++) { row[i] = i; } sort(); } protected void sort() { // Sort and notify listeners for (int i = 1; i < row.length; i++) { int j = i; while (j > 0 && compare(j - 1, j) > 0) { int temp = row[j]; row[j] = row[j - 1]; row[j - 1] = temp; j--; } } fireTableStructureChanged(); } protected int compare(int i, int j) { String s1 = base.getValueAt(row[i], sortColumn).toString(); String s2 = base.getValueAt(row[j], sortColumn).toString(); return s1.compareTo(s2); } } public class SortableTableModelAbstractTableModel extends JFrame { DefaultTableModel model = new DefaultTableModel(new Object[][] { { "this", "1" }, { "text", "2" }, { "will", "3" }, { "be", "4" }, { "sorted", "5" } }, new Object[] { "Column 1", "Column 2" }); public SortableTableModelAbstractTableModel() { setDefaultCloseOperation(EXIT_ON_CLOSE); JTable tableOrig = new JTable(model); tableOrig.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); JTable tableSorted = new JTable(new SampleSortingTableModel(model, 0)); tableSorted.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); JPanel panel = new JPanel(new GridLayout(1, 2)); panel.add(new JScrollPane(tableOrig)); panel.add(new JScrollPane(tableSorted)); getContentPane().add(panel, BorderLayout.CENTER); pack(); } public static void main(String arg[]) { new SortableTableModelAbstractTableModel().setVisible(true); } } 例子:用表格实现日历控件 Java代码 import java.awt.Color; import java.awt.Container; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; public class Calendar extends JFrame { String[] years = { "2008", "2009", "2010" }; JComboBox comboBox = new JComboBox(years); String[] months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; JList list = new JList(months); JScrollPane scrollPane = new JScrollPane(list); CalendarModel model = new CalendarModel(); JTable table = new JTable(model); public Calendar() { super(); getContentPane().setLayout(null); comboBox.setBounds(10, 10, 100, 30); comboBox.setSelectedIndex(0); comboBox.addItemListener(new ComboHandler()); scrollPane.setBounds(200, 10, 150, 100); list.setSelectedIndex(3); list.addListSelectionListener(new ListHandler()); table.setBounds(10, 150, 550, 200); model.setMonth(comboBox.getSelectedIndex() + 1998, list.getSelectedIndex()); getContentPane().add(comboBox); getContentPane().add(scrollPane); table.setGridColor(Color.black); table.setShowGrid(true); getContentPane().add(table); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 500); setVisible(true); } public static void main(String[] args) { Calendar app = new Calendar(); } public class ComboHandler implements ItemListener { public void itemStateChanged(ItemEvent e) { model.setMonth(comboBox.getSelectedIndex() + 1998, list.getSelectedIndex()); table.repaint(); } } public class ListHandler implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { model.setMonth(comboBox.getSelectedIndex() + 1998, list.getSelectedIndex()); table.repaint(); } } } class CalendarModel extends AbstractTableModel { String[] days = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; int[] numDays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; String[][] calendar = new String[7][7]; public CalendarModel() { for (int i = 0; i < days.length; ++i) calendar[0][i] = days[i]; for (int i = 1; i < 7; ++i) for (int j = 0; j < 7; ++j) calendar[i][j] = " "; } public int getRowCount() { return 7; } public int getColumnCount() { return 7; } public Object getValueAt(int row, int column) { return calendar[row][column]; } public void setValueAt(Object value, int row, int column) { calendar[row][column] = (String) value; } public void setMonth(int year, int month) { for (int i = 1; i < 7; ++i) for (int j = 0; j < 7; ++j) calendar[i][j] = " "; java.util.GregorianCalendar cal = new java.util.GregorianCalendar(); cal.set(year, month, 1); int offset = cal.get(java.util.GregorianCalendar.DAY_OF_WEEK) - 1; offset += 7; int num = daysInMonth(year, month); for (int i = 0; i < num; ++i) { calendar[offset / 7][offset % 7] = Integer.toString(i + 1); ++offset; } } public boolean isLeapYear(int year) { if (year % 4 == 0) return true; return false; } public int daysInMonth(int year, int month) { int days = numDays[month]; if (month == 1 && isLeapYear(year)) ++days; return days; } } import java.awt.Color; import java.awt.Container; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.table.AbstractTableModel; public class Calendar extends JFrame { String[] years = { "2008", "2009", "2010" }; JComboBox comboBox = new JComboBox(years); String[] months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; JList list = new JList(months); JScrollPane scrollPane = new JScrollPane(list); CalendarModel model = new CalendarModel(); JTable table = new JTable(model); public Calendar() { super(); getContentPane().setLayout(null); comboBox.setBounds(10, 10, 100, 30); comboBox.setSelectedIndex(0); comboBox.addItemListener(new ComboHandler()); scrollPane.setBounds(200, 10, 150, 100); list.setSelectedIndex(3); list.addListSelectionListener(new ListHandler()); table.setBounds(10, 150, 550, 200); model.setMonth(comboBox.getSelectedIndex() + 1998, list.getSelectedIndex()); getContentPane().add(comboBox); getContentPane().add(scrollPane); table.setGridColor(Color.black); table.setShowGrid(true); getContentPane().add(table); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 500); setVisible(true); } public static void main(String[] args) { Calendar app = new Calendar(); } public class ComboHandler implements ItemListener { public void itemStateChanged(ItemEvent e) { model.setMonth(comboBox.getSelectedIndex() + 1998, list.getSelectedIndex()); table.repaint(); } } public class ListHandler implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { model.setMonth(comboBox.getSelectedIndex() + 1998, list.getSelectedIndex()); table.repaint(); } } } class CalendarModel extends AbstractTableModel { String[] days = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; int[] numDays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; String[][] calendar = new String[7][7]; public CalendarModel() { for (int i = 0; i < days.length; ++i) calendar[0][i] = days[i]; for (int i = 1; i < 7; ++i) for (int j = 0; j < 7; ++j) calendar[i][j] = " "; } public int getRowCount() { return 7; } public int getColumnCount() { return 7; } public Object getValueAt(int row, int column) { return calendar[row][column]; } public void setValueAt(Object value, int row, int column) { calendar[row][column] = (String) value; } public void setMonth(int year, int month) { for (int i = 1; i < 7; ++i) for (int j = 0; j < 7; ++j) calendar[i][j] = " "; java.util.GregorianCalendar cal = new java.util.GregorianCalendar(); cal.set(year, month, 1); int offset = cal.get(java.util.GregorianCalendar.DAY_OF_WEEK) - 1; offset += 7; int num = daysInMonth(year, month); for (int i = 0; i < num; ++i) { calendar[offset / 7][offset % 7] = Integer.toString(i + 1); ++offset; } } public boolean isLeapYear(int year) { if (year % 4 == 0) return true; return false; } public int daysInMonth(int year, int month) { int days = numDays[month]; if (month == 1 && isLeapYear(year)) ++days; return days; } }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值