2013-08-05 2 views
0

Привет, я хочу показать новую строку в DefaultTableModel, но я не знаю, почему таблица не отображается. Как включить ввод? Если у меня есть строка «stss \ nsdd», она показывает «stsssdd», но я хочу новую строку.Default Table Model не показывает новые строки

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

Смежные вопросы