gpt4 book ai didi

java - 在 jtable 单元格中显示多行结果集

转载 作者:行者123 更新时间:2023-11-29 07:50:51 27 4
gpt4 key购买 nike

我正在从 MySql 中提取数据库记录,我可以使用下面的方法来执行此操作

private void txt_clientNameKeyReleased(java.awt.event.KeyEvent evt) {                                           

String sql = "Select client_id as 'Client ID', name_lastName as 'Full Name', case_number as 'Case #', hearing_date as 'Hearing Date', rtc_mtc as 'RTC/MTC', place as 'Place', status as 'Status', note as 'Notes', billing as 'Billed' from hearing_history where name_lastName like '%"+ txt_clientName.getText() +"%' ";

try{
if(conn==null){

conn = ConnectDB.ConDB();
}else{
conn = ConnectDB.ConDB();
}

pst = conn.prepareStatement(sql);
rs = pst.executeQuery();

jTable1.setModel(DbUtils.resultSetToTableModel(rs));

}catch(Exception e){
JOptionPane.showMessageDialog(null, e);
}finally {
close();

}
}

它工作正常,但我有一个列应该有多行或将单词换行以增加单元格的高度。

我现在使用 java swing 已有 4 个月了,但我还没有看到/遇到过按照我希望的方式操作 jtable 的高级技巧。

我搜索了该网站并找到了从此链接执行此操作的最短方法

Auto adjust the height of rows in a JTable

来自 camickr

private void updateRowHeights()
{
try
{
for (int row = 0; row < table.getRowCount(); row++)
{
int rowHeight = table.getRowHeight();

for (int column = 0; column < table.getColumnCount(); column++)
{
Component comp = table.prepareRenderer(table.getCellRenderer(row, column), row, column);
rowHeight = Math.max(rowHeight, comp.getPreferredSize().height);
}

table.setRowHeight(row, rowHeight);
}
}
catch(ClassCastException e) {}

}

我认为这确实是一个很好的代码,但我尝试了一下,发现高度从 16 (默认行高)增加到 20,所以我仍然有单元格中的一行。

我在该行之后调用了这个方法

        jTable1.setModel(DbUtils.resultSetToTableModel(rs));            
updateRowHeights();

我将非常感谢任何帮助我走上正确的道路,使这项工作适合我..

提前致谢..

最佳答案

默认渲染器/编辑器不支持多行。您可以尝试使用自定义TableCellEditor/TableCellRenderer。使用表格单元格中的 JTextArea 检查下一个示例:

import java.awt.Component;

import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;

public class TestFrame extends JFrame {

public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}

private void init() {
JTable t = new JTable(new Object[][]{{"a\n\rb","1"},{"a\n\rb","2"}},new Object[]{1,2});

add(new JScrollPane(t));
t.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaColumn());
t.getColumnModel().getColumn(0).setCellEditor(new JTextAreaColumn());
t.setRowHeight(50);
}


public static void main(String args[]) {
new TestFrame();
}


private class JTextAreaColumn extends AbstractCellEditor implements TableCellRenderer,TableCellEditor {

private JTextArea area = new JTextArea();
private JScrollPane pane = new JScrollPane(area);

@Override
public Object getCellEditorValue() {
return area.getText();
}

@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
area.setText(value == null ? "" : value.toString());
return pane;
}

private void setColor(boolean isSelected, JTable table) {
area.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
area.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
}

@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
area.setText(value == null ? "" : value.toString());
setColor(isSelected,table);
return pane;
}

}

}

enter image description here

了解更多信息tutorial

编辑:

接下来尝试一下,似乎是你想要的;

import java.awt.Component;

import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;

public class TestFrame extends JFrame {

private JTable t;


public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}

private void init() {
t = new JTable(new Object[][]{{"a\n\rb","1"},{"a\n\rb\n\rb\n\rb\n\rb","2"}},new Object[]{1,2});

add(new JScrollPane(t));
t.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaColumn());
JTextAreaColumn editor = new JTextAreaColumn();
editor.addCellEditorListener(getEditorListener());
t.getColumnModel().getColumn(0).setCellEditor(editor);
updateRowHeights(t);
}

private CellEditorListener getEditorListener() {
return new CellEditorListener() {

@Override
public void editingStopped(ChangeEvent e) {
updateRowHeights(t);
}

@Override
public void editingCanceled(ChangeEvent e) {
updateRowHeights(t);
}
};
}

private void updateRowHeights(JTable table) {
try {
for (int row = 0; row < table.getRowCount(); row++) {
int rowHeight = table.getRowHeight();

for (int column = 0; column < table.getColumnCount(); column++) {
Component comp = table.prepareRenderer(
table.getCellRenderer(row, column), row, column);
rowHeight = Math.max(rowHeight,
comp.getPreferredSize().height);
}

table.setRowHeight(row, rowHeight);
}
} catch (ClassCastException e) {
}
}

public static void main(String args[]) {
new TestFrame();
}


private class JTextAreaColumn extends AbstractCellEditor implements TableCellRenderer,TableCellEditor {

private JTextArea area = new JTextArea();
private JScrollPane pane = new JScrollPane(area);

@Override
public Object getCellEditorValue() {
return area.getText();
}

@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
area.setText(value == null ? "" : value.toString());
return pane;
}

private void setColor(boolean isSelected, JTable table) {
area.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
area.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
}

@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
area.setText(value == null ? "" : value.toString());
setColor(isSelected,table);
return area;
}

}

}

关于java - 在 jtable 单元格中显示多行结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26450790/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com