如何解决将 JPanel 的一个元素锁定到位
我知道已经发布了一个类似的问题 :: GUI FlowLayout,lock all components position
但是,我想将一个 JPanel 锁定在其位置,同时让另一个 JLabel 保持可移动。 (那个 JLabel 是制作出来的,应该是可以拖动和移动的。)
我希望这个 JLabel 在 JPanel 上移动,这里是 MouseAdapter 代码,同样来自 StackOverflow dragging a jlabel around the screen ::
MouseAdapter ma = new MouseAdapter() {
JLabel selectedLabel = null; //Clicked label.
Point selectedLabelLocation = null; //Location of label in panel when it was clicked.
Point panelClickPoint = null; //Panel's click point.
//Selection of label occurs upon pressing on the panel:
@Override
public void mousePressed(final MouseEvent e) {
//Find which label is at the press point:
final Component pressedComp = colorPanel.findComponentAt(e.getX(),e.getY());
//If a label is pressed,store it as selected:
if (pressedComp != null && pressedComp instanceof JLabel) {
selectedLabel = (JLabel) pressedComp;
selectedLabelLocation = selectedLabel.getLocation();
panelClickPoint = e.getPoint();
//Added the following 2 lines in order to make selectedLabel
//paint over all others while it is pressed and dragged:
colorPanel.setComponentZOrder(selectedLabel,0);
selectedLabel.repaint();
}
else {
selectedLabel = null;
selectedLabelLocation = null;
panelClickPoint = null;
}
}
//Moving of selected label occurs upon dragging in the panel:
@Override
public void mouseDragged(final MouseEvent e) {
if (selectedLabel != null
&& selectedLabelLocation != null
&& panelClickPoint != null) {
final Point newPanelClickPoint = e.getPoint();
//The new location is the press-location plus the length of the drag for each axis:
final int newX = selectedLabelLocation.x + (newPanelClickPoint.x - panelClickPoint.x),newY = selectedLabelLocation.y + (newPanelClickPoint.y - panelClickPoint.y);
selectedLabel.setLocation(newX,newY);
}
}
};
colorPanel.addMouseMotionListener(ma); //For mouseDragged().
colorPanel.addMouseListener(ma); //For mousePressed().
然而,当我拖动我心爱的小 JLabel 时(我已经把它缩小了),有时我会不小心抓住 JPanel 而 它 会四处移动。
这是我想要的图片(在移动任何东西之前)。
(PS 也来自 StackOverflow... Creating a color chooser JSlider to effect the fill color of rectangle )
我想在 JPanel 上拖动 JLabel,以便用户可以选择颜色。但有时(如上所述)我会拿起 JPanel,看起来像 :: https://i.stack.imgur.com/xUB2g.png 奇怪的是 :: https://i.stack.imgur.com/WJ2tP.png
有没有办法将我的 JPanel(渐变)锁定到它所在的另一个?我尝试将 setResizable(false)
添加到较大的 JFrame,但是之后我的 JLabel 无法移动。有没有办法在不影响我的 JLabel 的情况下锁定 JPanel? TIA。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。