[英]display resultset in jtable cell with multiline
I am pulling database records from MySql
, I am able to do this using the method below 我正在从
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();
}
}
it is working fine but I have a column that should have a multiple line or to wrap the words to increase the height of the cell. 它工作正常,但我有一栏应该有多行或换行以增加单元格的高度。
I am using java swing for 4 months now and I haven't seen/encountered advanced tricks to manipulate jtable
as I wanted it to perform. 我已经使用Java swing了4个月了,但我还没有看到/遇到
jtable
像我想要的那样操纵jtable
高级技巧。
I searched this site and found shortest way to do it from this link 我搜索了该网站,并从此链接中找到了最简单的方法
Auto adjust the height of rows in a JTable 自动调整JTable中行的高度
from camickr 来自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) {}
} }
It is really a nice code I think but I tried it and I noticed that the height increase from 16
(default row height) to 20
and so I still have one line in the cells. 我认为这确实是一个不错的代码,但是我尝试了一下,发现它的高度从
16
(默认行高)增加到20
,因此单元格中仍然有一行。
I called this method after the line 我下线后叫这个方法
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
updateRowHeights();
I will really appreciate any help that will put my feet on the right track to make this work for me.. 我将不胜感激任何帮助我步入正轨,为我完成这项工作的帮助。
Thanks in advance.. 提前致谢..
Default renderer/editor doesn't support multiple lines. 默认渲染器/编辑器不支持多行。 You can try to use custom
TableCellEditor
/ TableCellRenderer
. 您可以尝试使用自定义
TableCellEditor
/ TableCellRenderer
。 Examine next example with JTextArea
in table cell: 用表单元格中的
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;
}
}
}
Read more in tutorial 在教程中阅读更多内容
EDIT: 编辑:
Try next, seems it what you want; 接下来尝试,似乎您想要的;
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;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.