我知道如何嵌入checkbox,combobox,但是去无法嵌入JList,我采用继承TableCellRenderer的办法:
class TableCellTextAreaRenderer implements javax.swing.table.TableCellRenderer
{ private JScrollPane jPanel;
private JList jList;
public TableCellTextAreaRenderer() {
jPanel=new JScrollPane();
jList=new JList();
jPanel.add(jList);
jPanel.setPreferredSize(new Dimension(50, 50));
} public java.awt.Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
if(row==1&&column==1){
jList.setListData(new String[]{"test1","test2"});
}else{
jList.setListData(new String[]{"hehe1","hehe2"});
}
return jPanel;
}
}但是JList却显示不出来。
是不是因为渲染器中的getTableCellRendererComponent不能返回JSCrollPane类型啊?我把JSCrollPane对象替换成JPanel:
private JPanel jPanel;
jPanel=new JPanel();
可以在JTable中显示出列表,但是却完全没有一个JList该有的行为(比如选择的高亮效果等等),整个就是一个Lable了。请问这是怎么回事?我的目的就是想想Table中嵌入一个列表(不是下拉列表)。
class TableCellTextAreaRenderer implements javax.swing.table.TableCellRenderer
{ private JScrollPane jPanel;
private JList jList;
public TableCellTextAreaRenderer() {
jPanel=new JScrollPane();
jList=new JList();
jPanel.add(jList);
jPanel.setPreferredSize(new Dimension(50, 50));
} public java.awt.Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
if(row==1&&column==1){
jList.setListData(new String[]{"test1","test2"});
}else{
jList.setListData(new String[]{"hehe1","hehe2"});
}
return jPanel;
}
}但是JList却显示不出来。
是不是因为渲染器中的getTableCellRendererComponent不能返回JSCrollPane类型啊?我把JSCrollPane对象替换成JPanel:
private JPanel jPanel;
jPanel=new JPanel();
可以在JTable中显示出列表,但是却完全没有一个JList该有的行为(比如选择的高亮效果等等),整个就是一个Lable了。请问这是怎么回事?我的目的就是想想Table中嵌入一个列表(不是下拉列表)。
我都是用這個TableCellEditor
我也沒試過嵌入jlist的~
這個是api里面的解釋
This interface defines the method any object that would like to be an editor of values for components such as JListBox, JComboBox, JTree, or JTable needs to implement.
import java.util.Vector;import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;public class TableDemo2 extends JFrame { private JScrollPane scrollPanel;
private JTable table;
private MyTableModel tableModel; public TableDemo2() {
scrollPanel = new JScrollPane();
String[] tableHead = { "Namehh", "CheckBox", "ComboBox" };
tableModel = new MyTableModel(tableHead, 0);
tableModel.addRow(new Object[] { "001", new Boolean(false), "" });
tableModel.addRow(new Object[] { "002", new Boolean(false), "" });
tableModel.addRow(new Object[] { "003", new Boolean(false), "" });
tableModel.addRow(new Object[] { "004", new Boolean(true), "" });
tableModel.addRow(new Object[] { "005", new Boolean(true), "" });
table = new HzSortTable();
table.setModel(tableModel); TableColumn comBoxColumn1 = table.getColumnModel().getColumn(1);
JCheckBox checkBox = new JCheckBox();
comBoxColumn1.setCellEditor(new DefaultCellEditor(checkBox)); TableColumn comBoxColumn2 = table.getColumnModel().getColumn(2);
JComboBox comboBox = new JComboBox();
comboBox.addItem("BeiJing");
comboBox.addItem("HangZhou");
comboBox.addItem("ZhouShan");
comboBox.addItem("NingBo");
comboBox.addItem("ShangHai");
comboBox.addItem("NanJing");
comBoxColumn2.setCellEditor(new DefaultCellEditor(comboBox)); table.repaint();
scrollPanel.setViewportView(table); this.getContentPane().add(scrollPanel);
this.setSize(new Dimension(500, 500));
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);
} class MyTableModel extends DefaultTableModel { public MyTableModel(String[] tableHead, int column){
super(tableHead, column);
}
public MyTableModel(Vector data, Vector columns) {
super(data, columns);
} public boolean isCellEditable(int row, int column) {
//设置 单元格 能否编辑
return true;
} public Class<?> getColumnClass(int columnIndex) { if (columnIndex == 1) { // 设置第几列 是 checkbox
return Boolean.class;
}
return Object.class;
} } public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TableDemo2();
}
});
}
}
还需要实现editor,这样list的单元格才能有list的行为