-
JTable整行拖动 3
1. 当我选中JTabel的某一行时,拖动这个行的时候,整行数据都一起拖动,随便都可以拖到某一行中间。
2. 还有就是,几行一起拖动,当我给定一范围,假定是3行,以选中某一行为起始点,一行为结束点,这几行能整个拖动。。。
怎么实现呢?2009年6月23日 22:43
4个答案 按时间排序 按投票排序
-
这是一个行拖拽的实例,非常好,你看看
package com.test; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class TableFrame extends JFrame { public TableFrame(){ setLayout(new BorderLayout()); DefaultTableModel dm = new DefaultTableModel(new String[]{"index","content"}, 0){ @Override public Object getValueAt(int row, int column) { if(column==0){ return row; } return super.getValueAt(row, column); } }; final JTable table=new JTable(dm); table.setUI(new DragDropRowTableUI()); for(int i=0;i<10;i++){ dm.addRow(new Object[]{i,i+"string"}); } add(new JScrollPane(table),BorderLayout.CENTER); JButton btn=new JButton("hello"); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(table.getSelectedRow());; System.out.println(table.getValueAt(4, 1)); } }); add(btn,BorderLayout.SOUTH); this.setSize(600,400); setVisible(true); } public static void main(String[] args) { new TableFrame(); } }
package com.test; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.MouseEvent; import javax.swing.JComponent; import javax.swing.event.MouseInputListener; import javax.swing.plaf.basic.BasicTableUI; import javax.swing.table.TableModel; public class DragDropRowTableUI extends BasicTableUI { private boolean draggingRow = false; private int startDragPoint; private int dyOffset; protected MouseInputListener createMouseInputListener() { return new DragDropRowMouseInputHandler(); } public void paint(Graphics g, JComponent c) { super.paint(g, c); if (draggingRow) { g.setColor(table.getParent().getBackground()); Rectangle cellRect = table.getCellRect(table.getSelectedRow(), 0, false); g.copyArea(cellRect.x, cellRect.y, table.getWidth(), table.getRowHeight(), cellRect.x, dyOffset); if (dyOffset < 0) { g.fillRect(cellRect.x, cellRect.y + (table.getRowHeight() + dyOffset), table.getWidth(), (dyOffset * -1)); } else { g.fillRect(cellRect.x, cellRect.y, table.getWidth(), dyOffset); } } } class DragDropRowMouseInputHandler extends MouseInputHandler { public void mousePressed(MouseEvent e) { super.mousePressed(e); startDragPoint = (int)e.getPoint().getY(); } public void mouseDragged(MouseEvent e) { int fromRow = table.getSelectedRow(); if (fromRow >= 0) { draggingRow = true; int rowHeight = table.getRowHeight(); int middleOfSelectedRow = (rowHeight * fromRow) + (rowHeight / 2); int toRow = -1; int yMousePoint = (int)e.getPoint().getY(); if (yMousePoint < (middleOfSelectedRow - rowHeight)) { // Move row up toRow = fromRow - 1; } else if (yMousePoint > (middleOfSelectedRow + rowHeight)) { // Move row down toRow = fromRow + 1; } if (toRow >= 0 && toRow < table.getRowCount()) { TableModel model = table.getModel(); for (int i = 0; i < model.getColumnCount(); i++) { Object fromValue = model.getValueAt(fromRow, i); Object toValue = model.getValueAt(toRow, i); model.setValueAt(toValue, fromRow, i); model.setValueAt(fromValue, toRow, i); } table.setRowSelectionInterval(toRow, toRow); startDragPoint = yMousePoint; } dyOffset = (startDragPoint - yMousePoint) * -1; System.out.println("dyOffset:" + dyOffset); table.repaint(); } } public void mouseReleased(MouseEvent e){ super.mouseReleased(e); draggingRow = false; table.repaint(); } } }
2014年7月04日 11:54
-
怎么都没有人来回答下叻== @@"
我想是可以通过鼠标事件来实现的,MousePressed()选中行数,MouseDrag()拖动行(在这里具体写,一时半会儿也迷惑着。。。),MouseReless() :确定行落下的位置是移动在哪一行插入,后面两个事件里面的逻辑怎么处理,需要各位大虾们指点一下哈。。 谢谢!2009年7月03日 10:09
-
JTable允许拖拽,但是也仅仅是允许列拖动,行拖动的话,好像没有原生的支持,要实现这种功能的话,lz需要自己写代码了。可以参照J2SE-tutorial里面的《Trail: Drag and Drop》章节。
2009年6月24日 14:50
相关推荐
本文将详细介绍如何通过一种简单的方法,为`JTable`添加行间拖拽功能,而无需对已有代码进行大规模修改或实现复杂的DnD接口。 首先,理解`JTable`的基本结构是至关重要的。`JTable`由`TableModel`、`...
JTable 拖动行 移动行的ui,直接 table.setUI(new DragDropRowTableUI()); 调用
在Java Swing库中,`JTable`是一个非常重要的组件,用于在GUI应用程序中展示二维数据。它是基于模型-视图-控制器(MVC)架构设计的,使得数据操作变得灵活且易于管理。本篇文章将深入探讨`JTable`如何操作单元格、行...
在标题和描述中提到的“JTable 拖动行 移动行的ui”,正是指为`JTable`添加了拖放功能的用户界面。 要实现这个功能,通常我们需要自定义`JTable`的UI,或者使用已经存在的第三方库。在描述中提到了`table.setUI(new...
在Java Swing库中,`JTable`是一个非常重要的组件,用于展示二维数据表格。当我们需要在用户界面上实现拖放功能,允许用户通过鼠标拖动来改变行的顺序时,可以利用自定义的表UI(Table UI)实现这一功能。在给定的...
标题和描述提到的`DragDropRowTableUI`是`JTable`的一种自定义用户界面(UI)实现,它扩展了`javax.swing.plaf.basic.BasicTableUI`,增加了拖放功能,使得用户可以直接通过鼠标拖动来移动`JTable`的行。 要实现`...
在标题"java swing 表头不可拖动"中,提到的问题是关于如何在Java Swing应用中阻止JTable的列头进行拖动操作。这通常是通过自定义JTable或其相关的HeaderView来实现的。在Swing中,JTable的表头(表头即列头)是由...
JTable使用 JTable使用JTable使用JTable使用
JTable 动态刷新数据 JTable 动态刷新数据是指在 Java Swing 应用程序中,使用 JTable 组件展示数据,并实时更新数据的过程。这种技术在很多实际应用场景中非常有用,如股票交易平台、实时监控系统、电子表格等。 ...
### Java中的JTable用法详解 #### 一、概述 JTable是Swing框架中用于显示和编辑表格数据的关键组件之一。它不仅提供了强大的数据管理功能,还支持丰富的定制选项,使得开发者能够根据具体需求创建出高度个性化的...
实现jTable和jTree的双向联动,点击jTree会选中jTable单元格,点击jTable会选中jTree节点。
JTable的显示效果
在Java Swing库中,`JTable`是一个非常重要的组件,用于在GUI应用程序中展示表格数据。它是`javax.swing.JTable`类的实例,提供了一个可交互的二维数据视图,允许用户浏览、编辑和操作表格中的数据。这个"JTable ...
- **列选择允许**:`table.setColumnSelectionAllowed(true)`表示允许用户只选中一列而不选中整行。 - **自动调整大小模式关闭**:`table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)`表示关闭表格自动调整列宽的...
在Java的Swing库中,`JTable`是用于创建二维数据展示的组件,它类似于电子表格。在处理`JTable`时,我们有时需要使其单元格内容支持自动换行,以便更好地显示长文本。标题“JTable自动换行”正是指向这个功能,即...
JTable的使用收藏 1.JTable与TableModel 1.TableModel与JTable的关系 2.TableModel实践 3.使用JTable+TableModel展示java中的数据对象 2.JTable展示方式的美化 1.设置表格的宽度和高度 2.要显示表头 3.新加列,将...
JTable中加入复选框的两种方法 在Java中,JTable是一个常用的表格控件,用于显示和编辑表格数据。然而,在JTable中加入复选框是一个常见的需求,但是却不是那么容易实现。本文将介绍JTable中加入复选框的两种方法,...
打开NetBeans,创建一个新的Java Swing GUI应用,然后从工具箱中拖拽`JTable`到设计视图。接着,你可以右键点击`JTable`并选择“调整列宽”、“添加列”等操作。对于数据模型,NetBeans会自动为你创建一个`...
在Java Swing中,`JTable` 是用于展示二维数据的组件,它允许用户查看和编辑数据。本示例探讨如何在`JTable`中添加`CheckBox`,并实现表头的`JCheckBox`全选联动功能。这在需要用户进行多选操作的界面中非常常见,...
在Java Swing库中,`JTable`是一个非常重要的组件,用于展示二维数据表格。当我们需要在`JTable`中实现更复杂的交互,比如在一个单元格内放置多个按钮时,这通常涉及到自定义`TableCellRenderer`和`TableCellEditor`...