PDA

View Full Version : قرار دادن jcheckbox در jtable



shirin_h
دوشنبه 15 بهمن 1386, 10:42 صبح
چطور می توان jcheckbox را در ستونی از jtable قرار داد؟

javaphantom
دوشنبه 15 بهمن 1386, 13:58 عصر
این کدی که من زدم خیلی خلاصه اگر نفهمیدی چی کار کردم بهم بگو تا بیشتر برات توضیح بدم
import java.awt.Component;

import javax.swing.*;


public class MyMain extends JFrame {

/**
*
*/
private static final long serialVersionUID = 1L;

private JTable jTable1;
private JScrollPane jScrollPane1;
private String[] column = {"Name","Family","Value"};
private Object[][] data = {{"myName","myFamily",true},
{"yourName","yourFamily",false}};


public MyMain() {
this.setBounds(new java.awt.Rectangle(300,300));
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.getContentPane().add(new JPanel().add(this.getJScrollPane1()));
this.setVisible(true);
}

private JTable getJTable1() {
if (this.jTable1 == null) {
this.jTable1 = new JTable(new javax.swing.table.DefaultTableModel(data,column){
/**
*
*/
private static final long serialVersionUID = 1L;

public boolean isCellEditable(int row, int column) {
if (column == 2) {
return true
}
return false;
}
});
this.jTable1.getColumn("Value").setCellEditor(new DefaultCellEditor(new JCheckBox()));
this.jTable1.getColumn("Value").setCellRenderer(new MyCellRenderer());


}
return this.jTable1;
}

private JScrollPane getJScrollPane1() {
if (this.jScrollPane1 == null) {
this.jScrollPane1 = new JScrollPane(getJTable1(),
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
}
return this.jScrollPane1;
}

public static void main(String[] s) {
new MyMain();
}
}

class MyCellRenderer implements javax.swing.table.TableCellRenderer {

private javax.swing.JCheckBox jCheckBox1;

@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Boolean) {
Boolean s = (Boolean)value ;
if (s.booleanValue()) {
this.getJCheckBox1().setSelected(true);
}
else {
this.getJCheckBox1().setSelected(false);
}
}
return getJCheckBox1();
}

private JCheckBox getJCheckBox1() {
if (jCheckBox1 == null) {
this.jCheckBox1 = new JCheckBox();
}
return this.jCheckBox1;
}

}

shirin_h
دوشنبه 15 بهمن 1386, 14:21 عصر
می شه فقط بگین چطور می شه در ستونی از checkbox استفاده کرد؟
من کدهای لازمه رو نوشتم به جز چیزی که می خوام


model1.addRow(new Object[] {new JCheckBox(),s2,s1});

این کد باعث می شه تو ستونی که باید توش checkbox باشه فقط یک سری نوشته توش بیاد.

javaphantom
دوشنبه 15 بهمن 1386, 14:28 عصر
ببیند شما باید اون ستونی که می خواهید در آن jcheckbox بیوفته هر بار باید render شود همچینن برای اینکه بتوانید از خود jchebox هم استفاده کنید برای edit کردن آن ستون باید از celledit استفاده کنید .
patternی که شما باید استفاده کنید اول adapter و بعد facade می باشد. که من همروی بصورت inner class درست کرده ام. کدی که من برایتان فرستاده ام را یک بار در محیطی اجرا کنید خواهشن اینتوری متوجه اشتباهتان خواهید شد.
به قسمتهای رنگی بیشتر توجه کن جوابت توی اوناست

rezaTavak
دوشنبه 15 بهمن 1386, 14:40 عصر
اگر داده ای از نوع Boolean باشد جاوا در ساخت جدول سریع برای آن checkbox در نظر می گیرد:
http://java.sun.com/docs/books/tutorial/uiswing/examples/components/SimpleTableDemoProject/src/components/SimpleTableDemo.java
راه دوم:
اول باید یک TableModel درست کنید که توی اون یک ستون checkbox باشه مثال:
توی این مثال combobox الست:
setCellEditor(new DefaultCellEditor(comboBox));
http://java.sun.com/docs/books/tutorial/uiswing/examples/components/TableRenderDemoProject/src/components/TableRenderDemo.java