我正在尝试调整jtable单元格内的滑块。但是在调整列标题的大小时,我会传入相关的代码(第一列的方法getTableCellRendererComponent),但没有任何反应(滑块没有调整大小?)。
下面的是我的渲染器的代码:
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;
}
}
感谢您的帮助。
答案 0 :(得分:1)
我遇到这个问题,因为我的滑块使用BasicSliderUI。现在在我的渲染器中,每次输入getTableCellRendererComponent(...)并调整滑块大小时,我都为我的滑块设置了一个新的BasicSliderUI。
答案 1 :(得分: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);
}