Hallo, ich beschäftige mich zum ersten Mal mit Jtable und möchte für Zellen mit viel Text eine ScrollPane darstellen.
dazu habe ich einen CellRenderer als auch einen CellEditor implementiert. Leider funktioniert das ganze nicht wie gedacht.
Die JScrollPane wird zwar angezeigt aber sobald ich scrollen möchte verschwindet der Inhalt.
Könnt ihr mir hier weiterhelfen? Danke im Voraus
[CODE lang="java" title="JPanel in Table Cell"]/**
*
* Class used to renderer the Table Cells
*
*/
public class CellRenderer extends DefaultTableCellRenderer implements TableCellRenderer, TableCellEditor
{
/**
*
*/
JTable table;
CompareData model;
Color selectedRowColor = new Color(255, 153, 153);
private static String val;
private static Table<Integer, Integer, JScrollPane> table2 = HashBasedTable.create();
private int clickedRow = -1;
public CellRenderer(CompareData model, JTable table) {
this.model = model;
this.table = table;
}
public CellRenderer() {
super();
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
paintBorder(row,comp);
setToolTip(table, row, column);
JScrollPane dummy = new JScrollPane(comp,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
if (!table2.contains(row, column)) {
table2.put(row, column, dummy);
}
return table2.get(row, column);
}
//tooltip
private void setToolTip(JTable table, int pRow, int pColumn) {
int row = table.convertRowIndexToModel(pRow);
int column = table.convertColumnIndexToModel(pColumn);
setToolTipText((String)table.getModel().getValueAt(row, column));
}
private void paintBorder(int rowIndex, Component comp) {
if (this.clickedRow == rowIndex) {
Border border = new LineBorder(selectedRowColor, 2, false);
JComponent jc = (JComponent)comp;
jc.setBorder(border);
}
}
@Override
public Object getCellEditorValue() {
// TODO Auto-generated method stub
return this.val;
}
@Override
public boolean isCellEditable(EventObject anEvent) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean shouldSelectCell(EventObject anEvent) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean stopCellEditing() {
// TODO Auto-generated method stub
return false;
}
@Override
public void cancelCellEditing() {
// TODO Auto-generated method stub
}
@Override
public void addCellEditorListener(CellEditorListener l) {
// TODO Auto-generated method stub
}
@Override
public void removeCellEditorListener(CellEditorListener l) {
// TODO Auto-generated method stub
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
this.val = (String)value;
return table2.get(row, column);
}
/*
* Don't need to implement this method unless your table's editable.
*/
public boolean isCellEditable(int row, int col) {
return true;
}
[/CODE]
dazu habe ich einen CellRenderer als auch einen CellEditor implementiert. Leider funktioniert das ganze nicht wie gedacht.
Die JScrollPane wird zwar angezeigt aber sobald ich scrollen möchte verschwindet der Inhalt.
Könnt ihr mir hier weiterhelfen? Danke im Voraus
[CODE lang="java" title="JPanel in Table Cell"]/**
*
* Class used to renderer the Table Cells
*
*/
public class CellRenderer extends DefaultTableCellRenderer implements TableCellRenderer, TableCellEditor
{
/**
*
*/
JTable table;
CompareData model;
Color selectedRowColor = new Color(255, 153, 153);
private static String val;
private static Table<Integer, Integer, JScrollPane> table2 = HashBasedTable.create();
private int clickedRow = -1;
public CellRenderer(CompareData model, JTable table) {
this.model = model;
this.table = table;
}
public CellRenderer() {
super();
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component comp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
paintBorder(row,comp);
setToolTip(table, row, column);
JScrollPane dummy = new JScrollPane(comp,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
if (!table2.contains(row, column)) {
table2.put(row, column, dummy);
}
return table2.get(row, column);
}
//tooltip
private void setToolTip(JTable table, int pRow, int pColumn) {
int row = table.convertRowIndexToModel(pRow);
int column = table.convertColumnIndexToModel(pColumn);
setToolTipText((String)table.getModel().getValueAt(row, column));
}
private void paintBorder(int rowIndex, Component comp) {
if (this.clickedRow == rowIndex) {
Border border = new LineBorder(selectedRowColor, 2, false);
JComponent jc = (JComponent)comp;
jc.setBorder(border);
}
}
@Override
public Object getCellEditorValue() {
// TODO Auto-generated method stub
return this.val;
}
@Override
public boolean isCellEditable(EventObject anEvent) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean shouldSelectCell(EventObject anEvent) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean stopCellEditing() {
// TODO Auto-generated method stub
return false;
}
@Override
public void cancelCellEditing() {
// TODO Auto-generated method stub
}
@Override
public void addCellEditorListener(CellEditorListener l) {
// TODO Auto-generated method stub
}
@Override
public void removeCellEditorListener(CellEditorListener l) {
// TODO Auto-generated method stub
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
this.val = (String)value;
return table2.get(row, column);
}
/*
* Don't need to implement this method unless your table's editable.
*/
public boolean isCellEditable(int row, int col) {
return true;
}
[/CODE]