例子:通过实现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; } }
您还没有登录,请您登录后再发表评论
Swing之JTable的详细介绍,其基本用法及源码例子
Swing之JTable用法
swing 中JTABLE中添加控件的例子 可以引申出添加很多控件
网上下载的swing的jtable合并单元格,单元格设置字体,大小,背景和前景色
Swing之JTable详解 类层次结构图: java.lang.Object --java.awt.Component --java.awt.Container --javax.swing.JComponent --javax.swing.JTabel
复杂JTable-跨列表头, JTable表头合并,已经测试Ok,希望对你有用
java swing 导出Jtable里面的数据到excel,不用拷贝代码,直接粘贴代码
Java Swing JTable分页!JAVA源码!
复杂JTable(复杂表头、跨行列表体)
中级SWING-J中级中级SWING-JTable属性SWING-JTable属性Table属性
里面包含一个类,一个图片 类中使用JTable 实现了对JTable中行级的增删改 JFrame为自主布局,设置了背景图片... * DefaultTableModel继承了AbstractTableModel 这个类中有删除一行的方法 */ dtm.removeRow(row);
Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性
主要介绍了Java Swing实现JTable检测单元格数据变更事件的方法,结合完整实例形式分析了Swing实现JTable检测单元格数据变更事件过程中出现的问题与相关解决方法,需要的朋友可以参考下
java实现的,一种JTable中多列排序的实现方法
在java swing的开发中,需要往表格添加自定义对象,往往需要转换。此类定义了抽象类,运用了范型技术。只需继承时传入对象类型,既可以操作对象表格Model。 作者(HuaSheng) 如有不足,欢迎给我email:sheng24@vip....
文件主要内容是Java Swing中JTable的常用功能的应用
无需修改已有代码,快速为jtable添加行间拖拽功能。 无需实现dnd相关接口,使用方便
NULL 博文链接:https://javapub.iteye.com/blog/783343
相关推荐
Swing之JTable的详细介绍,其基本用法及源码例子
Swing之JTable用法
swing 中JTABLE中添加控件的例子 可以引申出添加很多控件
网上下载的swing的jtable合并单元格,单元格设置字体,大小,背景和前景色
Swing之JTable详解 类层次结构图: java.lang.Object --java.awt.Component --java.awt.Container --javax.swing.JComponent --javax.swing.JTabel
复杂JTable-跨列表头, JTable表头合并,已经测试Ok,希望对你有用
java swing 导出Jtable里面的数据到excel,不用拷贝代码,直接粘贴代码
Java Swing JTable分页!JAVA源码!
复杂JTable(复杂表头、跨行列表体)
中级SWING-J中级中级SWING-JTable属性SWING-JTable属性Table属性
里面包含一个类,一个图片 类中使用JTable 实现了对JTable中行级的增删改 JFrame为自主布局,设置了背景图片... * DefaultTableModel继承了AbstractTableModel 这个类中有删除一行的方法 */ dtm.removeRow(row);
Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性Swing JTable 常用属性
主要介绍了Java Swing实现JTable检测单元格数据变更事件的方法,结合完整实例形式分析了Swing实现JTable检测单元格数据变更事件过程中出现的问题与相关解决方法,需要的朋友可以参考下
java实现的,一种JTable中多列排序的实现方法
在java swing的开发中,需要往表格添加自定义对象,往往需要转换。此类定义了抽象类,运用了范型技术。只需继承时传入对象类型,既可以操作对象表格Model。 作者(HuaSheng) 如有不足,欢迎给我email:sheng24@vip....
文件主要内容是Java Swing中JTable的常用功能的应用
无需修改已有代码,快速为jtable添加行间拖拽功能。 无需实现dnd相关接口,使用方便
NULL 博文链接:https://javapub.iteye.com/blog/783343