我的要求是,我必须在单元格中添加一个表格单元格渲染器,其中包含从数据库和按钮获取的数据。
当我在数据中双击该单元格时,该单元格应该是可编辑的,以便用户可以更改数据。 当我双击按钮时,会再次打开一个对话框,当我单击该对话框中的“确定”按钮时,该对话框将接受来自用户的数据,数据应填充在上一个表格单元格中。 目前,我能够渲染数据和图像,当我点击按钮时,它会打开另一个对话框并接受用户的数据。
我的问题:
目前下面的图片没有显示文字,但是对于其他单元格,我能够显示。
带有文字和按钮的 JTable
单元格
jTableTestCases.setModel(new javax.swing.table.DefaultTableModel( new Object [] [] {
},
new String [] {
"Select", "Status", "ID", "Title", "Config", "Tester", "TestCase Name"
}
) {
Class[] types = new Class [] {
java.lang.Boolean.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
true, false, false, false, false, false, true
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
}); static class MyTableEditor extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {
JPanel jpanel;
JLabel label;
JButton button;
MyTableEditor() {
label = new JLabel();
button = new JButton("Click Me!!!");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Hi" );
}
});
GridLayout gridLayout = new GridLayout(0,2);
jpanel = new JPanel();
jpanel.setLayout(gridLayout);
jpanel.setBorder(new EmptyBorder(0, 10, 0, 10));
jpanel.add(label);
jpanel.add(button);
}
@Override
public Object getCellEditorValue() {
return null;
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if(null!=value)
label.setText(value.toString());
jpanel.setBackground(table.getSelectionBackground());
return jpanel;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if(null!=value)
label.setText(value.toString());
if(isSelected){
jpanel.setBackground(table.getSelectionBackground());
}else{
jpanel.setBackground(table.getBackground());
}
return jpanel;
}
}jTableTestCases.getColumn("TestCase Name").setCellRenderer(new MyTableEditor());
jTableTestCases.getColumn("TestCase Name").setCellEditor(new MyTableEditor());
答案 0 :(得分:1)
,用户在文本框中输入一个值,只要单击确定按钮,输入的值就会显示在按钮旁边的表格单元格中,我应该能够读取值
为什么要创建此弹出窗口?
JTable的设计使您可以直接在单元格中输入文本。您可以开始输入,文本将会更新。或者您可以双击单元格,将显示编辑器。
但是如果你真的想要显示弹出窗口,那么你可以查看Table Popup Editor。
每当您单击单元格时,使用F2键或键入将显示JDialog的字符,您可以输入文本。