public class Test1 {
public static void main(String[] args) {
Test1 t = new Test1();
t.init();
} private void init(){
JFrame frame = new JFrame();
JTable table = new JTable(new Object[][]{{1,2},{3,4}},new Object[]{"A","B"});
JComboBox jcb = new JComboBox();
jcb.addItem("1");
jcb.addItem("2");
table.setDefaultEditor(Object.class, new MyEditor(jcb));
table.setDefaultRenderer(Object.class, new MyRenderer());
frame.add(new JScrollPane(table));
frame.setVisible(true);
frame.setSize(400,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//===================
class MyRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if(row==1 && column==1){
JButton jtf = new JButton();
jtf.setText(value.toString());
return jtf;
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
class MyEditor extends DefaultCellEditor{
private JComboBox jcb;
public MyEditor(JComboBox comboBox) {
super(comboBox);
this.jcb = comboBox;
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected,
int row, int column) {
return this.jcb;
}
}
}
在getTableCellRendererComponent中为什么会调用两遍?
解决方案 »
- switch语句的怪异???
- 创建静态内部类的对象
- 请问java中有没有一种方法直接判断日期是否为合法的?
- 怎样选择多个音乐文件?现在只能播.au格式的,其他的呢?
- 怎么使用Resultset的isLast()方法?
- 我想在tomcat里建立一个虚拟主机,可是不成功,大家帮我看看
- applet在https协议下无法正常加载的问题
- java 将接收的数据存到数组 再从数组里取出来判断
- 哪位朋友能推荐本介绍java API类库的书?
- 请教各位大虾!java
- 哪里能弄到尚学堂的全套培训视频
- swing弹出Dialog,为了不出新明显的刷新Dialog感觉,dialog对象只有一个,无法去除第一个面板中组件最后第二个窗口的组件与之前同名面板中组件重叠
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;public class Test1 {
public static void main(String[] args) {
Test1 t = new Test1();
t.init();
} private void init(){
JFrame frame = new JFrame();
JTable table = new JTable(new Object[][]{{1,2},{3,4}},new Object[]{"A","B"});
JComboBox jcb = new JComboBox();
jcb.addItem("1");
jcb.addItem("2");
table.setDefaultEditor(Object.class, new MyEditor(jcb));
table.setDefaultRenderer(Object.class, new MyRenderer());
frame.add(new JScrollPane(table));
frame.setVisible(true);
frame.setSize(400,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//===================
class MyRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
System.out.println("CellRender调用.");
if(row==1 && column==1){
JButton jtf = new JButton();
jtf.setText(value.toString());
return jtf;
}
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
class MyEditor extends DefaultCellEditor{
private JComboBox jcb;
public MyEditor(JComboBox comboBox) {
super(comboBox);
this.jcb = comboBox;
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected,
int row, int column) {
System.out.println("Editor调用.");
return this.jcb;
}
}
}
Object value, boolean isSelected, boolean hasFocus, int row,
int column) 对同一个value为什么调用两次,我跟踪了一下,value的值分别为1 2 3 4 1 2 3 4,虽然只是4个值,但这个方法却调用了8次。请问为什么会这样?