简体   繁体   English

默认表模型不显示新行

[英]Default Table Model doesn't show new lines

Hi i want to show new line in DefaultTableModel but i dont know why table doesn't show enters. 嗨,我想在DefaultTableModel中显示换行符,但我不知道为什么表不显示enter。 How to enable enters? 如何启用进入? If i have a string "stss\\nsdd" it shows "stsssdd" but i want new line. 如果我有一个字符串“ 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);
    }
}

That's because the DefaultTableCellRenderer uses JLabel as the component to paint the cells. 这是因为DefaultTableCellRenderer使用JLabel作为绘制单元格的组件。 And labels can't have new lines. 标签不能换行。 You have to use your own TableCellRenderer that uses a TextComponent that accepts new lines, for example JTextArea. 您必须使用自己的TableCellRenderer,该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;
    }

});

Try copying and pasting a text of a couple of lines, to see it work. 尝试复制和粘贴几行文字,以查看其工作原理。 Now you might want to cahnge the cellEditor and prevent the Enter key from finalizing the edition so it can be used to write new lines in the cells. 现在,您可能想要更改cellEditor并阻止Enter键完成版本,以便可以将其用于在单元格中写入新行。

我以简单的方式做到了

JLabel l = new JLabel("<html>Hello World!<br>blahblahblah</html>", SwingConstants.CENTER)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM