java – 将组件放在玻璃窗格上
发布时间:2020-12-14 14:26:45 所属栏目:Java 来源:网络整理
导读:我有一个JLabel的子类,形成了我的GUI的一个组件.我已经实现了将组件从一个容器拖放到另一个容器的能力,但没有任何视觉效果.我想让这个JLabel在从一个容器到另一个容器的拖动期间跟随光标.我想我可以创建一个玻璃窗,并在那里绘制.但是,即使将组件添加到玻璃窗
|
我有一个JLabel的子类,形成了我的GUI的一个组件.我已经实现了将组件从一个容器拖放到另一个容器的能力,但没有任何视觉效果.我想让这个JLabel在从一个容器到另一个容器的拖动期间跟随光标.我想我可以创建一个玻璃窗,并在那里绘制.但是,即使将组件添加到玻璃窗格中,将组件设置为可见,并将玻璃窗格设置为可见,并将玻璃窗格设置为不透明,我仍然看不到组件.我知道组件的工作原理,因为我可以将其添加到内容窗格并显示.
如何在玻璃窗格中添加组件? 最后想到如何让简单的例子工作.谢谢,@akf.我能够将此解决方案适应我的原始问题,允许我删除手动呈现JLabel表示的约60行Java2D代码. package test;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class MainFrame extends JFrame {
/**
* @param args
*/
public static void main(String[] args) {
MainFrame mf = new MainFrame();
mf.setSize(400,400);
mf.setLocationRelativeTo(null);
mf.setDefaultCloSEOperation(DISPOSE_ON_CLOSE);
mf.setGlassPane(new JPanel());
JLabel l = new JLabel();
l.setText("Hello");
l.setBorder(new LineBorder(Color.BLACK,1));
l.setBounds(10,10,50,20);
l.setBackground(Color.RED);
l.setOpaque(true);
l.setPreferredSize(l.getSize());
//mf.add(l);
((JPanel)mf.getGlassPane()).add(l);
mf.getGlassPane().setVisible(true);
mf.setVisible(true);
}
}
解决方法
除了已经提供的LayerPane示例的指针之外,原始代码的问题围绕着标签的首选大小的设置.你在JLabel的大小之前设置好了,所以你的
l.setPreferredSize(l.getSize()); 是无效的.另一方面,如果您在拨打setBounds之后拨打电话,您将看到所需的结果.考虑到这一点,请重新排序: l.setPreferredSize(l.getSize()); l.setBounds(10,20); 看起来像这样: l.setBounds(10,20); l.setPreferredSize(l.getSize()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
