Можно ли отключить перенос слов в JTable? - PullRequest
3 голосов
/ 06 марта 2011

У меня есть компонент JTable.В один столбец я вставляю HTML-код, и если строка в этом столбце длиннее ширины столбца, текст переносится.Можно ли отключить перенос?

@ sandlex

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

Проверьте свой код с помощью этой функции.Текст будет отображаться в несколько строк, а не в одну.

1 Ответ

2 голосов
/ 07 марта 2011

Можно ли взглянуть на ваш код?

Например, в этом простейшем примере ничего не упаковано:

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 или что-то еще, что может иметь дело с тегами и проверить, есть ли у этого свойства обертывания. В качестве альтернативы вы можете вычислить метрики шрифта, ширину ячейки и обрезать текст вручную.

...