2013-08-05 83 views
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); 
    } 
} 
+0

如果您需要添加一個新行再看看這裏http://stackoverflow.com/questions/3549206/how-to-add-row-in-jtable – Tala

+0

不是新行。單元格中的新行 – Luffy

+0

@Luffy這是因爲'DefaultTableCellRenderer'擴展了'JLabel',它不處理'\ n'。你可以嘗試定義你自己的渲染器:) – NiziL

回答

0

我簡單的方式這樣做

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

我只使用字符串「 Hello World!
blahblahblah「 這只是一個例子。 JLabel可以解釋Html,它的工作原理除了我需要正確設置寬度外。 – Luffy

+0

你的意思是說你有模型中的html文本作爲數據? – kleopatra

+0

是的,我改爲html文本。 – Luffy

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鍵完成版本,以便它可用於在單元格中寫入新行。

+0

thx。我會嘗試使用 – Luffy

+1

+1作爲自定義渲染器,-1用於在每次調用時創建一個新組件 – kleopatra

+0

@kleopatra true,這就是爲什麼DefaultTableCellRenderer **是**也是JLabel,並且在其實現中設置其文本並簡單地返回'this' 。 – DSquare