- 浏览: 61584 次
- 性别:
- 来自: 深圳
最新评论
-
zhylandroid:
...
JTable( 放在JScrollPane中 )中加入一行后, 然后让其获得焦点且滚动条自动下来 -
dkeagle:
太感谢了,太有用了,在网上查了两天资料了...
JTable( 放在JScrollPane中 )中加入一行后, 然后让其获得焦点且滚动条自动下来
TableCellRenderer就是用来绘制展示当前cell单元数值内容的,你可以用文字、数值或者图片来表示内容,当然最强大展示方式的就是通过自定义自己的renderer组件,通过Java2D来绘制各种天花乱坠的效果。
TableCellEditor主要是用来当用户点击在具体cell时进行编辑的组件,所以TableCellEditor除了具有TableCellRenderer一样的绘制功能外还可以进行交互动作,例如在cell上出现下拉框、勾选框甚至通过按钮弹出更复杂的对话框让用户进行输入编辑。
以下是在cell中嵌入start、stop两个按钮的表格,注意这里的renderer只是用来显示效果,并没有进行交互动作,真正进行动作的是当你将鼠标点击在cell上时,JTable定位上去的editor,所以不要徒劳在renderer上做点击事项处理,renderer是不会接受到交互事项的,renderer只是个画笔,你看到的start、stop按钮只是这个画笔画出来的内容,是虚的并没有真正的组件在上面。
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class TableTest1 extends JFrame { JTable table; String[] states = new String[]{"stop", "stop", "stop"}; // model class TableModel extends AbstractTableModel{ public int getColumnCount() { return 2; } public int getRowCount() { return states.length; } public Object getValueAt(int rowIndex, int columnIndex) { if(columnIndex == 0){ return states[rowIndex]; } return null; } public String getColumnName(int columnIndex) { if(columnIndex == 0){ return "state"; }else{ return "operate"; } } public boolean isCellEditable(int rowIndex, int columnIndex) { if(columnIndex == 0){ return false; }else{ return true; } } } // cell editor class Editor extends AbstractCellEditor implements TableCellEditor, ActionListener { int row; JTable table; JPanel panel; JButton start; JButton stop; Editor(){ panel = new JPanel(); panel.setLayout(new GridLayout(1, 2)); start = new JButton("start"); stop = new JButton("stop"); start.addActionListener(this); stop.addActionListener(this); panel.add(start); panel.add(stop); } public Object getCellEditorValue() { return null; } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { this.table = table; this.row = row; return panel; } public void actionPerformed(ActionEvent e) { if(e.getSource() == start){ states[row] = "start"; }else{ states[row] = "stop"; } ((AbstractTableModel)table.getModel()).fireTableCellUpdated(row, 0); } } // cell render class Renderer extends JComponent implements TableCellRenderer{ JPanel panel; JButton start; JButton stop; Renderer(){ panel = new JPanel(); panel.setLayout(new GridLayout(1, 2)); start = new JButton("start"); stop = new JButton("stop"); panel.add(start); panel.add(stop); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return panel; } } public TableTest1(){ super("renderer and editor self-existent"); table = new JTable(new TableModel()); TableColumn tableColumn = table.getColumnModel().getColumn(1); tableColumn.setCellRenderer(new Renderer()); tableColumn.setCellEditor(new Editor()); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER); this.setSize(500, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new TableTest1().show(); } }
发表评论
-
curtain
2013-04-01 16:45 0curtain -
jlayer
2013-03-26 18:13 0jlayer pane. -
swing网站
2013-03-01 15:44 0(2009年4月2日更新) 最近在网上找到了一些比 ... -
aasss
2012-08-03 18:09 0aasss -
关于swing的文章
2012-07-30 15:50 0http://blog.csdn.net/mylxiaoyi/ ... -
vista button
2012-06-12 20:14 0import java.awt.AlphaComposite; ... -
database demo
2012-06-09 17:17 0kkk -
全局键盘事件
2012-06-06 10:19 1254KeyboardFocusManager manager = ... -
sssfw
2012-05-04 20:56 0http://www.byywee.com/page/M0/S ... -
swingtexiao
2012-05-04 20:00 0swingtexiao -
sss
2012-04-28 18:11 0sss -
使用annotation获取实体类注释
2012-04-11 18:57 0使用annotation获取实体类注释 -
自定义scrollbar
2012-04-11 18:49 0自定义scrollbar -
自定义绘制按钮
2012-04-11 18:47 0自定义绘制按钮 -
2012年4月6日
2012-04-06 18:48 02012年4月6日 -
批量缩放图片工具
2012-03-28 19:13 0挺好用 -
工作文档
2012-03-24 18:17 0import java.util.ArrayList; im ... -
test
2012-03-23 17:45 1tset -
A星算法
2012-03-23 15:20 1205A星算法 -
aasss
2012-03-21 18:58 1aaaaa
相关推荐
在Java Swing中,`TableCellRenderer` 是一个接口,它在创建和显示JTable组件中的单元格内容时扮演着至关重要的角色。标题“*Renderer implements TableCellRenderer”表明我们正在讨论一个自定义的渲染器,该渲染器...
实现设置JTable中某些单元格的背景色
在"自定义表格渲染器与编辑器"中,我们了解到可以通过实现TableCellRenderer和TableCellEditor接口来自定义单元格的显示和编辑行为。这使得开发者能够为特定列定制显示样式,如日期、货币格式,或者创建复杂的编辑...
例如,JTable和JList等组件都有相应的模型类(如DefaultTableModel),视图类(如JTable本身)和控制器类(如TableCellRenderer和TableCellEditor)。 在Swing中,你还可以利用JFrame和JDialog创建顶级窗口,用...
7. **自定义单元格渲染和编辑**:通过实现TableCellRenderer和TableCellEditor接口,你可以定制单元格的显示样式和编辑行为。例如,为日期单元格提供专门的日期选择器。 8. **表格操作**:JTable支持排序、选择、...
JTable默认使用简单的文本渲染,但可以通过实现TableCellRenderer和TableCellEditor接口来自定义单元格的显示和编辑方式,例如,为日期单元格使用日期选择器,或者为数字单元格使用滑动条。 4. **交互与事件处理**...
通过实现TableCellRenderer和TableCellEditor接口,我们可以控制单元格的显示和编辑行为。 **性能优化** 在处理大量数据时,为了提高性能,可以使用懒加载策略,只在需要时加载数据。对于表格,可以使用Scroll Pane...
这涉及到`TableCellRenderer`和`TableCellEditor`两个关键接口的实现。 首先,`TableCellRenderer`是`JTable`用来决定单元格如何显示的组件。在这个案例中,我们需要创建一个自定义的`TableCellRenderer`,它将...
4. **自定义渲染和编辑器**:为了改变单元格的显示方式或允许用户编辑特定类型的单元格,开发者可以提供自定义的TableCellRenderer和TableCellEditor。 5. **事件处理**:JTable可以监听用户交互,如单击事件,这在...
组件(JButton,JLable...)继承相应的组件,并且implements TableCellRenderer,图片的方式是,将图片添加该组件中就可以了,具体方式是加入到重写的方法中.this.setIcon("path"),就可以了 3.设置Table的...
Swing还引入了模型-视图-控制器(MVC)设计模式,其中JTable和JTree等组件都有自己的模型类(如DefaultTableModel),视图类(如JTable本身)和控制器类(如TableCellRenderer和TableCellEditor)。这种分离有助于...
这通常是通过自定义`TableCellRenderer`和`TableCellEditor`来实现的。`TableCellRenderer`负责渲染单元格的外观,而`TableCellEditor`则处理单元格的编辑行为。 下面是如何实现复选框列的示例: ```java class ...
这可以通过实现`TableCellEditor`来完成: ```java class ComboBoxCellEditor extends DefaultCellEditor { private JComboBox comboBox; public ComboBoxCellEditor(Object[] items) { super(new JComboBox...
当我们需要在`JTable`中实现更复杂的交互,比如在一个单元格内放置多个按钮时,这通常涉及到自定义`TableCellRenderer`和`TableCellEditor`。下面我们将深入探讨如何在`JTable`中放入多个按钮以及相关的技术细节。 ...
在`CheckHeaderCellRenderer.java`中,我们需要实现`TableCellRenderer`接口,确保表头的`JCheckBox`能正确地反映出所有行的选中状态,并响应用户的点击事件。当用户点击表头的`JCheckBox`时,它应会触发所有行的`...
要在`JTable`的单元格中插入`JButton`,我们通常需要创建一个自定义的`TableCellRenderer`和`TableCellEditor`。 1. **自定义`TableCellRenderer`**:渲染器决定单元格在视图中的外观。我们可以通过继承`...
但为了实现更复杂的需求,如日期选择、颜色选择等,你需要自定义`TableCellEditor`和`TableCellRenderer`。 6. **排序和过滤**: `JTable`可以通过添加`TableRowSorter`来实现数据的排序功能。对于数据过滤,可以...
6. **事件监听**:可以通过监听`TableCellEditor`、`TableCellRenderer`和`TableRowSorter`等事件,实现对单元格内容变化、渲染和排序的响应。 ### jTable的高级用法 1. **自定义模型**:`DefaultTableModel`可能...
You have to provide your own TableCellRenderer implementation if you want to display buttons in a JTable. The TableCellRenderer interface contains only one method, getTableCellRendererComponent(...), ...
虽然`JTable`默认不支持在单元格中放置复杂组件,但我们可以通过实现`TableCellEditor`接口并使用`DefaultCellEditor`来实现这一功能。例如,要在单元格中添加一个`JCheckBox`: ```java class CheckBoxEditor ...