- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有课;
public class A extends AbstractTableModel
{
...
}
我使用 ResultSetMetaData 构建 TableModel 以匹配数据库中的结果集。
public class B extends JPanel
{
...
}
在 B 类 中,我扩展了 JPanel 并添加了 A 类 来显示我的表格。我希望能够根据表模型的条件添加新列。我试过谷歌搜索,但显示的大多数示例都是基于 DefaultTableModel
而不是 AbstractTableModel
。
有人知道如何实现吗?
最佳答案
例如
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableColumnHider {
private JTable table;
private TableColumnModel tcm;
private Map hiddenColumns;
public TableColumnHider(JTable table) {
this.table = table;
tcm = table.getColumnModel();
hiddenColumns = new HashMap();
}
public void hide(String columnName) {
int index = tcm.getColumnIndex(columnName);
TableColumn column = tcm.getColumn(index);
hiddenColumns.put(columnName, column);
hiddenColumns.put(":" + columnName, new Integer(index));
tcm.removeColumn(column);
}
public void show(String columnName) {
Object o = hiddenColumns.remove(columnName);
if (o == null) {
return;
}
tcm.addColumn((TableColumn) o);
o = hiddenColumns.remove(":" + columnName);
if (o == null) {
return;
}
int column = ((Integer) o).intValue();
int lastColumn = tcm.getColumnCount() - 1;
if (column < lastColumn) {
tcm.moveColumn(lastColumn, column);
}
}
public static void main(String[] args) {
String[] columnNames = {"Name", "Size", "Type", "Date Modified", "Permissions"};
String[][] data = {
{"bin", "2", "dir", "Jun 9", "drwxr-xr-x"},
{"boot", "3", "dir", "Jun 9", "drwxr-xr-x"},
{"dev", "6", "dir", "Jul 12", "drwxr-xr-x"},
{"etc", "34", "dir", "Jul 12", "drwxr-xr-x"},};
JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane(table);
final TableColumnHider hider = new TableColumnHider(table);
JPanel checkBoxes = new JPanel();
for (int i = 0; i < columnNames.length; i++) {
JCheckBox checkBox = new JCheckBox(columnNames[i]);
checkBox.setSelected(true);
checkBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
JCheckBox cb = (JCheckBox) evt.getSource();
String columnName = cb.getText();
if (cb.isSelected()) {
hider.show(columnName);
} else {
hider.hide(columnName);
}
}
});
checkBoxes.add(checkBox);
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(scrollPane);
frame.getContentPane().add(checkBoxes, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
关于java - 将列添加到现有的 TableModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6793257/
我正在寻找类似于Java Swing TableModel的JavaScript MVC表格小部件 我还想要两种模型,一种完全本地的,一种远程的(XMLHttpRequest) 我还希望 View 接
我正在尝试创建一个类似于下面的模型的 JTable: 绿色角基本上是红色列标题和行标题的缓冲区空间。单元格不需要渲染成图中的颜色;但是,它们需要与表中其他“白色”单元格区分开来。 该表也不可编辑或选择
更新: 我找到了 @MadProgrammer 的答案,它成功了! Updating JTable on button click 基本上,您将一个refresh()方法添加到您的TableModel
在我的程序中,我希望在 JTable 中显示一些数据。我有一个包含数据的类,因此在 JTable 中呈现它的最简单方法似乎是扩展我的类,以便它实现 TableModel 接口(interface)并将
我有一个单独的类,它实现用于 JTable 的 TableModel 接口(interface)。我有一个 boolean 列,以一列复选框的形式呈现,我想知道如何通知外部对象某些值需要更新?如果我将
新手寻求帮助:-) 我正在开发一个小项目,以熟悉 Java 桌面开发和数据库连接。 所附代码在实例化后为我提供了一个空的 TableModel,因此 JFrame 中没有显示任何数据。测试类是使用 T
您可以创建表格模型并将其添加到表格中 TableModel tm = new TableModel(); JTable table = new JTable(tm); 但是,如果我初始化一个表 JTa
我正在将数据从 DAO 获取到 GUI 级别。 当我想加载表时,我得到一个空表,仅包含单击的数据库符号的正确行数: 加载我使用的元素: playlistTable.addMouseListener(n
在java swing表模型中,我们能够触发表更改、添加、删除等。我想知道如果组件不可见,这些方法调用是否会很昂贵? 例如,另一个窗口覆盖了它。或者它位于非 Activity 选项卡中。 最佳答案 为
我有一个用于存储数字的 JTable。我实际上只使用表格来查看/排序。即使某些列可能全部都是整数或长整型,为这些列提供 Double 类是否会导致失败(除了可能需要分配更多空间之外)。我可以解析这些数
我正在尝试获取 JTable 的已排序 TableModel,这是通过以下简单的 regex 标准完成的: try { TableRowSorter sortRow = new TableRo
在下面的示例中,一个窗口显示一个表格,其中包含窗口本身的宽度。调整窗口大小时,其宽度值反射(reflect)了当前的真实情况。 这怎么可能? Swing 如何通知表,它应该重新请求模型?或者模型正在接
我有一个使用 setAutoCreateRowSorter(true) 的 JTable 和一个附加的 RowSorterListener,如下所示,因为我需要在我的应用程序的其他地方对某种 JTab
我有课; public class A extends AbstractTableModel { ... } 我使用 ResultSetMetaData 构建 TableModel 以匹配数据库中的
我需要将繁重的数据集加载到 QTableView 中。数据集在内存中不小于 700Mb,我不想将其全部加载到内存中。 QSqlQueryModel 对我来说并不理想,原因有两个 - 它不可编辑,也不是
我的 TableModel实现通常位于 ArrayList以实现高效的随机访问性能。然而,ArrayList的 remove(int)实现看起来相当低效,因为它涉及制作 System.arrayCop
我有一个简单的 Java 桌面应用程序,它显示带有自定义 TableModel 的 JTable。 在 boolean 变量的基础上,我想显示一个具有不同列的表。但我无法做到这一点。 This is
我面临 JTable 和与其关联的 TableModel 的问题。这里的问题是,假设如果我在 JTable 上进行行选择,我想从 TableModel 获取特定的行对象并将其传递到某个地方。有谁知道如
我创建了一个包含人员列表的 JTable。一个 Person 总是可以包含另一个 Person(或者可能是它自己)。因此,用户可以单击该列,然后会出现一个 JComboBox。此 JComboBox
我有一个jTable,它根据一些jComboBox加载搜索结果。我使用 DefaultTableModel 来实现此目的,对于其他 jTable,我使用 TableModel。 搜索后,jTable
我是一名优秀的程序员,十分优秀!