【问题标题】:How to resize row height of JXTable如何调整 JXTable 的行高
【发布时间】:2014-06-06 08:13:56
【问题描述】:

我正在编写一段代码来显示从数据库中检索到的 JXTable 中的图像,一切正常。我已经修复了该表的行高,现在我想使用鼠标动态更改行高。

如何实现这一点。

我知道 setRowHeight(100) 会很有用,我如何将值动态传递给它。

谢谢你

【问题讨论】:

  • @MadProgrammer:不确定您的意思,但 JTable 可以通过使用为特定行设置高度的JTable.setRowHeight(int, int) 轻松应对每一行的不同高度
  • @a_horse_with_no_name ...也许我在想JList...
  • @a_horse_with_no_name...你的权利,但我想用鼠标改变它,它应该像我们改变 Jtable/Jxtable 列调整大小的方式

标签: java swing swingx preferredsize jxtable


【解决方案1】:

这是我前段时间在网上找到的一些代码:

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.MouseInputAdapter;
import java.awt.*;
import java.awt.event.MouseEvent;

public class TableRowResizer extends MouseInputAdapter
{
    public static Cursor resizeCursor = Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR);

    private int mouseYOffset, resizingRow;
    private Cursor otherCursor = resizeCursor;
    private JTable table;

    public TableRowResizer(JTable table){
        this.table = table;
        table.addMouseListener(this);
        table.addMouseMotionListener(this);
    }

    private int getResizingRow(Point p){
        return getResizingRow(p, table.rowAtPoint(p));
    }

    private int getResizingRow(Point p, int row){
        if(row == -1){
            return -1;
        }
        int col = table.columnAtPoint(p);
        if(col==-1)
            return -1;
        Rectangle r = table.getCellRect(row, col, true);
        r.grow(0, -3);
        if(r.contains(p))
            return -1;

        int midPoint = r.y + r.height / 2;
        int rowIndex = (p.y < midPoint) ? row - 1 : row;

        return rowIndex;
    }

    public void mousePressed(MouseEvent e){
        Point p = e.getPoint();

        resizingRow = getResizingRow(p);
        mouseYOffset = p.y - table.getRowHeight(resizingRow);
    }

    private void swapCursor(){
        Cursor tmp = table.getCursor();
        table.setCursor(otherCursor);
        otherCursor = tmp;
    }

    public void mouseMoved(MouseEvent e){
        if((getResizingRow(e.getPoint())>=0)
           != (table.getCursor() == resizeCursor)){
            swapCursor();
        }
    }

    public void mouseDragged(MouseEvent e){
        int mouseY = e.getY();

        if(resizingRow >= 0){
            int newHeight = mouseY - mouseYOffset;
            if(newHeight > 0)
            {
                table.setRowHeight(resizingRow, newHeight);
            }
        }
    }
}

您可以使用以下方法将其添加到您的表中:

new TableRowResizer( table );

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    相关资源
    最近更新 更多