gpt4 book ai didi

java - 在 JTable 上使用游标调整单个行高

转载 作者:行者123 更新时间:2023-12-04 03:14:22 25 4
gpt4 key购买 nike

我有一个 JTable,我想在上面使用鼠标光标调整行高(就像在 excel 中一样)。您能否建议我如何完成这项任务。

最佳答案

很久以前在 Sun/Oracle 论坛上找到这段代码...

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);
}
}
}

关于java - 在 JTable 上使用游标调整单个行高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4387995/

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