Hallöli,
also ich habe mir einen Vokabeltrainer programmiert. Diese Einträge können sowohl auf deutsch als auch auf z.B. französisch etwas länger werden. Leider bestimmt immer die zweite Spalte (also "deutsch") die Höhe der Zelle, obwohl ich sie im CellRenderer auf das Maximum setze aus aktuell (was ggf. schon durch "französisch" erhöht wurde) und PreferredSize.
Hier mal Bild und Code:
wie ihr seht, wird in der ersten Zeile der französische Eintrag wegen dem kurzen deutschen Eintrag abgeschnitten
Und der CellRenderer:
Dazu muss ich noch sagen, dass ich es mal probiert habe, in der if-Klammer die beiden PreferredSize().height mit der lokalen height-Variable zu ersetzen und "<" statt "!=", aber dann sind im obigen Bild beide Zeilen zu kurz
[CODE lang="java" title="CellRenderer"]import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;
class WordWrapCellRenderer extends JTextArea implements TableCellRenderer
{
private static final long serialVersionUID = 1L;
WordWrapCellRenderer()
{
setLineWrap(true);
setWrapStyleWord(true);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
setText(value.toString());
int height = Math.max(getHeight(), getPreferredSize().height);
setSize(table.getColumnModel().getColumn(column).getWidth(), height);
if (table.getRowHeight(row) != getPreferredSize().height)
{
table.setRowHeight(row, getPreferredSize().height);
}
return this;
}
}[/CODE]
und in der Main:
[CODE lang="java" title="Aufruf in der Main"]vokabelTabelle = new JTable(vokabelArray, vokabelHeader);
vokabelTabelle.getColumnModel().getColumn(0).setCellRenderer(new WordWrapCellRenderer());
vokabelTabelle.getColumnModel().getColumn(1).setCellRenderer(new WordWrapCellRenderer());
vokabelTabelle.setShowGrid(true);
vokabelTabelle.setCellSelectionEnabled(false);
vokabelTabelle.setRowSelectionAllowed(true);[/CODE]
Schon mal gracias wie Mr Bean auf französisch sagen würde
Grüße
Michael
also ich habe mir einen Vokabeltrainer programmiert. Diese Einträge können sowohl auf deutsch als auch auf z.B. französisch etwas länger werden. Leider bestimmt immer die zweite Spalte (also "deutsch") die Höhe der Zelle, obwohl ich sie im CellRenderer auf das Maximum setze aus aktuell (was ggf. schon durch "französisch" erhöht wurde) und PreferredSize.
Hier mal Bild und Code:
wie ihr seht, wird in der ersten Zeile der französische Eintrag wegen dem kurzen deutschen Eintrag abgeschnitten
Und der CellRenderer:
Dazu muss ich noch sagen, dass ich es mal probiert habe, in der if-Klammer die beiden PreferredSize().height mit der lokalen height-Variable zu ersetzen und "<" statt "!=", aber dann sind im obigen Bild beide Zeilen zu kurz
[CODE lang="java" title="CellRenderer"]import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellRenderer;
class WordWrapCellRenderer extends JTextArea implements TableCellRenderer
{
private static final long serialVersionUID = 1L;
WordWrapCellRenderer()
{
setLineWrap(true);
setWrapStyleWord(true);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
setText(value.toString());
int height = Math.max(getHeight(), getPreferredSize().height);
setSize(table.getColumnModel().getColumn(column).getWidth(), height);
if (table.getRowHeight(row) != getPreferredSize().height)
{
table.setRowHeight(row, getPreferredSize().height);
}
return this;
}
}[/CODE]
und in der Main:
[CODE lang="java" title="Aufruf in der Main"]vokabelTabelle = new JTable(vokabelArray, vokabelHeader);
vokabelTabelle.getColumnModel().getColumn(0).setCellRenderer(new WordWrapCellRenderer());
vokabelTabelle.getColumnModel().getColumn(1).setCellRenderer(new WordWrapCellRenderer());
vokabelTabelle.setShowGrid(true);
vokabelTabelle.setCellSelectionEnabled(false);
vokabelTabelle.setRowSelectionAllowed(true);[/CODE]
Schon mal gracias wie Mr Bean auf französisch sagen würde
Grüße
Michael