djsl6071 发表于 2013-2-4 19:45:37

JTable拖拽调整行高

<div style="padding-right: 5.4pt; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; width: 95%; padding-top: 4px;">import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.table.*;


/**
 * <p>
 * Title:
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: Copyright (c) 2004
 * </p>
 * <p>
 * Company:
 * </p>
 * 
 * @author not attributable
 * @version 1.0
 */

public class TableRowHeightFrame extends JFrame {

    Vector col = new Vector();
    DefaultTableModel dm = new DefaultTableModel(col, 0);
    JScrollPane jScrollPane1 = new JScrollPane();
    JTable table = new JTable(dm);

    public TableRowHeightFrame() {

        try {
            loadString();
            jbInit();
            loadata();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {        
        
        TableRowHeightFrame frm = new TableRowHeightFrame();

        frm.setBounds(400, 300, 600, 400);
        frm.setVisible(true);

    }

    void loadString() {
        col.add("id");
        col.add("name");
        col.add("age");
        col.add("address");

        dm.setColumnIdentifiers(col);
    }
    
    private void jbInit() throws Exception {
        this.getContentPane().add(jScrollPane1, BorderLayout.CENTER);
        jScrollPane1.getViewport().add(table, null);
        MouseAdapterListener listener = new MouseAdapterListener();
        table.addMouseListener(listener);
        table.addMouseMotionListener(listener);

    }

    void loadata() {
        dm.addRow(new Object[] { "1", "zt", "30", "wuxi" });
        dm.addRow(new Object[] { "2", "zt", "30", "wuxi" });
        dm.addRow(new Object[] { "3", "zt", "30", "wuxi" });
        dm.addRow(new Object[] { "4", "zt", "30", "wuxi" });
    }

    class MouseAdapterListener extends java.awt.event.MouseMotionAdapter
            implements MouseListener {
        int oldY = 0;
        int newY = 0;
        int row = 0;
        int oldHeight = 0;
        boolean drag = false;
        int increase = 0;

        public MouseAdapterListener() {

        }

        public void mouseMoved(MouseEvent e) {
            int onRow = table.rowAtPoint(e.getPoint());

            int height = 0;
            for (int i = 0; i <= onRow; i++) {
                height = height + table.getRowHeight(i);
            }

            if (height - e.getY() < 3) {
                drag = true;
                table.setCursor(new Cursor(Cursor.N_RESIZE_CURSOR));
            } else {
                drag = false;
                table.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }

        }

        public void mouseDragged(MouseEvent e) {
            if (drag) {
                int value = oldHeight + e.getY() - oldY;
                if (value < 30)
                    table.setRowHeight(row, 30);
                else                     
                    table.setRowHeight(row, oldHeight + e.getY() - oldY);
                
                table.setRowSelectionInterval(row, row);                
            }
        }

        public void mousePressed(MouseEvent e) {
            oldY = e.getY();
            row = table.rowAtPoint(e.getPoint());
            oldHeight = table.getRowHeight(row);
            table.setRowSelectionInterval(row, row);
        }

        public void mouseReleased(MouseEvent e) {
            newY = e.getY();
            table.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        }

        public void mouseClicked(MouseEvent e) {
        }

        public void mouseEntered(MouseEvent e) {
        }

        public void mouseExited(MouseEvent e) {
        }
    }
}
页: [1]
查看完整版本: JTable拖拽调整行高