在GridLayout中拖放组件时的Java位置
我试图通过将图标从一个JLabel拖放到另一个JLabel来进行简单的练习,但完全卡住了。如果有人能帮助我并很快解释我错的原因,我会很高兴的 我想做的是,当鼠标按下标签时,将标签图标设置为null,并将此图标设置为释放鼠标的标签。 JPanel位于LayeredPane上,因为接下来我要做的是在拖动过程中使用此图标显示JLabel。但这是为了未来 目前的问题是: 释放鼠标时,我无法将图标正确设置为标签。。 如《代码》中所述: 第一种方式-当在lab2上设置图标并希望返回到lab1时,无法将图标设置为lab4-NullPointerException 第二种方式-鼠标按下位置始终在同一位置。当我点击Lab1并在lab3上释放鼠标时,图标设置为Lab1 代码:在GridLayout中拖放组件时的Java位置,java,drag-and-drop,jlabel,Java,Drag And Drop,Jlabel,我试图通过将图标从一个JLabel拖放到另一个JLabel来进行简单的练习,但完全卡住了。如果有人能帮助我并很快解释我错的原因,我会很高兴的 我想做的是,当鼠标按下标签时,将标签图标设置为null,并将此图标设置为释放鼠标的标签。 JPanel位于LayeredPane上,因为接下来我要做的是在拖动过程中使用此图标显示JLabel。但这是为了未来 目前的问题是: 释放鼠标时,我无法将图标正确设置为标签。。 如《代码》中所述: 第一种方式-当在lab2上设置图标并希望返回到lab1时,无法将图标设
}请参阅拖放式Swing教程,了解正确的操作方法。实际上,我必须在不使用TransferHandler的情况下执行此操作。。我知道这很愚蠢,但练习是“手动”完成的:/而且,我真的很想知道为什么MouseRelease location在这种情况下不能像我预期的那样工作,我真的很想了解你试图移动JLabels的这种机制?这方面有一个有效的例子
public class Main extends JFrame{
private JLayeredPane layeredPane;
private JLabel lab1;
private JLabel lab2;
private JLabel lab3;
private JLabel lab4;
private JPanel mainPanel;
ImageIcon yellowCircleIcon = new ImageIcon("circle_yellow.png");
public Main(){
Dimension size = new Dimension(400, 400);
layeredPane = new JLayeredPane();
getContentPane().add(layeredPane);
layeredPane.setPreferredSize(size);
layeredPane.addMouseListener(ms);
mainPanel = new JPanel(new GridLayout(2,2));
layeredPane.add(mainPanel, JLayeredPane.DEFAULT_LAYER);
mainPanel.setPreferredSize(size);
mainPanel.setBounds(0, 0, size.width, size.height);
lab1 = new JLabel("111");
lab1.setBackground(Color.black);
lab1.setOpaque(true);
lab1.setIcon(yellowCircleIcon);
lab1.addMouseListener(ms);
lab2 = new JLabel("222");
lab2.addMouseListener(ms);
lab3 = new JLabel("333");
lab3.addMouseListener(ms);
lab4 = new JLabel("444");
lab4.setBackground(Color.black);
lab4.setOpaque(true);
lab4.addMouseListener(ms);
mainPanel.add(lab1);
mainPanel.add(lab2);
mainPanel.add(lab3);
mainPanel.add(lab4);
setSize(400, 400);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
MouseListener ms = new MouseListener() {
public void mouseReleased(MouseEvent arg0) {
//1st way - cannot set icon to lab4
//when set icon on lab2 and want to go back to lab1 - NullPointerEx.
JLabel tmp = (JLabel)mainPanel.getComponentAt(arg0.getX(), arg0.getY());
//2nd way - mouse presses location is always in the same place
//when I click on Lab1 and release mouse on lab3 - icon is set to lab1
//tmp = (JLabel)arg0.getComponent();
tmp.setIcon(yellowCircleIcon);
}
public void mousePressed(MouseEvent arg0) {
JLabel tmp = (JLabel)arg0.getComponent();
tmp.setIcon(null);
}
public void mouseExited(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseClicked(MouseEvent arg0) {}
};
public static void main(String[] args) {
new Main();
}