0

嗨,我想在 DefaultTableModel 中显示新行,但我不知道为什么表不显示输入。如何启用输入?如果我有一个字符串“stss\nsdd”,它会显示“stsssdd”,但我想要换行。

public class Main extends JFrame {

    DefaultTableModel model = new DefaultTableModel(
            new Object[][]{{"some", "text"}, {"any", "text"},
                {"even", "more"}, {"text", "str\nings"},
                {"and", "other"}, {"text", "values"}}, new Object[]{
                "Column 1", "Column 2"});

    public Main() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
        JTable table = new JTable(model);
        table.setRowHeight(40);
        getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
        pack();
    }

    public static void main(String arg[]) {
        new Main().setVisible(true);
    }
}
4

2 回答 2

1

这是因为 DefaultTableCellRenderer 使用 JLabel 作为组件来绘制单元格。并且标签不能有新行。您必须使用自己的 TableCellRenderer,它使用接受新行的 TextComponent,例如 JTextArea。

final JTextArea textArea = new JTextArea(); // or static field
//...
table.setDefaultRenderer(Object.class, new TableCellRenderer()
{
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        textArea.setText(value.toString());
        return textArea;
    }

});

尝试复制和粘贴几行文本,看看它是否有效。现在您可能想要更改 cellEditor 并阻止 Enter 键完成编辑,以便可以使用它在单元格中写入新行。

于 2013-08-05T11:32:31.567 回答
0

我以简单的方式做到了这一点

JLabel l = new JLabel("<html>Hello World!<br>blahblahblah</html>", SwingConstants.CENTER)
于 2013-08-05T12:46:04.067 回答