所以,不用做任何特别的事情,我可以让<html>...<br>...</html> 工作得很好......
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
DefaultTableModel model = new DefaultTableModel(0, 1);
model.addRow(new String[]{
"<html>My teacher took my iPod.<br>She said they had a rule;<br>I couldn't bring it into class<br>or even to the school.</html>"
});
model.addRow(new String[]{
"<html>She said she would return it;<br>I'd have it back that day.<br>But then she tried my headphones on<br>and gave a click on Play.</html>"
});
model.addRow(new String[]{
"<html>She looked a little startled,<br>"
+ "but after just a while<br>"
+ "she made sure we were occupied<br>"
+ "and cracked a wicked smile.<br>"
});
model.addRow(new String[]{
"<html>Her body started swaying.<br>"
+ "Her toes began to tap.<br>"
+ "She started grooving in her seat<br>"
+ "and rocking to the rap.</html>"
});
model.addRow(new String[]{
"<html>My teacher said she changed her mind.<br>"
+ "She thinks it's now okay<br>"
+ "to bring my iPod into class.<br>"
+ "She takes it every day.</html>"
});
setLayout(new GridBagLayout());
JTable table = new JTable(model);
table.setRowHeight(75);
add(new JScrollPane(table));
}
}
}
也许您的代码中还有其他内容,您没有向我们展示,这导致了问题...
更新了“动态”示例
这超出了最初的问题,但是,TableModel 表示它支持的数据,它为JTable 提供了显示它的结构。
因此,给定一堆“断开”的值,TableModel 将根据您的要求将它们“缝合”在一起。
当每行代表一个元素时,以下示例将前一首诗的每一行简单地拆分为一个数组。
然后将其再次包装,因此诗歌的每个部分都是一系列行...
String data[][] = {
{"My teacher took my iPod.", "She said they had a rule;", "I couldn't bring it into class", "or even to the school."},
{"She said she would return it;", "I'd have it back that day.", "But then she tried my headphones on", "and gave a click on Play."},
etc...
然后该示例使用自定义TableModel,当询问单元格的值时,它采用给定的“部分”并从每一行构建一个String,包装成一个基于<html> 的String .
此外,您需要单击“添加”按钮添加每个新行才能显示
public class TestPane extends JPanel {
private MyTableModel model;
private int index = 0;
public TestPane() {
String data[][] = {
{"My teacher took my iPod.", "She said they had a rule;", "I couldn't bring it into class", "or even to the school."},
{"She said she would return it;", "I'd have it back that day.", "But then she tried my headphones on", "and gave a click on Play."},
{"She looked a little startled,", "but after just a while", "she made sure we were occupied", "and cracked a wicked smile.", ""},
{"Her body started swaying.", "Her toes began to tap.", "She started grooving in her seat", "and rocking to the rap."},
{"My teacher said she changed her mind.", "She thinks it's now okay", "to bring my iPod into class.", "She takes it every day."}
};
setLayout(new BorderLayout());
model = new MyTableModel();
JTable table = new JTable(model);
table.setRowHeight(75);
add(new JScrollPane(table));
JButton add = new JButton("Add");
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (index < data.length) {
model.addRow(data[index]);
}
index++;
if (index >= data.length) {
add.setEnabled(false);
}
}
});
add(add, BorderLayout.SOUTH);
}
public class MyTableModel extends AbstractTableModel {
private List<String[]> rowData;
public MyTableModel() {
rowData = new ArrayList<>(25);
}
public void addRow(String[] data) {
rowData.add(data);
fireTableRowsInserted(rowData.size() - 1, rowData.size() - 1);
}
@Override
public int getColumnCount() {
return 1;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object value = null;
switch (columnIndex) {
case 0:
String[] data = rowData.get(rowIndex);
StringJoiner joiner = new StringJoiner("<br>", "<html>", "</html>");
for (String text : data) {
joiner.add(text);
}
value = joiner.toString();
break;
}
return value;
}
@Override
public int getRowCount() {
return rowData.size();
}
}
}
查看How to Use Tables了解更多详情