`

JTableHeader添加控件

 
阅读更多

话不多说直接上图

package JTableTest;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.AbstractCellEditor;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;

public class TableHeaderRenderer extends JFrame implements ActionListener {

	Object[][] rows = {

	};
	
	Object[] cols = {"phone","menoy"};
		
	JTable tab;
	
	public TableHeaderRenderer() {
		tab = new JTable(rows, cols);
		TableColumn column = tab.getTableHeader().getColumnModel().getColumn(1);
		TableColumn col = tab.getColumnModel().getColumn(1);
		col.setPreferredWidth(200);
		
		TableCellRenderer ren = new RendererDeconrator();
		tab.getTableHeader().addMouseListener(new MouseAdapter() {
			
			@Override
			public void mouseClicked(MouseEvent e) {
				JTableHeader tableHeader = (JTableHeader) e.getSource();
				//根据鼠标点选获取当前是第一列
				int selColumn = tableHeader.getColumnModel().getColumnIndexAtX(e.getPoint().x);
				TableCellRenderer cellRenderer = tableHeader.getColumnModel().getColumn(selColumn).getHeaderRenderer();
				if ( cellRenderer instanceof RendererDeconrator ) {					
					RendererDeconrator deconrator= (RendererDeconrator) cellRenderer;
					System.out.println(tableHeader.getColumnModel().getColumn(1).getHeaderValue());
					JOptionPane.showMessageDialog(null, "添加表格!");
				}
			}
		});
		column.setHeaderRenderer(ren);
		//column.setCellEditor(cellEditor);
		getContentPane().add(new JScrollPane(tab),BorderLayout.CENTER);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setVisible(true);
		pack();
	}
	
	public static void main(String[] args) {
		new TableHeaderRenderer();
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		
	}	
}

class RendererDeconrator implements TableCellRenderer{
	public JPanel panel;
	public JButton btn = new JButton("添加");
	JLabel iconLabel = new JLabel(new ImageIcon("D:/toggle.gif"));
	
	public RendererDeconrator() {
		panel = new JPanel();
		panel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 0));
		panel.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
		panel.add(iconLabel);
		panel.add(btn);
	}
	
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
			int row, int column) {
		if ( value != null ) {			
			iconLabel.setText(value.toString());
		}
		return panel;
	}
}

 

  • 大小: 3.4 KB
分享到:
评论

相关推荐

    LABVIEW中动态添加控件

    标题提到的“动态添加控件”是LabVIEW的一项重要特性,允许用户在程序运行时动态地向用户界面(Front Panel)添加、修改或删除控件,增强了程序的灵活性和交互性。 动态添加控件通常涉及以下知识点: 1. **VI引用*...

    动态添加控件及添加事件方法

    在VC++编程中,动态添加控件和为其添加事件处理是常见的需求,特别是在设计复杂的用户界面时。本文将深入探讨如何实现这一功能,主要关注如何动态添加CtreeCtrl控件和如何为这些动态生成的控件添加事件。 首先,...

    vc用代码动态添加控件

    在Visual C++中,开发Windows应用程序时,我们经常会遇到需要在运行时动态创建和添加控件的情况。这在设计复杂的用户界面或者根据用户需求自定义布局时尤其有用。标题"vc用代码动态添加控件"和描述"visual c++ ...

    c#动态添加控件

    在C# WinForm应用开发中,动态添加控件是一项常用且重要的技能,它允许开发者根据需求在运行时创建和管理用户界面元素。本篇将详细阐述如何实现这一功能,包括利用右键菜单来触发添加和删除操作。 首先,我们要创建...

    wpf 后台添加控件(多个)

    本教程将基于标题“wpf 后台添加控件(多个)”和描述中的内容,详细介绍如何在WPF应用的后台代码中动态地添加多个控件,并实现滚动条效果。 首先,我们要理解WPF中的控件创建。在XAML中,我们通常静态地定义界面...

    C#中用代码在窗体上任意添加控件

    在C#编程环境中,开发Windows桌面应用程序时,我们经常需要在窗体上动态地添加控件,以便根据用户的交互或程序需求自定义界面布局。本文将深入探讨如何在C#中通过代码实现这一功能,特别是在窗体上双击时添加文本框...

    pyqt5 实现 主窗口中动态添加控件

    在PyQT5中,动态添加控件是一项常用且重要的功能,尤其在开发用户界面时,可能需要根据用户操作或特定条件动态创建、显示或隐藏控件。本篇将详细讲解如何在主窗口中实现这一功能。 首先,我们需要了解PyQT5的基础...

    vfp 动态添加控件的事件绑定处理

    在Visual FoxPro(VFP)开发环境中,动态添加控件是一项常见的需求,特别是在设计复杂的用户界面或需要根据程序运行时的条件创建控件时。标题“vfp 动态添加控件的事件绑定处理”和描述“vfp 动态添加的控件如何指定...

    VB动态添加控件

    在VB(Visual Basic)编程中,动态添加控件是一项常用的技术,它允许程序在运行时根据需要创建和添加用户界面元素。这样的功能在设计复杂的、交互性强的应用程序时尤其有用,因为它可以提供更大的灵活性和定制性。...

    ACCESS窗体 动态添加控件

    ACCESS窗体 原生的控件都是无法动态添加的,但是我通过添加一个Frame容器控件,实现了这个想法。 并且能够获取到动态添加控件的事件。 只是,动态添加的控件必须是UserForm控件了,一些属性、方法、事件稍有不同!

    动态添加控件(C#代码编写)

    动态添加控件是C#编程中的一个重要概念,它允许程序在运行时创建和添加用户界面元素,而不是仅限于设计时静态定义。这对于创建可自定义的、灵活的应用程序或者处理不确定数量的数据展示非常有用。下面我们将深入探讨...

    QT动态添加控件,并且自动布局

    在QT编程中,动态添加控件以及实现自动布局是一项常用且重要的技能。这涉及到QT的两种主要布局管理器:QLayout和QWidgetItem,以及可能用到的QVBoxLayout、QHBoxLayout、QGridLayout等布局类型。本篇文章将深入探讨...

    vb2010动态添加控件的实现方法

    在VB2010中,动态添加控件是一项常见的编程任务,这主要涉及到Windows Forms应用程序的开发。VB2010允许程序员在运行时创建和添加控件,从而增加了程序的灵活性和用户交互性。以下将详细介绍如何在VB2010中实现动态...

    VC++程序 动态添加控件

    在VC++编程中,动态添加控件是一项常用的技术,它允许程序员在运行时根据需要创建和添加用户界面元素,如按钮、文本框、列表框等。这种能力在设计灵活的用户界面或者处理不确定数量的数据项时尤其有用。下面将详细...

    QTableView 中单元格添加控件的实例代码(含combobox)

    QTableView 中单元格添加控件的实例代码(含combobox)QTableView 中单元格添加控件的实例代码(含combobox)QTableView 中单元格添加控件的实例代码(含combobox)

    c# 动态添加控件实例

    在C#编程中,动态添加控件是一项常用的技术,它允许开发者在运行时根据需要创建和添加用户界面元素。这在构建高度可定制的应用程序或处理未知数量的数据时尤其有用。下面将详细介绍C#中动态添加控件的概念、步骤以及...

    C# ListView中添加多种自定义控件源码

    本主题将深入探讨如何在C#的ListView中添加和使用各种自定义控件,如CheckBox和ComboBox,以增强用户体验和功能。 一、ListView控件基础 ListView控件允许我们展示数据列表,并提供了多种视图模式,如小图标、大...

    abc.zip_ABC_动态 控件_动态添加控件

    在Visual Basic环境中,动态添加控件是一项常见的编程需求,它允许程序员在运行时根据需要创建和添加新的用户界面元素,从而提升程序的灵活性和交互性。"abc.zip_ABC_动态控件_动态添加控件"这个标题暗示了我们将在...

    MFC 手动添加一般控件的方法Button static combobox groupbox

    在MFC(Microsoft Foundation Classes)框架中,手动添加控件是构建用户界面(UI)的重要环节。本篇文章将深入探讨如何在MFC项目中手动添加常见的控件,如Button、Static、ComboBox和GroupBox,以及涉及的相关知识点...

    C# DataGridView单元格中动态添加多个控件

    这个主题“C# DataGridView单元格中动态添加多个控件”就涵盖了如何在`DataGridView`的单元格内部动态创建和管理多个控件。 在VS2012中,我们可以利用事件驱动编程和反射技术来实现这一目标。首先,我们需要理解`...

Global site tag (gtag.js) - Google Analytics