社区
Java SE
帖子详情
[swing]拖放JPanel
jiangshachina
2009-09-03 11:13:08
界面中有若干个JPanel,想通过鼠标拖放来改变它们的相对位置,即进行重新布局。
请问如何实现?
不一定要给出代码,提出好的思路即可得分 *_*
...全文
246
17
打赏
收藏
[swing]拖放JPanel
界面中有若干个JPanel,想通过鼠标拖放来改变它们的相对位置,即进行重新布局。 请问如何实现? 不一定要给出代码,提出好的思路即可得分 *_*
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yunhaifeiwu
2011-11-02
打赏
举报
回复
能够实现拖放,前题是要用netbeans的绝对布局。(AbsoluteConstraints之类的在netbeans安装路径下)以下是完整代码。
使用类
==========================
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fdragpanel;
import java.awt.Color;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import org.netbeans.lib.awtextra.AbsoluteLayout;
import org.netbeans.lib.awtextra.AbsoluteConstraints;
import javax.swing.JLabel;
import javax.swing.JTextArea;
/**
*
* @author cloud
*/
public class FDragPanel extends JPanel {
Point p;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createPanel();
}
});
}
public static void createPanel() {
JFrame f = new JFrame("Wallpaper");
JPanel p = new JPanel();
p.setLayout(new AbsoluteLayout());
FDragPanel fp=new FDragPanel();
FDropMouseListener fml=new FDropMouseListener(p);
fp.addMouseListener(fml);
fp.setBackground(Color.red);
p.add(fp,new AbsoluteConstraints(20, 20, 100, 80));
f.add(p);
// f.add (jlayer);
f.setSize(400, 300);
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
f.setLocationRelativeTo (null);
f.setVisible (true);
}
}
===============为绝对布局而打造的拖放鼠标适配器类
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package fdragpanel;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import java.lang.Math;
import javax.swing.JPanel;
import org.netbeans.lib.awtextra.AbsoluteConstraints;
/**
*
* @author cloud
*/
public class FDropMouseListener extends MouseAdapter {
private Point p;
private JPanel c ;
public FDropMouseListener(JComponent c ){
this.c=(JPanel) c;
}
@Override
public void mousePressed(MouseEvent e){
p=new Point(e.getX(),e.getY());
// JOptionPane.showMessageDialog(c, "按我了");
}
@Override
public void mouseReleased(MouseEvent e){
Component c1 = e.getComponent();
Point p1=new Point(e.getX(),e.getY());
int x= c1.getLocation().x+p1.x-p.x;
int y=c1.getLocation().y+p1.y-p.y;
c.add(c1,new AbsoluteConstraints(x,y,c1.getWidth(),c1.getHeight()));
c.repaint();
c.revalidate();
}
}
duanshaochu
2009-11-06
打赏
举报
回复
学习中,期待答案。
jiangshachina
2009-09-10
打赏
举报
回复
> 可以用布局管理器哦!!难到 不可以吗!!呵呵呵
布局管理器应该是要用的,因为还是是要靠Layout Manager来重新布局UI Component。
wgmkss
2009-09-05
打赏
举报
回复
可以用布局管理器哦!!难到 不可以吗!!呵呵呵
karlyuan2008
2009-09-05
打赏
举报
回复
期待答案
Miracle1216
2009-09-04
打赏
举报
回复
仿照JInternalFrame
ctlu2ct2t
2009-09-04
打赏
举报
回复
关注学习!
jiangshachina
2009-09-04
打赏
举报
回复
希望大家畅所欲言,我也将继续研究。
jiangshachina
2009-09-03
打赏
举报
回复
我只是希望能更灵活些。
比如,用户可能会调整一下某些容器之间的位置。
dajiadebeibei9
2009-09-03
打赏
举报
回复
用布局管理器满足不了你的布局方式吗?
sforiz
2009-09-03
打赏
举报
回复
在能设计JPanel的IDE中试试,用户能随意的改变JPANEL的位置不知道好不好实现,这毕竟不是ASP.NET中的WebParts
nj_dobetter
2009-09-03
打赏
举报
回复
监听mouse press和mouse drag事件
Miracle1216
2009-09-03
打赏
举报
回复
还没试过,研究一下
安小寰
2009-09-03
打赏
举报
回复
我想能不能用FlowLayout布局器然后通过一个线程的方式监听用户的鼠标动作.
大概下面一个流程:(线程内监听操作)
1.判定用户鼠标当前位置,并且监听鼠标是否为按下状态
2.根据鼠标位置判定当前悬停swing组件对象,若没有可移动组件返回false
4.读取用户最后释放鼠标位置,生成Point对象point
3.panel.setPreferredSize(new Dimension(point)); //通过设定组件位置对组件进行操作
我的构想是这样的,不过具体实现起来可能不行,因为这样的情况很容易造成组件重叠并且移动过程不可能实现像window移动文件夹一样的动态显示.
windforcecn
2009-09-03
打赏
举报
回复
定了一个Layout,然后此layout上的各个面板可以换位置,你看eclipse的控件就可以拖动位置
jiangshachina
2009-09-03
打赏
举报
回复
> 不能实现~~
不可能吧。
在JTable中,用户就可以通过鼠标拖放重新安排Column的顺序。
imasmallbird
2009-09-03
打赏
举报
回复
不能实现~~
JAVA
SWING
接收浏览器拖来的图片、文字,并保存
本文深入探讨了Java
Swing
框架中关键组件的使用,包括
JPanel
和JScrollPane等,特别关注了
拖放
(Drag/Drop)功能的实现,为开发者提供了丰富的实践指导。
Java实现拼图游戏
本文详细介绍了如何使用Java和
Swing
库开发一个基础的拼图游戏,涉及图像处理、
JPanel
布局和鼠标事件监听。通过创建ImageTile类表示拼图碎片,实现基本的
拖放
和交换功能。
java
swing
新建项目,使用
Swing
组件在Java
Swing
中创建简单的GUI编辑器
作者正在寻找解决方案,以利用
Swing
组件创建一个简单的GUI编辑器,允许用户放置、移动和调整预定义的GUI元素如按钮和文本框。寻求如何在
JPanel
上复用
Swing
组件并实现基本交互。教程提供了一个初步的证明概念,展示了如何添加、移动和限制调整组件的基础功能。
实现可自由拖拽的工具栏 - Java
本文详细介绍了如何利用Java
Swing
库创建一个用户可以自由拖动的工具栏。通过创建JFrame和
JPanel
,添加按钮,并实现鼠标事件监听器,从而实现工具栏按钮的
拖放
功能。
Java 矩形 拖动_Java
Swing
– 将矩形拖到
JPanel
上的有效方法?
本文讨论了一段Java
Swing
代码,用于在
JPanel
上绘制和拖动矩形。作者关注的问题是,随着鼠标拖动,不断重绘
JPanel
可能会导致效率低下,特别是在存在多个矩形时。代码包括一个WidgetDrawingPanel类,添加了MouseListener和MouseMotionListener以响应鼠标事件。作者寻求更高效的方法来平滑地拖动矩形,减少不必要的重绘,以提高性能。
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章