JTable学习总结之——如何设置表格透明篇

最近在自己做一个项目,因为涉及到的表格比较多,所以使用JTable也稍微频繁,而自然问题也就多了起来。之前有一篇文章是关于返回-1的问题,今天主要将一些对JTable的基本设置。

第一:透明。

上面是我自己做的一个表格,目的就是实现表格透明化。从中可以看出来其中只是在表格的数据意外的地方透明了。当然这一步想要实现很简单将对应的JScrollPane设置一下如:

JScrollPane jsp = new JScrollPane();
jsp.setOpaque(false);
jsp.getViewport().setOpaque(false);
第一次用的时候也不知道为什么需要设置两个,但是后来查阅JDK api后发现这跟JScrollPane的实现有关。JSCrollPane有两个面板层,一个是他本身,而另外一个则是他的viewport(视口)。说到viewport这里也讨论一下为什么java中会需要这个viewport吧。假设我们现在在做一个根据条件过滤的查询页面,根据这种需求,我们肯定需要对表格不断的修改然后重新显示,如果只是单元格内容变化,行列数不变,我们可以用JTable中的TableModel来实现。但是如果行列数都变了,甚至显示方式也变了。这该如何?每次都把JScrollPane删掉再重新添加?这种方式更复杂一点不说,如果下层面板的Layout不合适还会引发其他一系列的问题。比如说顺序,甚至重新修改JScrollPane的大小等,太麻烦,而在使用viewport的时候则可以避免这些问题,直接setViewport一下,就更新了。

题外话说完,下一个就是表格中数据的透明了。要实现表格中的透明还需要设置两个部分,即:JTable和cell。将这两个部分都设置成透明之后才能实现整个透明。先给出一个透明的Demo好了。

import java.awt.Color;

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;

public class Demo
{
public static void main(String[] args)
{
JFrame jf = new JFrame("Demo");
String data[][] = new String[][]{{"1","2"},{"12","22"}};
String column[] = new String[]{"A","B"};
JTable table = new JTable(data,column);
JScrollPane jsp = new JScrollPane(table);
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();

renderer.setOpaque(false);//render单元格的属性
//遍历表格中所有列,将其渲染器设置为renderer
for(int i = 0 ; i < column.length ; i ++)
{
	table.getColumn(column[i]).setCellRenderer(renderer);
}
table.setOpaque(false);//将table设置为透明
jsp.setOpaque(false);//将jsp根面板设置为透明
jsp.getViewport().setOpaque(false);//将jsp的viewport设置为透明
jf.add(jsp);
jf.getContentPane().setBackground(Color.blue);//将jf(窗体)的面板设置为蓝色。以便区分是否表格为透明
jf.setSize(400, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
附上Demo的实现效果截图。


到这里算是基本实现了表格的透明了。

你可能感兴趣的:(JTable学习总结之——如何设置表格透明篇)