У меня много JPanel
и один JLabel
. Когда я нажимаю на один JPanel
, я хочу, чтобы мой JLabel
(содержит изображение) перемещался на этот JPanel
. Как это можно сделать с помощью кода? Я кодирую в NetBeans.
Как переместить Jlabel с одной JPanel на другую
Ответы (1)
Предпосылка проста, но фактическое решение может зависеть от того, чего вы хотите достичь.
Поскольку компонент может одновременно существовать только в одном контейнере, вам нужно беспокоиться только о его добавлении в новый контейнер...
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;
public class LabelMover {
public static void main(String[] args) {
new LabelMover();
}
public LabelMover() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new BasePane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class BasePane extends JPanel {
private JLabel label;
public BasePane() {
setLayout(new GridLayout(2, 2));
MouseHandler handler = new MouseHandler();
for (int index = 0; index < 4; index++) {
CellPane pane = new CellPane();
pane.addMouseListener(handler);
add(pane);
}
label = new JLabel(":)");
label.setHorizontalAlignment(JLabel.CENTER);
((CellPane)getComponent(0)).add(label);
}
public class MouseHandler extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
Component source = e.getComponent();
if (!label.getParent().equals(source)) {
((CellPane)source).add(label);
revalidate();
repaint();
}
}
}
public class CellPane extends JPanel {
public CellPane() {
setLayout(new BorderLayout());
setBorder(new LineBorder(Color.GRAY));
}
@Override
public Dimension getPreferredSize() {
return new Dimension(50, 50);
}
}
}
}
person
MadProgrammer
schedule
09.06.2013
JButton
вместоJPanel
:-) - person nIcE cOw   schedule 09.06.2013