簡體   English   中英

用多行在jtable單元格中顯示結果集

[英]display resultset in jtable cell with multiline

我正在從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像我想要的那樣操縱jtable高級技巧。

我搜索了該網站,並從此鏈接中找到了最簡單的方法

自動調整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;
        }

    }

}

在此處輸入圖片說明

教程中閱讀更多內容

編輯:

接下來嘗試,似乎您想要的;

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM