2014-09-16 2 views
1

Я искал ответ довольно долго, но большинство случаев отличалось от моего.добавить JButton после последней строки JTable

Я хочу добавить JButton непосредственно после последней строки таблицы, таблица динамическая и находится внутри scrollPane.

на все остальные вопросы ответили кнопкой, добавленной после scrollPane в BorderLayout.South, чего я не хочу.

благодаря

enter image description here

обновил фотографию, чтобы лучше представлять его, кнопка должна появиться внутри ScrollPane только после последней строки.

ответ

2

Узнайте больше о разных LayoutManager's. Используйте надлежащий менеджер или их комбинацию.

Вот простой пример:

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 


public class TestFrame extends JFrame { 

    public TestFrame() { 
     init(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    private void init() { 
     JTable t = new JTable(3,3); 
     add(new JScrollPane(t)); 
     JPanel btns = new JPanel(new FlowLayout(FlowLayout.LEFT,0,0)); 
     JButton jButton = new JButton("here"); 
     btns.add(jButton); 
     add(btns,BorderLayout.SOUTH); 
    } 


    public static void main(String args[]) { 
     new TestFrame(); 
    } 

} 

enter image description here

EDIT:

Попробуйте использовать следующий пример:

import java.awt.Component; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.DefaultCellEditor; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.JTextField; 
import javax.swing.table.DefaultTableCellRenderer; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.TableCellEditor; 
import javax.swing.table.TableCellRenderer; 


public class TestFrame extends JFrame { 

    public TestFrame() { 
     init(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    private void init() { 
     JTable t = new JTable(new DefaultTableModel(3,3){ 
      @Override 
      public boolean isCellEditable(int row, int column) { 
       if(row == getRowCount()-1 && column != 0){ 
        return false; 
       } 
       return super.isCellEditable(row, column); 
      } 
     }); 
     t.setGridColor(t.getTableHeader().getBackground()); 
     add(new JScrollPane(t)); 
     for(int i=0;i<3;i++) 
      t.getColumnModel().getColumn(i).setCellRenderer(getDummyRenderer()); 
     t.getColumnModel().getColumn(0).setCellEditor(getDummyEditor()); 
    } 


    private TableCellEditor getDummyEditor() { 
     return new DummyEditor(); 
    } 

    private TableCellRenderer getDummyRenderer() { 
     return new DefaultTableCellRenderer() { 

      @Override 
      public Component getTableCellRendererComponent(JTable table, Object value, 
        boolean isSelected, boolean hasFocus, int row, int column) { 
       if(row == table.getRowCount()-1){ 
        if(column == 0){ 
         return new JButton("dummy"); 
        } else { 
         JLabel jLabel = new JLabel(""); 
         jLabel.setOpaque(true); 
         jLabel.setBorder(null); 
         return jLabel; 
        } 
       } else { 
        Component tableCellRendererComponent = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
        return tableCellRendererComponent; 
       } 
      } 
     }; 
    } 

    public static void main(String args[]) { 
     new TestFrame(); 
    } 

    private class DummyEditor extends DefaultCellEditor implements TableCellEditor{ 

     private JButton btn = new JButton("dummy"); 

     public DummyEditor(){ 
      super(new JTextField()); 
      btn.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        System.out.println("clicked"); 
       } 
      }); 
     } 

     @Override 
     public Component getTableCellEditorComponent(JTable table, 
       Object value, boolean isSelected, int row, int column) { 
      return row == table.getRowCount()-1 ? btn : super.getTableCellEditorComponent(table, value, isSelected, row, column); 
     } 

    } 

} 

enter image description here

+1

+1 Лучше ответить на мой вопрос, чем мой (я был ленив :-) –

+0

тот же ответ, еще несколько строк) – alex2410

+0

спасибо, гораздо ближе, но все еще есть что-то, я хотел кнопку точно после последней строки, рядом с нет пробел. – Ramin

Смежные вопросы