我有一个JTable组件。在一列中,我插入HTML代码,如果此列中的行长于列宽,则文本将被包装。是否可以关闭换行?
@sandlex
public Object getValueAt(int row, int col) {
return new String(
"<html>dgdfsgsdfg dfgdsfg sdfgs dfgsdfgsdfgsdfgsd afsdf asdfasd</html>");
}
使用此功能检查您的代码。它将以几行显示文本 - 而不是一行。
答案 0 :(得分:2)
是否可以查看您的代码?
例如,在这个最简单的例子中,没有包装:
public class TableTest {
public static void main(String[] args) {
JFrame frm = new JFrame();
TableModel dataModel = new AbstractTableModel() {
public int getColumnCount() {
return 10;
}
public int getRowCount() {
return 10;
}
public Object getValueAt(int row, int col) {
return new String(
"<a href=\"127.0.0.1\">row*col*1000000000</a>");
}
};
JTable table = new JTable(dataModel);
table.getColumnModel().getColumn(2).setMaxWidth(120);
table.getColumnModel().getColumn(2).setPreferredWidth(120);
table.getColumnModel().getColumn(2).setMinWidth(120);
frm.getContentPane().add(table);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setPreferredSize(new Dimension(300, 300));
frm.pack();
frm.setVisible(true);
}
}
已编辑@latata 您可以尝试创建自己的CellRenderer并使用它来应用所需的列:
table.getColumnModel().getColumn(0).setCellRenderer(new NonWrappedCellRenderer());
渲染器可能如下所示:
class NonWrappedCellRenderer extends JTextArea implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(
JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
this.setText((String)value);
this.setLineWrap(false);
return this;
}
}
此行不会被包裹,默认情况下使用
来保存JTextAreasetLineWrap(false)
问题是JTextArea无法正常显示html标签,我可以看到。所以你会以某种方式解决这个问题。您可以尝试使用JTextPane或其他可以处理标记的内容,并检查它是否具有包装属性。 或者,您可以手动计算字体指标,单元格宽度和修剪文本。