簡體   English   中英

默認表模型不顯示新行

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

嗨,我想在DefaultTableModel中顯示換行符,但我不知道為什么表不顯示enter。 如何啟用進入? 如果我有一個字符串“ 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);
    }
}

這是因為DefaultTableCellRenderer使用JLabel作為繪制單元格的組件。 標簽不能換行。 您必須使用自己的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;
    }

});

嘗試復制和粘貼幾行文字,以查看其工作原理。 現在,您可能想要更改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