如何在JTable中添加JList,请写个例子 我的思路是模仿DefaultCellEditor和DefaultTableCellRenderer写一个适配JList的CellEditor和CellRenderer但是源码的结构对我来说太复杂了,望达人能点拨点拨,有例子最好,不胜感激. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 jtable.setModel(new javax.swing.table.DefaultTableModel( myArray, tableList ) { private static final long serialVersionUID = 1L; boolean[] canEdit = new boolean[] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}; public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit[columnIndex]; } });myArray 二维 tableList 一维 请问您想表达什么意思?好像跟JList无关吧,能说详细些么,谢谢 没什么困难的吧。renderer和editor核心都是要改写一个getXXXComponent方法。返回一个组件,然后根据这个组建描绘渲染器或者编辑器的样式。如果可以编辑,编辑器可能需要getEditorValue方法。大体上就是这些。没什么的啊? ...我知道要改写..可就是不懂的怎么改写,我很疑惑的是getXXXComnent是什么时候调用的,是JTABLE要渲染的时候和确定单元格的编辑组件时候自动调用的还是需要人为的调用来返回指定的组件....可以麻烦您写个JLIST的例子吗?谢谢了. 这样啊~~强烈建议debug跟踪一下。这样可以很清晰的知道,哪些方法究竟是在哪里调用的 不清楚我理解的对不对,帮你临时写了个,还有点bug,你补补public class TestTableFrame extends JFrame { private JTable table; public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { TestTableFrame frame = new TestTableFrame(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public TestTableFrame() { super(); setBounds(100, 100, 500, 375); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); table = new JTable(new TestModel()); table.getColumnModel().getColumn(0).setCellEditor(new ListEditor()); scrollPane.setViewportView(table); // } private class TestModel extends AbstractTableModel { private String[][] data = new String[][] { { "a", "b", "c" }, { "a", "b", "c" }, { "a", "b", "c" } }; @Override public int getColumnCount() { return data[0].length; } @Override public int getRowCount() { return data.length; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return data[rowIndex][columnIndex]; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { data[rowIndex][columnIndex] = (String) aValue; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } } private class ListEditor extends AbstractCellEditor implements TableCellEditor { private JList list; private JScrollPane scroll = new JScrollPane(); public ListEditor() { this(new String[]{"a", "b", "c", "d"}); scroll.setViewportView(list); } public ListEditor(String data[]) { this.list = new JList(data); } public boolean isCellEditable(EventObject anEvent) { return true; } public Object getCellEditorValue() { return list.getSelectedValue(); } public Component getTableCellEditorComponent(JTable jtable, Object object, boolean bool, int row, int col) { list.setSelectedValue(object, true); return scroll; } }} java随机修改文件中的一行 采集程序 内存溢出 。各位老大帮忙来看看啊。 方法重载必须在同一个类中吗? 碰见了一个很奇怪的语句,请高手指点! Font的构造器问题 求执行方法的时间差 串口,串口!!!请高手帮忙啊!!在线 多线程问题中:对象的“锁标志”和class的“锁标志”是相互独立性问题 在tomcat4.04下,怎么连接到oracal数据库,要用什么驱动? .net发布的webService程序,java做客户端遇见问题。 请教java多线程死机问题 already loaded in another classloader
jtable.setModel(new javax.swing.table.DefaultTableModel(
myArray, tableList ) {
private static final long serialVersionUID = 1L;
boolean[] canEdit = new boolean[] { false, false, false,
false, false, false, false, false,
false, false, false,
false, false, false, false, false, false, false};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit[columnIndex];
}
});myArray 二维
tableList 一维
renderer和editor核心都是要改写一个getXXXComponent方法。返回一个组件,然后根据这个组建描绘渲染器或者编辑器的样式。如果可以编辑,编辑器可能需要getEditorValue方法。大体上就是这些。没什么的啊?
...我知道要改写..可就是不懂的怎么改写,我很疑惑的是getXXXComnent是什么时候调用的,是JTABLE要渲染的时候和确定单元格的编辑组件时候自动调用的还是需要人为的调用来返回指定的组件....可以麻烦您写个JLIST的例子吗?谢谢了.
强烈建议debug跟踪一下。这样可以很清晰的知道,哪些方法究竟是在哪里调用的
public class TestTableFrame extends JFrame { private JTable table; public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestTableFrame frame = new TestTableFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} public TestTableFrame() {
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER); table = new JTable(new TestModel());
table.getColumnModel().getColumn(0).setCellEditor(new ListEditor());
scrollPane.setViewportView(table);
//
} private class TestModel extends AbstractTableModel { private String[][] data = new String[][] { { "a", "b", "c" },
{ "a", "b", "c" }, { "a", "b", "c" } }; @Override
public int getColumnCount() {
return data[0].length;
} @Override
public int getRowCount() {
return data.length;
} @Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
} @Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
data[rowIndex][columnIndex] = (String) aValue;
} @Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
} @Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
} private class ListEditor extends AbstractCellEditor implements
TableCellEditor {
private JList list;
private JScrollPane scroll = new JScrollPane();
public ListEditor() {
this(new String[]{"a", "b", "c", "d"});
scroll.setViewportView(list);
} public ListEditor(String data[]) {
this.list = new JList(data);
}
public boolean isCellEditable(EventObject anEvent) {
return true;
} public Object getCellEditorValue() {
return list.getSelectedValue();
} public Component getTableCellEditorComponent(JTable jtable,
Object object, boolean bool, int row, int col) {
list.setSelectedValue(object, true);
return scroll;
}
}
}