`
弦上的福音
  • 浏览: 21841 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Swing 表头设置之UI

阅读更多
看了网上好多资料,和一个热心网友胡海波发到网上共享的代码,有所启发,下面是我对其代码进行的修改,以及个人心得。
表格头部设置有好几种,这种是把表头设置成ui,再设置进表格中
package tableHead;

import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicTableHeaderUI;
import javax.swing.table.JTableHeader;

public class TableHeadUI extends BasicTableHeaderUI  {
		private JTableHeader header;  
		
		public void paint(Graphics g, JComponent c) {
			header = (JTableHeader) c;
		
			JLabel label=getLabel("个人信息");
			rendererPane.paintComponent(g, label, header,  getX(0), 0, getWidth(0)+getWidth(1), 20, true);
			
			label=getLabel("名称");
			rendererPane.paintComponent(g, label, header, getX(0), 20, getWidth(0), 20, true);
			
			label=getLabel("年龄");
			rendererPane.paintComponent(g, label, header, getX(1), 20, getWidth(1), 20, true);
			
			label=getLabel("工资");
			rendererPane.paintComponent(g, label, header, getX(2), 0, getWidth(2), 40, true);
			
			label=getLabel("编号");
			rendererPane.paintComponent(g, label, header, getX(3), 0, getWidth(3), 40, true);
		}
	
		 // 得到指定列的起始坐标

		  private int getX(int column){

		    int x=0;

		    for(int i=0;i<column;i++)

		     x+=header.getColumnModel().getColumn(i).getWidth();

		    return x;

		   }
		
	//得到指定列的宽度

	  private int getWidth(int column){

	   return header.getColumnModel().getColumn(column).getWidth();

	  }
	
	//得到具有指定文本的标签

	  private JLabel getLabel(String text){

	   JLabel label = new JLabel(text, JLabel.CENTER);

	   label.setBorder(UIManager.getBorder("TableHeader.cellBorder"));

	   return label;

	  }
	}


这是表头ui的代码,继承了BasicTableHeaderUI类,主要修改的,就是中间paint中每个单元格布局的逻辑,其他的可以直接引用即可。paintComponent的参数,前3个不用变,第4个是该所在的列数,调用下面的方法,可以直接获得所在的起始坐标,第5个参数为离最顶端的距离,如果是0,那么就是第一列,因为第一行与顶端距离为0,以此类推,第2行这个值就是第1行的行高。第6个参数为该单元的宽,第7个参数为该单元格的高,最后一个写true即可。

下面代码是实例出来,加入表格的展示

package tableHead;

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Table {

	
	public static void main(String[] args) {
		JFrame jf = new JFrame();
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setSize(new Dimension(600,400));
		JScrollPane jsp = new JScrollPane();
		jf.setContentPane(jsp);
		Object[][] t = {{"","","",""},{"","","",""}};
		String[]h = {"","","",""};
		//建表
		JTable jt = new JTable(new DefaultTableModel(t,h));
		//建头组件
		TableHeadUI ui = new TableHeadUI();
		//获得头组件并设置
		jt.getTableHeader().setUI(ui);
		//设置表头的大小,要够长,高度最好要和表头的高度一样,否则会出现多余部分
		jt.getTableHeader().setPreferredSize(new Dimension(400,40));
		jsp.setViewportView(jt);
		jf.setVisible(true);

	}

}



下面是效果图,很简单但是可以变换一下就达到别的效果了
分享到:
评论

相关推荐

    复杂JTable-跨列表头

    1. **GroupableTableHeaderUI**: 这是JTable表头的自定义UI实现,负责渲染合并后的表头。UI组件是Java Swing中的核心部分,它们决定了组件的外观和行为。GroupableTableHeaderUI将处理表头的绘制逻辑,包括合并区域...

    table表头点击可实现排序

    在网页开发中,数据展示通常会使用表格(Table)元素,而为了使用户能更方便地浏览和理解数据,我们常常需要实现表头点击时自动排序的功能。这个功能的实现主要依赖于JavaScript,因为它提供了对DOM操作和事件监听的...

    GroupTableHeader 多表头 修正版

    UI组件的修改可能是解决对齐问题和实现多级表头叠加的关键。 - `LoanPanel.java`:可能是一个包含`JTable`实例的面板,用于展示贷款或者其他金融数据,可能利用了修正后的`GroupTableHeader`。 - `ColumnGroup....

    Java Swing Examples

    - **GroupableTableHeaderUI.java**:提供了分组表头的 UI 实现。 ##### 2. Multi-Width Header 示例 - **MultiWidthHeaderExample.java**:此示例展示了如何实现多宽度的表头。 - **ColumnGroup.java**:用于定义...

    Swing深入.rar

    7. **Swing Worker**:为了解决Swing组件在事件调度线程上执行耗时任务可能导致的界面冻结问题,Swing提供了SwingWorker类,它可以在后台线程中执行计算,并在完成时更新UI。 8. **JTable、JTree与JList**:这些...

    基于java swing开发的学生管理系统源代码

    - `JLabel`:显示静态文本或图标,常用于表头或提示信息。 - `JTextField` 和 `JTextArea`:用于输入和显示文本信息,如学生的姓名、学号等。 - `JComboBox`:提供下拉选项,可用来选择年级、专业等分类信息。 -...

    Mulitrosss

    在实际开发过程中,表格组件是经常被使用的UI元素之一。为了提高表格的可读性和易用性,有时我们需要在表头部分显示更多的信息,比如层级关系或者描述性的文本等。这些信息如果放在单行内可能会显得过于拥挤,因此...

    java课设学生信息管理

    它提供了一系列丰富的UI组件,如按钮、文本框等,并且具有良好的跨平台特性。 - **Swing组件**:在本程序中使用到的主要Swing组件有`JFrame`(主窗口)、`JButton`(按钮)、`JTextField`(文本输入框)、`JLabel`...

    java与mysql图形界面的简单交互管理

    在实际开发中,我们还需要考虑安全性,如使用预编译的SQL语句避免SQL注入,以及使用PreparedStatement设置参数以防止SQL注入。 在图形用户界面(GUI)方面,可以使用Java Swing或JavaFX构建。这些库提供了丰富的...

    Java实现时间动态显示方法汇总

    `DEFAULT_TIME_FORMAT`常量用于设置时间格式(默认为“HH:mm:ss”)。然后,创建一个`TimerTask`的子类,例如`JLabelTimerTask`,它覆盖`run()`方法,使用`SimpleDateFormat`和`Calendar.getInstance().getTime()`...

    排序TableModel

    7. **监听排序状态**:`DefaultSortModel`提供了`addSortListener(SortListener)`方法,可以添加`SortListener`来监听排序事件,例如在排序发生时更新其他UI元素。 综上所述,`DefaultSortModel`是Java Swing中实现...

    JAVA中JTable的使用方法

    这个组件对于用户界面(UI)设计尤其重要,尤其是在需要显示和编辑数据库或其他数据源数据时。下面我们将深入探讨`JTable`的使用方法。 1. **`JTable`的基本概念** `JTable`是`javax.swing.JTable`类的实例,它...

    java中的表格的 用法JTABLE

    7. **表头的定制**:`JTableHeader`是`JTable`的表头部分,可以通过`setHeaderRenderer`和`setHeaderValue`来定制。 ```java table.getTableHeader().setDefaultRenderer(new MyHeaderRenderer()); ``` 8. **与...

    GUI笔记学习

    在Eclipse中,可以通过简单的操作在源代码视图和设计视图之间切换,以便更直观地编辑UI界面: - 在编程界面的下方工具栏,可以看到 **Source** 和 **Designer** 两个选项。 - 选择 **Source** 时,将显示源代码视图...

    JAVA事件处理指南

    在Java AWT和Swing库中,组件(如按钮、文本框)作为视图,监听器接口作为控制器,而实际业务逻辑则在模型中实现。当用户与组件交互时,组件会生成一个事件,然后这个事件会被相应的监听器捕获并处理。 1. **事件源...

    Tree和grid

    6. 表头固定,即使滚动内容,表头依然可见,便于用户参考。 7. 自定义样式和模板,可以自定义单元格的样式和内容显示方式。 在实际开发中,"Tree"和"Grid"通常结合使用,例如在文件管理器应用中,左侧是Tree展示...

    datagrid

    - DataGrid是用户界面(UI)元素,用于展示和操作表格形式的数据。它支持多列布局,可以包含可排序、可编辑、可筛选的单元格。 - 这种组件广泛应用于数据库应用程序、报表工具以及数据分析应用中。 2. **源码解析...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例148 使用事件分配线程更新Swing控件 193 实例149 使用SwingWorker类完成耗时操作 194 第7章 反射与异常处理 195 7.1 反射的基础 196 实例150 实例化Class类的5种方式 196 实例151 获得Class对象表示实体的名称 ...

Global site tag (gtag.js) - Google Analytics