`

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控件和如何为这些动态生成的控件添加事件。 首先,...

    Qt动态添加控件demo

    "Qt动态添加控件demo"这个主题聚焦于如何在运行时根据需求动态地向用户界面添加控件,而不是在设计阶段就预设好所有控件。这种技术在处理数据量不确定、需要用户自定义布局或者创建可扩展的界面时尤其有用。 首先,...

    C#在panel动态添加控件

    本示例关注的是如何在C#中使用ASP.NET Web应用程序,在一个Panel控件上动态添加控件。这个过程对于创建可自定义、灵活且交互性强的用户界面非常有用。 首先,我们需要理解Panel控件。Panel在ASP.NET中是一个容器...

    wpf 后台添加控件(多个)

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

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

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

    c#动态添加控件

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

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

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

    VB动态添加控件

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

    ACCESS窗体 动态添加控件

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

    asp.net 动态添加控件

    在ASP.NET中,动态添加控件是一项常见的需求,特别是在创建高度可配置的用户界面或处理数据绑定时。本文将深入探讨如何使用C#语言在ASP.NET中实现动态添加控件,并通过一个简单的小实例来说明具体操作步骤。 一、...

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

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

    vc用代码动态添加控件

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

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

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

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

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

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

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

    VC++程序 动态添加控件

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

    动态添加控件_动态添加控件_

    在C#编程中,动态添加控件是一项常用的技术,它允许开发者在运行时根据需要创建和添加用户界面元素,而不必在设计时预定义所有的控件。这种灵活性使得程序能够应对不可预见的需求变化,比如根据用户输入或程序逻辑...

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

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

    c# 动态添加控件实例

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

Global site tag (gtag.js) - Google Analytics