JTable中列内的java Jcheckbox
我想创建一个表,在该表中,每次添加新行时,也会在特定列中添加一个新复选框。我已经完成了我的研究,但我仍然找不到正确的答案,有时我发现很难理解其中的一些说明 这就是我的问题:
我在表格的列(“e”)中添加了一个复选框,但没有显示。该复选框仅在我单击时显示
package app.ui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.util.List;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableColumn;
import javax.swing.DefaultCellEditor;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.SwingConstants;
import app.dao.item.impl.ReadItemFromDB;
import app.model.Item;
public class Inventory {
private JFrame inventoryframe;
private JTable table;
private JTextField textField;
private JCheckBox checkbox;
/**
* Launch the application.
*/
public void InventoryWindow() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Inventory window = new Inventory();
window.inventoryframe.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Inventory() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
inventoryframe = new JFrame();
inventoryframe.setExtendedState(JFrame.MAXIMIZED_BOTH);
inventoryframe.getContentPane().setBackground(new Color(153, 204, 102));
inventoryframe.getContentPane().setForeground(new Color(255, 255, 255));
inventoryframe.getContentPane().setPreferredSize(new Dimension(1365, 747));
inventoryframe.pack();
inventoryframe.getContentPane().setLayout(null);
JLabel lblInventory = new JLabel("Inventory Management");
lblInventory.setBounds(56, 32, 234, 27);
lblInventory.setFont(new Font("Tahoma", Font.PLAIN, 22));
inventoryframe.getContentPane().add(lblInventory);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(56, 130, 479, 249);
inventoryframe.getContentPane().add(scrollPane);
table = new JTable();
table.setShowVerticalLines(false);
table.setShowHorizontalLines(false);
table.setShowGrid(false);
table.setFillsViewportHeight(true);
table.setModel(new DefaultTableModel(
new Object[][] {
},
new String[] {
"t", "e"
}
));
scrollPane.setViewportView(table);
checkbox = new JCheckBox("borrow");
checkbox.setHorizontalAlignment(SwingConstants.CENTER);
checkbox.setBounds(360, 63, 97, 23);
TableColumn sportColumn = table.getColumnModel().getColumn(1);
sportColumn.setCellEditor(new DefaultCellEditor(checkbox));
doIt();
}
public void doIt(){
DefaultTableModel dtm = (DefaultTableModel) table.getModel();
dtm.getDataVector().removeAllElements();
dtm.getColumnClass(0);
ReadItemFromDB myReader = new ReadItemFromDB();
List<Item> newItemList = myReader.showItems();
@Override
public Class getColumnClass() {
return getValueAt(0, 1).getClass();
}
for (Item myNewItems : newItemList) {
Object[] rowData = new Object[1];
rowData[0] =myNewItems.getItemID();
dtm.addRow(rowData);
}
table.updateUI();
}
/*public Boolean getColumnClass(){
dtm.getValueAt(0, 1).getClass();
return null;
}*/
}
# 1 楼答案
不需要自定义渲染器或编辑器。只需
@Override
在表的模型中getColumnClass()
使用DefaultTableModel
并对该列使用Boolean
类型下面是一个运行示例,这里是重要的部分
这是完整的代码
更新
这是你的密码。查看
initialize()
方法,我在其中注释了您的一些代码,并在下面添加了我的代码。我还去掉了doit()
方法。此外,还应该pack()
作为方法的结尾,并且setVisible()
。我还添加了一个main
方法,因此它是可运行的更新2
真的,这应该是一个完全不同的问题,但我今天感觉很慷慨
使用这个测试类。运行它。当你点击按钮时,它会打开
Inventory
类。您可能没有在按钮的actionPerformed
中实例化Inventory
。确保该类文件与Inventory
类文件位于同一个包中。只需运行下面的类