java jtable 行_java – 如何在JTable行内自动换行

我有一个简单的JTable,它显示来自另一个JTable的行的详细信息(以列格式).这很好用.但是,有时连续的文本很长,因此用户最终不得不滚动而不是整齐.

如何将文本连续包装并允许行高更改以显示其中的所有文本.

这是代码:

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

@Override

public void valueChanged(ListSelectionEvent e) {

if (!e.getValueIsAdjusting()) {

int selectedRow = table.getSelectedRow();

DefaultTableModel newModel = new DefaultTableModel();

String rowName = "Row: " + selectedRow;

newModel.setColumnIdentifiers(new Object[]{rowName});

for (int i = 0; i < table.getModel().getColumnCount(); i++) {

newModel.addRow(new Object[]{table.getModel().getValueAt(selectedRow, i)});

}

JTable newTable = new JTable(newModel) {

/**

*

*/

private static final long serialVersionUID = 1L;

@Override

public Dimension getPreferredScrollableViewportSize() {

return new Dimension(140, 240);

}

};

newTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

newTable.setRowHeight(14, 30);

TableColumnAdjuster tcanewTable = new TableColumnAdjuster(newTable);

tcanewTable.setColumnHeaderIncluded(true);

tcanewTable.setColumnDataIncluded(true);

tcanewTable.setOnlyAdjustLarger( true );

tcanewTable.setDynamicAdjustment( true );

tcanewTable.adjustColumns();

// Apply any custom renderers and editors

JOptionPane.showMessageDialog(frame, new JScrollPane(newTable),

rowName, JOptionPane.PLAIN_MESSAGE);

}

}

});

解决方法:

您可以通过将JTextArea用作表中该列的TableCellRenderer来完成此操作.例如:

static class WordWrapCellRenderer extends JTextArea implements TableCellRenderer {

WordWrapCellRenderer() {

setLineWrap(true);

setWrapStyleWord(true);

}

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

setText(value.toString());

setSize(table.getColumnModel().getColumn(column).getWidth(), getPreferredSize().height);

if (table.getRowHeight(row) != getPreferredSize().height) {

table.setRowHeight(row, getPreferredSize().height);

}

return this;

}

}

要在表中使用WordWrapCellRenderer:

table.getColumnModel().getColumn(columnIndex).setCellRenderer(new WordWrapCellRenderer());

标签:java,swing,jtable

来源: https://codeday.me/bug/20190527/1166568.html

实现 JTable 数据的动态更新可以通过以下步骤完成: 1. 创建 JTable 对象并设置表格模型。 2. 创建一个数据模型并将其与表格模型绑定。 3. 创建一个数据源,可以是数据库或者其他数据来源。 4. 将数据源中的数据填充到数据模型中。 5. 将数据模型中的数据更新到表格模型中。 6. 调用 JTable 的 repaint() 方法刷新表格。 下面是一个简单的示例代码,演示了如何在 JTable 中实现数据动态更新: ```java import javax.swing.*; import javax.swing.table.DefaultTableModel; public class DynamicTableDemo extends JFrame { private DefaultTableModel model; private JTable table; public DynamicTableDemo() { // 创建表格模型 model = new DefaultTableModel(new String[]{"ID", "Name", "Age"}, 0); // 创建 JTable 并设置表格模型 table = new JTable(model); // 将 JTable 添加到窗口 add(new JScrollPane(table)); // 添加数据 addData(1, "Alice", 25); addData(2, "Bob", 30); addData(3, "Charlie", 35); // 设置窗口参数 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setLocationRelativeTo(null); setVisible(true); } private void addData(int id, String name, int age) { // 添加数据到数据模型中 model.addRow(new Object[]{id, name, age}); // 刷新 JTable table.repaint(); } public static void main(String[] args) { new DynamicTableDemo(); } } ``` 在上面的示例中,我们创建了一个 JTable 并设置了表格模型。然后通过调用 addData() 方法向表格中添加数据。在 addData() 方法中,我们首先向数据模型中添加数据,然后调用 JTable 的 repaint() 方法刷新表格。这样就可以实现 JTable 数据的动态更新了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值