2012-04-03 13 views
0

にその最後の位置に懸濁されているので、私はJTableJButtonの問題を持っています。 ボタンを押した後、テーブル内の最後の位置に懸濁させます。 以下のコードを実行してみてください。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); 
      } 
     } 
+1

エディタの実装は無効である:それが終了すると、そのリスナーに通知_必ず_。 DefaultCellEditorのソースを見て、それを実行する方法を知ってください。また、a)決してgetXXComponentの新しい編集またはレンダリングコンポーネントを作成することはありません。b)エディタでモデルを直接変更しないでください。それはその仕事ではありません。c)Java命名規約を学び、それに固執してください。 – kleopatra

答えて

0

溶液ボタンActionListener()前例table.removeAll();ために使用してJtable容器のボタンを削除しています。

問題を見つけることは非常に便利でした: Component[] Komponenty = table.getComponents()。 あなたは、Array Komponentyを印刷し、削除または非表示にするのを忘れコンポーネントを発見したことができます。

+0

:-)残念ながら、答えは完全に間違っています(その代わりに症状を診断して病気を治している) – kleopatra

関連する問題