package ljsearchapp;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventObject;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
public class Test1 extends JFrame {
JTable t;
public Test1() {
setBounds(100, 100, 200, 200);
JPanel pane = new JPanel();
DefaultTableModel dm = new DefaultTableModel();
dm.setDataVector(new Object[][]{{"Button 1", "foo"},
{"Button 2", "bar"},{"Button 2", "bar"},{"Button 2", "bar"},{"Button 2", "bar"},{"Button 2", "bar"}},
new Object[]{"Button", "String"});
t = new JTable(dm);
t.getColumn("Button").setCellRenderer(new ButtonRenderer());
t.getColumn("Button").setCellEditor(new ButtonEditor(new JTextField()));
pane.setLayout(new FlowLayout());
pane.add(t);
this.add(pane);
setVisible(true);
}
}
class ButtonEditor extends DefaultCellEditor {
protected JButton button;
private String label;
private boolean isPushed;
public ButtonEditor(JTextField checkBox) {
super(checkBox);
this.setClickCountToStart(1);
button = new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
});
}
public Component getTableCellEditorComponent(final 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);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(table.getSelectedRow()) ;
System.out.println(table.getSelectedColumn()) ;
}
});
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();
}
@Override
public boolean shouldSelectCell(EventObject anEvent) {
System.out.println(1);
return super.shouldSelectCell(anEvent);
}
public static void main(String[] args){
Test1 test1 = new Test1() ;
}
}
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("UIManager"));
}
setText((value == null) ? "" : value.toString());
return this;
}
}
分享到:
相关推荐
将`JButton`添加到`JTable`中可以为用户提供更丰富的交互体验,例如编辑、删除或自定义操作。本文将详细讲解如何在`JTable`中添加`JButton`控件,并探讨其可能的拓展应用。 首先,我们需要理解`JTable`的基本结构。...
使用 AbstractTableModel 构建Table 在表格中添加JButton按钮,之前在网上找了2天没有找到好用的程序,最终终于找到一个好用的例子。 不要使,我退你们分。。 sing the Swing JTable class can quickly become a ...
在Java Swing库中,`JTable`是一个非常重要的组件,用于展示二维数据表格。当我们需要在`JTable`中实现更复杂的交互,比如在一个单元格内放置多个按钮时,这通常涉及到自定义`TableCellRenderer`和`TableCellEditor`...
用改写 DefaultCellEditor 和 TableCellRenderer的方法实现,主要代码: table.getColumnModel().getColumn(2).setCellEditor(new MyButtonEditor()); table.getColumnModel().getColumn(2).setCellRenderer...
组件(JButton,JLable...)继承相应的组件,并且implements TableCellRenderer,图片的方式是,将图片添加该组件中就可以了,具体方式是加入到重写的方法中.this.setIcon("path"),就可以了 3.设置Table的...
在开发GUI应用时,我们经常需要处理`JTable`中的数据,包括添加、删除和修改等操作。下面将详细介绍如何实现`JTable`数据的添加与删除。 ### 一、`JTable`的基本结构 `JTable`通常由三部分组成:`TableModel`、`...
在Java的Swing库中,JTable是一种非常重要的组件,用于展示二维数据表格。而将多个Button放入JTable的同一单元格中,可以提供更丰富的交互性,这在某些复杂的应用场景下是必要的。本教程将详细介绍如何在JTable中...
Swing组件(如JFrame、JLabel、JTextField、JComboBox、JButton等)与JTable共同构成了复杂的用户界面。为了实现用户交互,Swing组件需要进行事件处理。在文档中出现的`ActionListener`接口表明了对用户动作(如点击...
本文将详细介绍如何使用`JScrollPane`、`JTable`以及`DefaultTableModel`构建一个功能丰富的表格组件,实现数据的添加、删除、修改等功能。 #### 二、基础知识介绍 ##### 1. JTable简介 `JTable`是Swing提供的一个...
在实际应用中,`JTable`和`JTree`通常与其他Swing组件结合使用,如`JScrollPane`用于滚动,`JButton`用于触发操作,以及`JLabel`等用于提供上下文信息。通过熟练掌握这两个组件,开发者可以创建出功能强大的用户界面...
有时,我们可能需要在JTable的某一列中添加自定义的按钮,以便为用户提供更多的交互功能。本篇将详细介绍如何在JTable列中自定义Button,并提供一个实际的示例代码。 首先,我们需要了解JTable的基本结构。JTable由...
接下来,我们可以将JTable添加到一个JScrollPane中,以确保在数据量较大时能够正确滚动。这样可以避免界面过长导致的视觉不适: ```java JScrollPane scrollPane = new JScrollPane(table); ``` 为了实现查询功能...
在示例代码中,创建了一个 `JButton` 并添加了一个监听器,当用户点击“Print”按钮时,会调用 `JTable` 的 `print()` 方法来打印当前表格。 ```java JButton printButton = new JButton("Print"); printButton....
此外,`JTable`还可以与其他Swing组件结合使用,比如`JScrollPane`用于滚动,`JComboBox`作为下拉框选择列的值,`JButton`作为操作按钮等,这些都在`swing`目录下的其他文件中可能会有所涉及。 总的来说,`JTable`...
本示例主要展示了如何使用 Java Swing 中的 `JTable` 组件来实现一个简单的表格应用,包括如何添加、删除数据等基本操作。这对于初学者来说是非常有用的参考资料。 #### 二、代码解析 ##### 1. 导入必要的包 ```...
在实际应用中,JTable通常与JFrame、JScrollPane、JButton等组件一起使用,构建功能丰富的桌面应用。 在"成员信息查看和调用"这个子文件中,我们可以推测可能包含了一个示例,演示如何使用Map存储成员信息(例如,...
该类中重新定义了构造方法、添加数据行的方法、删除数据行的方法、设置和读取单元格中数据的方法及获取表格中行数的方法等。 知识点四:自定义表格模型的优点 自定义表格模型可以大大方便了对表格中数据的操纵,...
在这个例子中,我们看到了`JFrame`、`JTable`、`JButton`和`JScrollPane`,这些都是Swing的组件。 2. **JTable**: `JTable`是用于显示和编辑表格数据的组件。在这个代码中,我们创建了一个`JTable`来显示数据,并且...
本演示主要关注Java Swing中的常见控件以及`JTable`的使用。 1. **Swing组件基础**: Swing组件基于Java AWT(Abstract Window Toolkit),但提供了更多的特性和更好的跨平台兼容性。Swing组件包括按钮(JButton)...
- 在JFrame中添加JTable,首先创建一个JTable实例,然后将它放入JScrollPane中,最后将JScrollPane添加到JFrame。 - 添加按钮和其他控件,可以通过add()方法将它们添加到JPanel或直接添加到JFrame。 - 设置布局...