我写了public class TableCellTextAreaRenderer extends JTextArea implements TableCellRenderer
并且添加到JTable中的了,table.setDefaultRenderer(Object.class, MainFrame.Renderer);但是,在界面中,table不能选中了,高手来解决,多谢了
并且添加到JTable中的了,table.setDefaultRenderer(Object.class, MainFrame.Renderer);但是,在界面中,table不能选中了,高手来解决,多谢了
解决方案 »
- java圆形按钮怎么添加圆形图标
- JTable 如何设置某个单元格的背景颜色
- 关于多态,望高手解惑
- 想动手,却不知该从何下手
- 请教一个JTextPanel显示网页的问题
- 一个菜鸟问题,请各位帮忙!!!
- 怎么会这样了!dereference是什么错误???
- non-static method doSaveDataImexport() cannot be referenced from a static context 请问是什么意思?我该怎样解决?代码见内,谢谢
- 怎么在客户端存储数据?
- BufferedReader中怎么获取一行的列数
- java是编译型的还是解释型的
- 异异异...异常来袭:java.sql.SQLException: Incorrect string value: '\xE3\x80\x90\xE9\x80\
getTableCellRenererComponent方法的参数里面有一个isSelected,就是标识是否选中的,不知道你是否进行了处理。也许是选中了,但是没有像jdk实现的那样有颜色的变化,所以看去就像没有选中一样吧。
这仅是个人猜测。
更多信息,请贴出代码。
应该是你renderer方法实现的时候,没有针对处理。 if (isSelected) {
super.setForeground(fg == null ? table.getSelectionForeground()
: fg);
super.setBackground(bg == null ? table.getSelectionBackground()
: bg);摘自
public class DefaultTableCellRenderer extends JLabel
implements TableCellRenderer, Serializable
import javax.swing.*;
import javax.swing.table.*;import java.awt.*;
class C extends JFrame {
public C() {
JTable tbl = new JTable(new String[][]{{
"JTable 里单元格内容的显示器是 TableCellRenderer。",
"默认的显示器(DefaultTableCellRenderer)继承 JLabel 所以不方便多行显示。",
"要多行显示应该继承 JTextArea(参看下面的 TableCellTextAreaRenderer 类)。",
"当然,别忘了调用 JTable.setDefaultRenderer() 登记你的显示器。"}},
"A B C D".split(" "));
tbl.setDefaultRenderer(Object.class, new TableCellTextAreaRenderer());
add(new JScrollPane(tbl));
setSize(800, 200);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
} public static void main(String[] args) { new C(); }
}class TableCellTextAreaRenderer extends JTextArea implements TableCellRenderer {
public TableCellTextAreaRenderer() {
setLineWrap(true);
setWrapStyleWord(true);
} public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
// 计算当下行的最佳高度
int maxPreferredHeight = 0;
for (int i = 0; i < table.getColumnCount(); i++) {
setText("" + table.getValueAt(row, i));
setSize(table.getColumnModel().getColumn(column).getWidth(), 0);
maxPreferredHeight = Math.max(maxPreferredHeight, getPreferredSize().height);
} if (table.getRowHeight(row) != maxPreferredHeight) // 少了这行则处理器瞎忙
table.setRowHeight(row, maxPreferredHeight); setText(value == null ? "" : value.toString());
return this;
}
}
第二,参考一下我给的类TableCellRenderer的默认实现啊。里面对参数传来的selected等好多不同状态参数,写了好几个if