にその最後の位置に懸濁されているので、私はJTable
とJButton
の問題を持っています。 ボタンを押した後、テーブル内の最後の位置に懸濁させます。 以下のコードを実行してみてください。JTableでJButtonを修正するには?ボタンを押した後、テーブル
Firs私は「4を開く」ボタンをクリックし、「閉じる4」ボタンで閉じる。その後 Iオープン行「オープン3」ボタン「4」は、この問題を解決するためにどのように...そこにまだ
ですか?
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventObject;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.*;
import javax.swing.table.*;
class MyRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasValue, int row, int column) {
DefaultTableModel model =((DefaultTableModel)table.getModel());
if (model.getValueAt(row,0)!=null && column==0) {
String DATA= "Close "+(model.getValueAt(row,0)).toString();
JButton b = new JButton(DATA);
return b;
}
else return null;
}
}
class MyEditor implements TableCellEditor {
public Component getTableCellEditorComponent(final JTable table, Object value,
boolean isSelected, final int row, int column){
final DefaultTableModel model =((DefaultTableModel)table.getModel());
if (model.getValueAt(row,0)!=null && column==0){
String text =model.getValueAt(row,0).toString();
final JButton b = new JButton(text);
ActionListener AKCJA = new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(model.getValueAt(row+1,0)==null)
while(model.getValueAt(row+1,0)==null)
((DefaultTableModel)table.getModel()).removeRow(row+1);
}
};
b.addActionListener(AKCJA);
return b;
}
else return null;
}
public void removeCellEditorListener(CellEditorListener cl) { }
public void addCellEditorListener(CellEditorListener cl) { }
public boolean shouldSelectCell(EventObject ev) { return true; }
public boolean isCellEditable(EventObject ev) {return true;}
public Object getCellEditorValue() { return null;}
public boolean stopCellEditing() { return true;}
public void cancelCellEditing() { }
}
@SuppressWarnings("serial")
class MyJpanel extends JPanel{
public MyJpanel(){
super(new GridLayout(1,0));
final DefaultTableModel model = new DefaultTableModel();
model.addColumn("Col1");
model.addColumn("Col2");
for(int kk=0;kk<8;kk++)
model.addRow(new Object[]{kk, "Open "+kk});
final JTable table = new JTable(model);
TableColumn td = table.getColumnModel().getColumn(0);
MyRenderer mojRenderer = new MyRenderer();
td.setCellRenderer(mojRenderer);
MyEditor mojEditor = new MyEditor();
td.setCellEditor(mojEditor);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent event) {
int viewRow = table.getSelectedRow();
if(event.getValueIsAdjusting())
if((model.getValueAt(viewRow,0))!=null)
for(int i=0;i<2;i++)
model.insertRow(viewRow+i+1,new Object[]{null, "b"});
}
}
);
add(table);
}
}
public class Test{
public static void main(String[] args)
{
final JFrame ramka=new JFrame("xxx");
ramka.getContentPane().add(new MyJpanel());
ramka.setSize(500,200);
ramka.setVisible(true);
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
エディタの実装は無効である:それが終了すると、そのリスナーに通知_必ず_。 DefaultCellEditorのソースを見て、それを実行する方法を知ってください。また、a)決してgetXXComponentの新しい編集またはレンダリングコンポーネントを作成することはありません。b)エディタでモデルを直接変更しないでください。それはその仕事ではありません。c)Java命名規約を学び、それに固執してください。 – kleopatra