关于JTable

fpwang 2003-08-24 11:25:26
我想实现JTable中单行是一种颜色,而双行是另一种颜色?
我试着用CellRenderer但是遇到很多麻烦,怎么解决呢,有没有其他方法,或是提供一些文档资料。
请赐教,先谢了!
...全文
418 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
biti_9512207 2003-08-26
  • 打赏
  • 举报
回复
就自己实现CellRenderer好了.
getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
TableCellRenderer中必须实现上面这个方法, 里面的int row就是行号.
你判断出奇偶后自己设一个背景色就可以了.
sun2927 2003-08-26
  • 打赏
  • 举报
回复
up
fpwang 2003-08-26
  • 打赏
  • 举报
回复
谢谢biti_9512207(波波斯基)的指点!
谢谢onefox(一品狐)的不倦帮助!
谢谢sun2927(小健)的"up"!

结帖!!!!!!!!!!!
fpwang 2003-08-26
  • 打赏
  • 举报
回复
谢谢三位!
谢谢biti_9512207(波波斯基)的指点!
谢谢onefox(一品狐)的不倦帮助!
谢谢sun2927(小健)的"up"!

结贴!!!!!!!!!!!!!!!!!!!!!
onefox 2003-08-26
  • 打赏
  • 举报
回复
完成了 :)
起先我一直用 DefaultTableCellRenderer 里的 setValue(Object value)
谢谢 biti_9512207(波波斯基)!

=================================================================
/**
* [RoundColorTable.java] 间隔色的 JTable
*
*
* 创建日期:(2003-8-25)
* @author:ONE_Fox
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;


public class RoundColorTable extends JFrame {
private String[] colname = {"第1列","第2列","第3列","第4列","第5列"}; //表头信息
private String[][] data = new String[10][5]; //表内容
int[] selected = null; //选择记录

//界面组件----------------------//
private JScrollPane scroPanel = new JScrollPane(); //中底层滚动面板
private DefaultTableModel model; //列表默认TableModel
private JTable table;


/**
* 构造方法 SelectionDemo()
* @param data String[][]
* @param colname String[]
*/
public RoundColorTable() {
makeFace();
addListener();
showFace();
}



/**
* 方法: 界面构建 makeFace()
*/
private void makeFace() {

//表内容数组 data[][] 赋值------------//
for(int i = 0; i < 10; i++) {
for(int j = 0; j < 5; j++) {
data[i][j] = "( " + (j+1) + ", " + (i+1) + " )";
}
}

table = new JTable(model = new DefaultTableModel(data,colname));

//设置列表现器------------------------//
DefaultTableCellRenderer tcr = new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {

if(row%2 == 0)
setBackground(Color.white);
else if(row%2 == 1)
setBackground(new Color(206,231,255));

return super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
}
};
for(int i = 1; i <= 5; i++) {
table.getColumn("第"+i+"列").setCellRenderer(tcr);
}


scroPanel.getViewport().setBackground(Color.white);
scroPanel.getViewport().add(table);

//总体界面布局------------------------//
getContentPane().add(scroPanel, BorderLayout.CENTER);
}



/**
* 方法: 界面显示 showFace()
*/
private void showFace() {
setTitle("间隔色的 JTable");
setSize(500,400);
Toolkit tmpTK = Toolkit.getDefaultToolkit();
Dimension dime = tmpTK.getScreenSize();
Dimension frameSize = this.getPreferredSize();

setLocation(dime.width/2 - (frameSize.width/2),
dime.height/2 - (frameSize.height/2));
setResizable(false);
show();
}



/**
* 方法: 添加事件监听 addListener()
*/
private void addListener() {
this.addWindowListener(new WindowAdapter(){ //添加窗口关闭事件
public void windowClosing(WindowEvent e){
new JFrame().setVisible(false);
dispose();
}
});
}


/**
* 程序入口 main()
*/
public static void main(String args[]) {
//获取设置系统风格-------------------//
try {
String laf = UIManager.getSystemLookAndFeelClassName();
UIManager.setLookAndFeel(laf);
} catch (Exception e) {}

new RoundColorTable();
}
}
fpwang 2003-08-26
  • 打赏
  • 举报
回复
我用biti_9512207(波波斯基)的方法实现了,
但是我用JLabel时无法改变背景色
用JTextField又有讨厌的黑框,有什么办法去掉呢?
或是应该用别的控件???
onefox 2003-08-26
  • 打赏
  • 举报
回复
惭愧, 我用 DefaultTableCellRenderer 实现

但不成工,用鼠标选择表格时发生混乱

可能实现方式就不对吧

onefox 2003-08-25
  • 打赏
  • 举报
回复
关注, 帮你 up
fpwang 2003-08-25
  • 打赏
  • 举报
回复
呵呵,谢谢
大家有什么想法,就算不一定成功也说出来
讨论一下吧

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧