- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在单击 JButton
时将 JPanel
添加到 JFrame
。它将 JPanel
添加到框架中。该按钮将在点击事件中继续将 JPanel
添加到 JFrame
。没有限制。单击按钮时,我也将 JPanels
添加到 List
中。我这样做是因为添加了 MouseMotionListener
使用 for 循环来处理 JPanel 的拖动。
我现在面临的问题是拖动。当我通过单击添加第一个 JPanel
时,如果我拖动它,它会正确地跟随鼠标光标坐标。当我添加第二个 JPanel
时,它也完全跟随鼠标。添加第二个后,如果尝试拖动第一个 JPanel,则第一个 JPanel 似乎遵循不同的坐标,初始位置将更改为其他位置。我不知道我哪里做错了。请帮我解决这个问题。请通过下面的代码。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class MyFrame extends JFrame {
JButton jb;
List<JPanel> mypanels = new ArrayList<JPanel>();
public MyFrame() {
jb = new JButton("Add Panel");
jb.setBounds(10, 10, 100, 50);
setSize(new Dimension(1000, 600));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
add(jb);
setVisible(true);
initialize();
}
public void initialize() {
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
JPanel panel = new JPanel();
panel.setBounds(150,150,200,200);
panel.setBackground(Color.black);
mypanels.add(panel);
add(panel);
repaint();
handleDrag();
}
});
}
public void handleDrag(){
for(int i=0;i<mypanels.size();i++) {
final int j = i;
mypanels.get(i).addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent me) {
me.translatePoint(me.getComponent().getLocation().x, me.getComponent().getLocation().y);
mypanels.get(j).setLocation(me.getX(), me.getY());
}
});
}
}
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
new MyFrame();
}
});
}
}
最佳答案
看起来您的 handleDrag 方法正在向每个 JPanel 添加一个新的匿名监听器,而只有一个 JPanel 添加到列表中。监听器只需要添加一次,如果添加了多个监听器,行为会变得很奇怪。
这是一个更新的 handleDrag 方法
public void handleDrag(JPanel panel){
final JPanel p = panel;
panel.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent me) {
me.translatePoint(me.getComponent().getLocation().x, me.getComponent().getLocation().y);
p.setLocation(me.getX(), me.getY());
}
});
}
关于java - 将 JPanel 拖入 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12694790/
我是 iOS 新手,我不知道该怎么做,我想实现类似个人资料编辑动画的 Tinder。 例如, 我可以将图像拖到其他 UIImageView 或 UICollectionView 中,并将 Collec
我在项目中使用gridster.net,但遇到了问题。 我试图让小部件仅在单击后按住鼠标一秒钟后才开始拖动。我正在使用下一个代码: $(".gridster .gs-w").on('mousedown
我想用 LibGDX 中的鼠标拖动一个Actor。我的代码: // overrides in the ClickListener @Override public bo
为什么当我将我的 gif 拖到单元格中时表格会变形?我该如何解决?当我将 gif 拖到单元格中时,我希望表格(和每个单元格)保持原来的大小。 这是我的情况的一个 jsfiddle: http://js
当设备转向横向时,一些控件离开 viewController,我无法将其拖到 viewController。 最佳答案 就像您在屏幕截图上看到的那样,您的约束无效,这可能是个问题。如果您使用 Stor
我在单击 JButton 时将 JPanel 添加到 JFrame。它将 JPanel 添加到框架中。该按钮将在点击事件中继续将 JPanel 添加到 JFrame。没有限制。单击按钮时,我也将 JP
我有一个 NSCollectionView 显示内部存储的图像(即不是文件)。集合显示正确。但是,当我开始拖动操作时,应用程序崩溃了。它在拖动离开 Collection View 之前崩溃。我正在返回
我正在尝试解决 iPhone 上拖放的基本问题。这是我的设置: 我有一个 UIScrollView,它有一个大的内容 subview (我可以滚动和缩放它) 内容 subview 有几个小块作为 su
我今天遇到了一个小问题,我想我可以试试堆栈溢出。我会简短而贴心(我删除了很多代码以明确这一点)。 我最近发现了 raphaeljs,我喜欢它。我制作了一些可拖动的圆圈,它像这样工作得很好: 工作脚本:
我是 iOS 开发的新手,想使用分组的 UITableView 和 UITabelCell 来创建一个简单的表单来布置表单的内容。我想在 XCode5 中以交互方式执行此操作。 我的问题是,在将 UI
您好,我是 iOS 编程的新手,想知道将 UIView 拖到 Storyboard 中并以编程方式创建它们之间有什么区别。我正在使用 iPad 进行开发。我有一个 UISplitView。在 Appd
A = 父 NSView;B = 子 NSView; B有一个小的NSTrackingArea;B是A的一个小 subview ; 如果在空白区域中移动、单击、拖动,A 会正确接收 mouseMove
我正在尝试实现自定义 QGraphicsScene,当我们按下左键时,它允许拖动一个项目,为此我使用 QDrag 并传递项目数据,然后覆盖 dropEvent 事件,我在其中获取元素和 dropEve
我是一名优秀的程序员,十分优秀!