是否可以在JTable中关闭自动换行?

时间:2011-03-06 17:50:32

标签: java html swing jtable word-wrap

我有一个JTable组件。在一列中,我插入HTML代码,如果此列中的行长于列宽,则文本将被包装。是否可以关闭换行?

@sandlex

public Object getValueAt(int row, int col) {
            return new String(
                    "<html>dgdfsgsdfg dfgdsfg sdfgs dfgsdfgsdfgsdfgsd afsdf asdfasd</html>");
        }

使用此功能检查您的代码。它将以几行显示文本 - 而不是一行。

1 个答案:

答案 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;
    }
}

此行不会被包裹,默认情况下使用

来保存JTextArea
setLineWrap(false)

问题是JTextArea无法正常显示html标签,我可以看到。所以你会以某种方式解决这个问题。您可以尝试使用JTextPane或其他可以处理标记的内容,并检查它是否具有包装属性。 或者,您可以手动计算字体指标,单元格宽度和修剪文本。