效果如如下:
![JButtonCell]()
代码:
// File: JButtonTableExample.java
/* (swing1.1beta3) */
//package jp.gr.java_conf.tame.swing.examples;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import jp.gr.java_conf.tame.swing.table.*;
/**
* @version 1.0 11/09/98
*/
public class JButtonTableExample extends JFrame {
public JButtonTableExample(){
super( "JButtonTable Example" );
DefaultTableModel dm = new DefaultTableModel();
dm.setDataVector(new Object[][]{{"button 1","foo"},
{"button 2","bar"}},
new Object[]{"Button","String"});
JTable table = new JTable(dm);
table.getColumn("Button").setCellRenderer(new ButtonRenderer());
table.getColumn("Button").setCellEditor(new ButtonEditor(new JCheckBox()));
JScrollPane scroll = new JScrollPane(table);
getContentPane().add( scroll );
setSize( 400, 100 );
setVisible(true);
}
public static void main(String[] args) {
JButtonTableExample frame = new JButtonTableExample();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
// File: ButtonRenderer.java
/* (swing1.1beta3) */
package jp.gr.java_conf.tame.swing.table;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
/**
* @version 1.0 11/09/98
*/
public class ButtonRenderer extends JButton implements TableCellRenderer {
public ButtonRenderer() {
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
} else{
setForeground(table.getForeground());
setBackground(UIManager.getColor("Button.background"));
}
setText( (value ==null) ? "" : value.toString() );
return this;
}
}
// File: ButtonEditor.java
/* (swing1.1beta3) */
package jp.gr.java_conf.tame.swing.table;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
/**
* @version 1.0 11/09/98
*/
public class ButtonEditor extends DefaultCellEditor {
protected JButton button;
private String label;
private boolean isPushed;
public ButtonEditor(JCheckBox checkBox) {
super(checkBox);
button = new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
});
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
if (isSelected) {
button.setForeground(table.getSelectionForeground());
button.setBackground(table.getSelectionBackground());
} else{
button.setForeground(table.getForeground());
button.setBackground(table.getBackground());
}
label = (value ==null) ? "" : value.toString();
button.setText( label );
isPushed = true;
return button;
}
public Object getCellEditorValue() {
if (isPushed) {
//
//
JOptionPane.showMessageDialog(button ,label + ": Ouch!");
// System.out.println(label + ": Ouch!");
}
isPushed = false;
return new String( label ) ;
}
public boolean stopCellEditing() {
isPushed = false;
return super.stopCellEditing();
}
protected void fireEditingStopped() {
super.fireEditingStopped();
}
}
分享到:
相关推荐
- 确保在添加按钮时考虑到单元格的大小,可能需要自定义单元格的宽度和高度。 - 考虑到性能问题,避免在`getTableCellRendererComponent`方法中进行耗时的操作,因为此方法会被频繁调用。 - 如果单元格需要可编辑...
用改写 DefaultCellEditor 和 TableCellRenderer的方法实现,主要代码: table.getColumnModel().getColumn(2).setCellEditor(new MyButtonEditor()); table.getColumnModel().getColumn(2).setCellRenderer...
Java Swing 实现 JTable 检测单元格数据变更事件的方法示例 Java Swing 中的 JTable 是一个功能强大且灵活的表格组件,广泛应用于各种桌面应用程序中。然而,在实际开发中,我们经常需要检测单元格数据的变更事件...
添加组件后,在组件上添加图片 1.设置Table的Model这个需要重写AbstractTableModel类, 2.设置Table的DefaultRenderer,这个根据个人需要选择将要添加到Table的cell里的 组件(JButton,JLable...)继承相应的组件...
创建一个类,继承自`DefaultTableCellRenderer`,并在其中添加按钮。例如: ```java public class ButtonCellRenderer extends DefaultTableCellRenderer { private JPanel panel; private JButton[] buttons; ...
本篇文章将深入探讨`JTable`如何操作单元格、行和列,以帮助你更好地理解和运用这一功能强大的组件。 ### 单元格操作 1. **创建和设置单元格值**:`JTable`中的每个单元格都由一个`DefaultTableModel`管理。你可以...
将`JButton`添加到`JTable`中可以为用户提供更丰富的交互体验,例如编辑、删除或自定义操作。本文将详细讲解如何在`JTable`中添加`JButton`控件,并探讨其可能的拓展应用。 首先,我们需要理解`JTable`的基本结构。...
使用 AbstractTableModel 构建Table 在表格中添加JButton按钮,之前在网上找了2天没有找到好用的程序,最终终于找到一个好用的例子。 不要使,我退你们分。。 sing the Swing JTable class can quickly become a ...
JTable中加入复选框的两种方法 在Java中,JTable是一个常用的表格控件,用于显示和编辑表格...通过使用CheckBoxRenderer类和CheckButtonEditor类,我们可以轻松地将复选框添加到JTable中,并实现复杂的表格编辑功能。
在实际使用中,`JTable`提供了丰富的功能,如排序、选择、编辑单元格等。可以通过设置列的`ColumnModel`来控制列的宽度、是否可编辑等属性。另外,`JTable`可以与`JComboBox`、`JCheckBox`等其他组件集成,实现复杂...
`JTable`不仅提供了一个美观的界面来展示数据,还允许用户进行交互,如选择行、编辑单元格以及执行数据查询等操作。本教程将深入探讨如何在`JTable`中实现数据查询以及如何根据用户的查询结果进行界面跳转。 首先,...
在JTable中,可以使用`CellEditor`实现单元格的下拉选项。创建一个`DefaultCellEditor`,并传入`ComboBox`实例,然后将其设置为特定列的编辑器。 6. **保存表格数据** 为了保存表格数据,可以遍历`TableModel`,...
它提供了添加行、列和单元格数据的方法,非常适合用于需要频繁更新数据的应用场景。 ##### 3. JScrollPane `JScrollPane`是一个可以滚动的面板,当表格内容较多时,使用`JScrollPane`可以实现滚动浏览的功能,避免...
有时,我们可能需要在JTable的某一列中添加自定义的按钮,以便为用户提供更多的交互功能。本篇将详细介绍如何在JTable列中自定义Button,并提供一个实际的示例代码。 首先,我们需要了解JTable的基本结构。JTable由...
除了基本操作,你可能还需要实现事件监听器,如MouseListener或KeyListener,以便响应用户的交互操作,例如点击“添加”、“删除”或“保存”按钮。同时,为了保持数据的一致性,事务管理是必要的,尤其是在进行多条...
`Swing之JTable详解.doc`可能包含了`JTable`的基本用法、构造函数、方法以及如何添加、删除和修改表格数据等内容。`2.高级Swing组件JTable应用.doc`可能进一步讨论了`JTable`的高级特性,如排序、过滤、拖放操作,...
`JTable` 是Java Swing中的一个组件,它允许用户在窗口中展示表格数据,并支持交互操作,如选择、排序和编辑单元格。`JTable` 可以动态地调整大小以适应内容,并且可以与其他组件(如`JScrollPane`)一起使用以滚动...
本示例主要展示了如何使用 Java Swing 中的 `JTable` 组件来实现一个简单的表格应用,包括如何添加、删除数据等基本操作。这对于初学者来说是非常有用的参考资料。 #### 二、代码解析 ##### 1. 导入必要的包 ```...
在示例代码中,创建了一个 `JButton` 并添加了一个监听器,当用户点击“Print”按钮时,会调用 `JTable` 的 `print()` 方法来打印当前表格。 ```java JButton printButton = new JButton("Print"); printButton....
`ActionPerformed` 方法处理用户触发的事件,比如点击按钮来执行添加或删除操作。 在实际应用中,`JTable`通常结合`JDBC`用于展示数据库中的数据。例如,你可能首先从数据库中查询所有学生信息,然后将这些数据加载...