import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.IOException; import java.util.Enumeration; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.ListSelectionModel; import javax.swing.RowSorter; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.JTableHeader; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter;
public class MyStyleTable extends JTable {
private String[] color = null; private String[] header= new String[]{"NO", "Incurred Date", "Clinic", "Doctor", "Sequence", "Service Code", "Drug Code", "Description", "Amount", "Voucher No.", "Diagnosis 1", "Diag Desc 1", "Diagnosis 2", "Diag Desc 2", "Diagnosis 3", "Diag Desc 3", "Patient Name", "Staff No.", "Member Code", "Role"}; private TableModel model; public MyStyleTable() { super(); }
public MyStyleTable(Object[][] rowData){
//add mouse event for table this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent evt) { if (evt.getClickCount() == 2) {
try { // TODO add your handling code here:
String cmd = "cmd /c start " + System.getProperty("user.dir") + "/pdf/" + MyStyleTable.this.getModel().getValueAt(MyStyleTable.this.getSelectedRow(), 9).toString() + ".tif";
Runtime.getRuntime().exec(cmd);
} catch (IOException ex) { Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex); } } } }); this.init(rowData); }
//fix table column width public void setFixColumnWidth(JTable table){
//this.setRowHeight(30);
this.setAutoResizeMode(table.AUTO_RESIZE_OFF); /**/ //The following code can be used to fix table column width TableColumnModel tcm = table.getTableHeader().getColumnModel(); for (int i = 0; i < tcm.getColumnCount(); i++) { TableColumn tc = tcm.getColumn(i); tc.setPreferredWidth(50); // tc.setMinWidth(100); tc.setMaxWidth(50); } }
//update model for table public void init(Object[][] rowData) { if(rowData!=null){ this.setRowSelectionAllowed(true); this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.setColumnSelectionAllowed(false); this.getTableHeader().setForeground(Color.BLUE);
model = new DefaultTableModel(rowData, header) {
public Class getColumnClass(int column) { Class returnValue; if ((column >= 0) && (column < getColumnCount())) { returnValue = getValueAt(0, column).getClass(); } else { returnValue = Object.class; } return returnValue; }
@Override public boolean isCellEditable(int row, int column) { return false; } }; this.setModel(model);
//resort data by clicking table header RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); this.setRowSorter(sorter);
//set row background color this.paintRow();
this.setIntercellSpacing(new Dimension(5,5));
//resize column width accordng to content of cell automatically fitTableColumns(this); } }
/** * 根据color数组中相应字符串所表示的颜色来设置某行的颜色,注意,JTable中可以对列进行整体操作 * 而无法对行进行整体操作,故设置行颜色实际上是逐列地设置该行所有单元格的颜色。 */ public void paintRow() { TableColumnModel tcm = this.getColumnModel(); for (int i = 0, n = tcm.getColumnCount(); i < n; i++) { TableColumn tc = tcm.getColumn(i); tc.setCellRenderer(new RowRenderer()); } }
public void paintColorRow() { TableColumnModel tcm = this.getColumnModel(); for (int i = 0, n = tcm.getColumnCount(); i < n; i++) { TableColumn tc = tcm.getColumn(i); tc.setCellRenderer(new RowColorRenderer()); }
}
//resize column width automatically public void fitTableColumns(JTable myTable) { myTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JTableHeader header = myTable.getTableHeader(); int rowCount = myTable.getRowCount(); Enumeration columns = myTable.getColumnModel().getColumns(); while(columns.hasMoreElements()) { TableColumn column = (TableColumn)columns.nextElement(); int col = header.getColumnModel().getColumnIndex(column.getIdentifier()); int width = (int)myTable.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(myTable, column.getIdentifier (), false, false, -1, col).getPreferredSize().getWidth(); for(int row = 0; row<rowCount; row++) { int preferedWidth = (int)myTable.getCellRenderer(row, col).getTableCellRendererComponent(myTable, myTable.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth(); width = Math.max(width, preferedWidth); } header.setResizingColumn(column); // 此行很重要 column.setWidth(width+myTable.getIntercellSpacing().width); } }
/** *单元格可以为多行模式,自动换行,奇偶行背景色交替 */ private class RowRenderer extends JTextArea implements TableCellRenderer {
public RowRenderer() { //multiple line mode // setLineWrap(true); // setWrapStyleWord(true); }
public Component getTableCellRendererComponent(JTable t, Object value, boolean isSelected, boolean hasFocus, int row, int column) { //设置奇偶行的背景色,可在此根据需要进行修改 if (row % 2 == 0) { setBackground(Color.getHSBColor(63, 11, 91)); } else { setBackground(Color.getHSBColor(214, 14, 98)); }
int maxPreferredHeight = 0; for (int i = 0; i < t.getColumnCount(); i++) { setText("" + t.getValueAt(row, i)); setSize(t.getColumnModel().getColumn(column).getWidth(), 0); maxPreferredHeight = Math.max(maxPreferredHeight, getPreferredSize().height); }
if (t.getRowHeight(row) != maxPreferredHeight) { t.setRowHeight(row, maxPreferredHeight); }
setText((value == null || "null".equals(value)) ? "" : value.toString());
return this;
} }
/** * 多行颜色交替 * */ private class RowColorRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable t, Object value, boolean isSelected, boolean hasFocus, int row, int column) { //分支判断条件可根据需要进行修改 if (color[row].trim().equals("R")) { setBackground(Color.RED); } else if (color[row].trim().equals("C")) { setBackground(Color.CYAN); } else if (color[row].trim().equals("B")) { setBackground(Color.BLUE); } else if (color[row].trim().equals("O")) { setBackground(Color.ORANGE); } else { setBackground(Color.WHITE); }
return super.getTableCellRendererComponent(t, value, isSelected, hasFocus, row, column); } }
}
|
相关推荐
在Java的Swing库中,`JTable`是用于创建二维数据展示的组件,它类似于电子表格。在某些场景下,我们可能需要在`JTable`的每一行中添加复选框,以便用户可以选择或取消选择特定行。这通常用于实现多选功能,例如在...
swing实现布局+滚动+自定义table+组件
这个压缩包文件"java_swing大量的table例子"显然提供了丰富的`JTable`使用示例,对于学习和开发涉及表格功能的Java Swing应用非常有帮助。 一、`JTable`基础知识 1. `JTable`构造:`JTable()`、`JTable(Object[][]...
在Java的Swing库中,`JTable`是用于创建数据网格视图的重要组件,它允许用户以表格的形式查看和操作数据。而`JButton`则是一个常用的按钮控件,通常用于触发某些动作或事件。将`JButton`添加到`JTable`中可以为用户...
本示例中,我们看到的`Swing`的`table`显示代码涉及到了`JTable`的使用,以及与MySQL数据库的交互。下面将详细解释这些知识点。 1. **JTable**: `JTable`是Java Swing中的一个组件,它允许开发者创建和显示二维数据...
Swing Paging Table是一种在Java Swing环境中实现的分页表格组件,它允许用户高效地处理大量数据,而无需一次性加载所有数据到内存中。这个组件特别适用于数据集过大,可能导致性能下降或内存溢出的情况。通过分页...
在Java Swing应用中,`JTable`是一种常用的组件,用于展示和操作二维数据。它提供了丰富的功能,如排序、选择和编辑。然而,`JTable`默认并不支持行间的拖放(Drag and Drop, DnD)操作。本文将详细介绍如何通过一种...
这个工程提供了一个实际操作的例子,帮助开发者理解和学习如何在Swing应用程序中使用自定义`TableCellRenderer`和`TableCellEditor`,以提高用户界面的交互性和可视化效果。 总结一下,本示例主要涉及以下几点: 1...
### 中级SWING-JTable属性详解 在Java Swing框架中,`JTable`是一个非常重要的组件,用于展示表格数据。为了更好地控制表格的表现形式及功能,`JTable`提供了多种属性设置方法。以下是对给定内容中提到的一些关键...
Swing中的JTable是Java GUI开发中非常重要的一个组件,用于展示二维数据表格。它允许用户查看、编辑和操作表格中的数据。`table4j`可能是某个特定的库或者工具,用于增强或简化JTable的使用。这篇博客文章(链接已...
Java JTable是Java Swing库中的一个关键组件,用于在桌面应用程序中展示表格数据。它提供了丰富的功能,使得用户可以查看、编辑和操作二维数据集。在这个"Java JTable Demo"中,我们将深入探讨如何有效地使用JTable...
- `javax.swing.table`:与`JTable`组件相关的类,用于创建和管理表格数据。 - `javax.swing.text`:包含文本组件相关的类,如`JTextComponent`,支持文本编辑和格式化。 - `javax.swing.text.html`:处理HTML文本...
Swing还支持自定义组件,开发者可以通过继承现有的组件类并重写其方法,或者使用`JComponent`类来构建完全自定义的UI元素。这种灵活性使得Swing成为Java GUI开发的强大工具,可以满足各种复杂应用的需求。 在实际...
`CombineData.java`可能包含数据模型类,它扩展了`javax.swing.table.DefaultTableModel`或自定义的模型类,以支持合并单元格的逻辑。在这个类中,可能有额外的属性或方法来存储合并信息,如合并的开始行、结束行、...
Swing 包含了大量组件,如 JTable 和 JTree,它们在相应的子包中,例如 swing.table 和 swing.tree。 Swing 的多样化体现在它不仅提供了与 AWT 相似的组件,而且还增加了许多高级组件。例如,JTable 用于展示数据...
例如,你可以创建一个自定义的`TableModel`,并在其中添加`TableModelListener`来监听数据变更。同时,为Swing组件添加事件监听器(如`ActionListener`)作为控制器,处理用户交互。 以下是一个简单的Swing MVC代码...
在Java编程领域,`JTable`是Swing库中用于创建和展示表格数据的重要组件。在实际应用中,我们有时需要展示更为复杂的数据结构,这时就需要用到多级表头(multiheader)。多级表头允许我们在表格的列或者行上设置多个...
7. `javax.swing.table`:提供了`JTable`组件的实现,用于展示表格数据。 8. `javax.swing.text`:包含处理文本的类和接口,如文本字段和文本区域。 9. `javax.swing.tree`:提供了`JTree`组件,用于显示层次结构...
10. `javax.swing.table` - JTable组件及其相关支持。 11. `javax.swing.text` - 文本组件,如JTextComponent,用于文本的显示和编辑。 12. `javax.swing.text.html` - 支持HTML文档的显示和编辑。 13. `javax.swing...
JTable table = new JTable(model); ``` 4. 自定义布局管理:通过实现LayoutManager接口或使用预定义的布局管理器,如FlowLayout、GridLayout、BorderLayout等,可以自由调整组件的位置和大小。 总结,Java Swing...