checkbox不必new CheckBox(),只要自己定义一个Boolean[],里面都是
Boolean对象,true表示选中,false表示不选中,
调用((DefaultTableModel)table.getModel()).setDataVector()
把它放进去。
构造table时getColumnClass()方法这么写:
public Class getColumnClass(int col) {
Vector v = (Vector)dataVector.elementAt(0);
return v.elementAt(col).getClass();
}
Boolean对象,true表示选中,false表示不选中,
调用((DefaultTableModel)table.getModel()).setDataVector()
把它放进去。
构造table时getColumnClass()方法这么写:
public Class getColumnClass(int col) {
Vector v = (Vector)dataVector.elementAt(0);
return v.elementAt(col).getClass();
}
还有我的jtable宽度固定了,每列的宽度可以调整,但调整时其他列的宽度不变,所以出现
水平滚动条,我想不要水平滚动条,每列的宽度可以调整,但是所有列的宽度=jtable宽度
请问有简便的方法吗?
列的宽度可以通过 table.getColumn(ColumnNames[i]).setPreferredWidth(lengh[i]);
来动态的设。
我要的是
jtable宽度=500
如果有5列,当把一列的宽度变大,其他4列宽度变小,总宽度和为500
必须重新设置吗,有没有简单的属性设置一下就行了
还有那如果是radiobutton等其他控件 如何处理啊
在指定的行列返回你想要的控件。
我自己写了个最简单的table,列的宽度变化好像没有影响整个table的宽度嘛。
那原因我知道了
jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);原来我设置的是off
你能不能帮我实现getTableCellEditorComponent()方法,还有我写了选择事件,请问如何获取所在列的值啊
jg_table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
JOptionPane.showMessageDialog(null,"asdfasdfasdfasdfasdfasdfasdf") ;
}
});
麻烦你了,初学,帮帮忙,你要加分也可以
有些乱,不明白的地方尽管问好了。
关于TableCellRenderer和TableCellEditor建议你找本书好好看看,最好能够结合
MVC模式,好好研究会很有收获的哦 :)
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;public class TestTable {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame();
myFrame.setVisible(true);
}
}class MyFrame extends JFrame {
private JPanel m_basePanel;
private JScrollPane m_scrollPanel;
private MyTable m_table;
public MyFrame() {
init();
}
public void init() {
// create table
m_table = new MyTable();
initColumn();
// create scroll panel
m_scrollPanel = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
m_scrollPanel.setViewportView(m_table);
// create base panel
m_basePanel = new JPanel();
m_basePanel.setLayout(new BorderLayout());
m_basePanel.add(m_scrollPanel);
// create frame
setSize(500, 400);
// add Listener
getContentPane().add(m_basePanel);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
m_table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (m_table.getSelectedRow() != -1) {
m_table.changeModel(m_table.getSelectedRow());
m_table.revalidate();
m_table.repaint();
}
}
});
}
public void initColumn() {
m_table.getColumn("Column1").setCellEditor(new Column1CellEditor());
m_table.getColumn("Column2").setCellRenderer(new Column2CellRenderer());
m_table.getColumn("Column2").setCellEditor(new Column2CellEditor());
}
}
abstract class AbstractCellEditor implements TableCellEditor {
public Object value;
protected EventListenerList listenerList = new EventListenerList();
protected ChangeEvent changeEvent = null;
protected int clickCountToStart = 1;
public Object getCellEditorValue() {
return value;
}
public void setCellEditorValue(Object value) {
this.value = value;
}
public boolean isCellEditable(EventObject anEvent) {
if (anEvent instanceof MouseEvent) {
if (((MouseEvent)anEvent).getClickCount() < clickCountToStart) {
return false;
} else {
return true;
}
}
return false;
}
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
public boolean stopCellEditing() {
fireEditingStopped();
return true;
}
public void cancelCellEditing() {
fireEditingCanceled();
}
public void addCellEditorListener(CellEditorListener l) {
listenerList.add(CellEditorListener.class, l);
}
public void removeCellEditorListener(CellEditorListener l) {
listenerList.remove(CellEditorListener.class, l);
}
protected void fireEditingStopped() {
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2) {
if (listeners[i] == CellEditorListener.class) {
if (changeEvent == null) {
changeEvent = new ChangeEvent(this);
}
((CellEditorListener)listeners[i + 1]).editingStopped(changeEvent);
}
}
}
protected void fireEditingCanceled() {
Object[] listeners = listenerList.getListenerList();
for (int i = listeners.length - 2; i >= 0; i -= 2) {
if (listeners[i] == CellEditorListener.class) {
if (changeEvent == null) {
changeEvent = new ChangeEvent(this);
}
((CellEditorListener)listeners[i + 1]).editingCanceled(changeEvent);
}
}
}
}
class Column1CellEditor extends AbstractCellEditor {
public Object value;
JComboBox c;
public Column1CellEditor() {
c = new JComboBox();
c.addItem("1");
c.addItem("2");
c.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setCellEditorValue((String)c.getSelectedItem());
stopCellEditing();
}
});
}
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int col) {
if (row == 2) {
return c;
}
return null;
}
public boolean stopCellEditing() {
return super.stopCellEditing();
}
public Object getCellEditorValue() {
return value;
}
public void setCellEditorValue(Object value) {
this.value = value;
}
}class Column2CellEditor extends AbstractCellEditor {
public Object value;
JComboBox c;
public Column2CellEditor() {
c = new JComboBox();
c.addItem("a");
c.addItem("b");
}
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
if (row == 2 && column == 1) {
return c;
}
return null;
}
public boolean stopCellEditing() {
return super.stopCellEditing();
}
public Object getCellEditorValue() {
return value;
}
public void setCellEditorValue(Object value) {
this.value = value;
}
}class Column2CellRenderer extends JPanel implements TableCellRenderer {
JRadioButton r;
JComboBox c;
public Column2CellRenderer() {
setLayout(new BorderLayout());
r = new JRadioButton();
c = new JComboBox();
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int col) {
removeAll();
if ((row == 0 || row == 1) && col == 1) {
Boolean b = (Boolean)value;
add(r, BorderLayout.CENTER);
if (b.booleanValue()) {
r.setSelected(true);
} else {
r.setSelected(false);
}
return this;
}
return null;
}
}class MyTable extends JTable {
MyModel tableModel;
public MyTable() {
init();
}
public boolean isCellEditable(int row, int col) {
return true;
}
public boolean stopCellEditing(boolean isChangeFrame) {
return true;
}
public void init() {
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableModel = new MyModel();
setModel(tableModel);
}
public void changeModel(int row) {
tableModel.updateRadio(row);
}
}class MyModel extends AbstractTableModel {
String[] columnNames = {"Column1", "Column2"};
Object[][] data = {{"radio1", Boolean.FALSE}, {"radio2", Boolean.TRUE}, {"1", Boolean.TRUE}};
public Object getValueAt(int row, int col) {
return data[row][col];
}
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
public int getRowCount() {
return data.length;
}
public int getColumnCount() {
return columnNames.length;
}
public String getColumnName(int col) {
return columnNames[col];
}
public Class getColumnClass(int col) {
return data[0][col].getClass();
}
public void updateRadio(int selRow) {
if (selRow > 1) return;
for (int i = 0; i < getRowCount(); i++) {
data[i][1] = new Boolean(i == selRow);
}
}
}