在谷歌和stackoverflow中搜索后,并通过一些答案我仍然坚持这个问题。添加jcheckBox到Jtable使用GUI
我已经jtable,我从数据库(derpy-JDBC)填充它。 我想添加复选框以我的JTable使用GUI ..我有零钱列类型为布尔值,并添加这些行
JCheckBox checkBox = new javax.swing.JCheckBox();
jTable1.getColumn("status").setCellEditor(new DefaultCellEditor(checkBox));
,但它不能正常工作。 这个我尝试
public class showp1 extends javax.swing.JFrame implements ActionListener {
/** Creates new form showp1 */
public showp1() {
initComponents();
this.setLocationRelativeTo(null);
jButton1.addActionListener(this);
jButton2.addActionListener(this);
jTextField1.addActionListener(this);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jTextField1 = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"id", "area", "location", "status"
}
) {
Class[] types = new Class [] {
java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Boolean.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
jScrollPane1.setViewportView(jTable1);
jButton1.setText("jButton1");
jButton2.setText("jButton2");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 320, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jButton1)
.addGap(73, 73, 73)
.addComponent(jButton2)
.addGap(166, 166, 166))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))))
.addGap(10, 10, 10))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addGap(64, 64, 64))
);
pack();
}// </editor-fold>
private void formWindowOpened(java.awt.event.WindowEvent evt) {
myDbConnection dbconnect;
// TODO add your handling code here:
ArrayList<String> list = new ArrayList<String>();
try {
dbconnect = new myDbConnection();
ResultSet resultSet =null;
resultSet = dbconnect.excuteQuery("SELECT id, area,location, status1 FROM pledges ");
while (resultSet.next()){
list.add(resultSet.getString(1));
list.add(resultSet.getString(2));
list.add(resultSet.getString(3));
list.add(resultSet.getString(4));
}
} catch (Exception e) {
System.out.println(e);
}
Object[][] record;
int myListCount = list.size()/4;
record = new Object[myListCount][4];
int count = 1;
// JCheckBox checkBox = new javax.swing.JCheckBox();
for (int ii = 1; ii<=myListCount;ii++) {
for(int i=1;i<=4;i++){
record[ii-1][i-1] = list.get(count-1);
count++;
}
}
//TableColumnModel columnModel = jTable1.getColumnModel();
//columnModel.getColumn(3).setCellEditor(new DefaultCellEditor(checkBox));
jTable1.setModel(new DefaultTableModel(record, new String[]{"id", "area", "location","status1"}) {
@Override
public Class<?> getColumnClass(int columnIndex) {
if (getColumnName(columnIndex).equals("status1")) {
return Boolean.class;
}
return super.getColumnClass(columnIndex);
}
});
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new showp1().setVisible(true);
}
});
} }
对不起,这个可怕的代码^^” 由于事先
好吧,试着检查我的帖子,了解如何在JTable的每一行添加JToggleButton。在我的示例代码中,我放置了一个布尔类型的列。它告诉你,如果你想在布尔类型的列的每一行上有“JCheckBox”,你不需要特别渲染'jCheckBox'因为默认情况下'DefaultTableModel'会自动将这样的列渲染为'JCheckBox'类模型http://stackoverflow.com/questions/5334444/customized-jtable-look/5334562#5334562 – eee 2011-04-21 01:31:44
@eee while your example is创意 - 这是完全反对摆动的风;-) – kleopatra 2011-04-30 13:46:42
请学习和使用java命名约定 – kleopatra 2011-04-30 13:47:14