2012-09-24 22 views
0

我正在嘗試調整jtable單元格內的滑塊大小。但是,當調整列標題大小時,我確實傳入了相關的代碼(第一列的getTableCellRendererComponent方法),但沒有任何反應(滑塊沒有調整大小?)。下面在jtable單元格中調整大小組件

是我的渲染器的代碼:

public class NavigationDataModelRenderer extends JLabel implements TableCellRenderer { 

    private JSlider slider = null; 
public NavigationDataModelRenderer() 
{ 
    super(); 
} 

public NavigationDataModelRenderer(int tolerance) 
{ 
    super(); 
    slider = new JSlider(tolerance * -3,tolerance *3); 
    slider.setPaintTicks(true); 
    slider.setMajorTickSpacing(tolerance); 
    slider.setUI(new SpreadSliderUI(slider)); 
} 


@Override 
public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) 
{ 
    Component comp = null; 
    if (table.getModel()!= null && table.getModel() instanceof NavigationDataModel) 
    { 
     NavigationDataModel model = (NavigationDataModel) table.getModel(); 
     Object o = table.getModel().getValueAt(row, column); 
     this.setText(o.toString()); 

     if (column == 1) 
     {//slider 
      if (model.getList() != null && model.getList().get(0)!= null && model.getList().get(row) != null) 
      { 
       slider.setValue((Integer)o); 
      } 
      comp = slider; 

      slider.setSize(table.getCellRect(row, column, false).getSize()); 
     } 
     else if (column == 2) 
     { 
      if (((Integer)o) == Integer.MAX_VALUE) 
      { 
       this.setText("Invalid"); 
      } 
     } 
     else 
     { 
      comp = this; 
     } 
    } 
    return comp; 
} 

}

感謝您的幫助。

回答

1

我遇到這個問題,因爲我使用BasicSliderUI作爲我的滑塊。現在在我的渲染器中,每次輸入getTableCellRendererComponent(...)並調整滑塊大小時,都會爲我的滑塊設置一個新的BasicSliderUI。

+0

一個新的UI代表應該足夠了。請編輯您的問題,以包含展示您描述的問題的[sscce](http://sscce.org/)。 – trashgod

+0

爲了使它更加通用和高效,您最好使用'.updateUI()',不需要爲每個單元格刷新(!)創建一個,具有相同的效果,並且適用於每個UI委託,而不必關心哪一個是。 –

1
public class GrowingCellRenderer extends DefaultTableCellRenderer 
    { 

    @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 
      int row, int column) 
     { 
     Component renderer = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

     //renderer.setBackground(Color.red); 
     renderer.setSize(getMinimumSize()); 
     table.setRowHeight(row, renderer.getHeight()); 
     return renderer; 
     } 
    } 

public static void main(String[] args) 
{ 
    GrowingCellRenderer testInstance = new GrowingCellRenderer(); 
    final Date dateProjectStart = new Date(); //Start the "project" today 
    final JTable jtab = new JTable(TableTools.createTestData(dateProjectStart)); 
    jtab.setDefaultRenderer(String.class, testInstance); 


} 
相關問題