为了账号安全,请及时绑定邮箱和手机立即绑定

在玻璃板上放置部件

在玻璃板上放置部件

慕沐林林 2019-06-21 16:23:38
在玻璃板上放置部件我有一个JLabel子类,它构成了GUI的一个组件。我已经实现了将组件从一个容器拖放到另一个容器的能力,但是没有任何视觉效果。我想让这个JLabel在项目从一个容器拖到另一个容器时跟随光标。我想我可以创建一个玻璃面板并在上面画出来。但是,即使在我将组件添加到玻璃窗格、将组件设置为可见,并将玻璃窗格设置为不透明之后,我仍然没有看到该组件。我知道组件可以工作,因为我可以将它添加到内容窗格并显示出来。如何向玻璃窗格中添加组件?最后,提出了如何使这个简单的例子工作。谢谢,@AKF。我能够使这个解决方案适应我原来的问题,允许我删除大约60行Java2D代码,这些代码手工地呈现了JLabel的一个表示。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);     }}
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

除了已经提供的LayerPane示例的指针之外,原始代码的问题集中在标签首选大小的设置上。在JLabel被调整大小之前就设置了它,所以您的:

l.setPreferredSize(l.getSize());

是无效的。另一方面,如果你在打完电话后setBounds,你会看到你想要的结果。考虑到这一点,重新排序如下:

l.setPreferredSize(l.getSize());l.setBounds(10, 10, 50, 20);

像这样:

l.setBounds(10, 10, 50, 20);l.setPreferredSize(l.getSize());


查看完整回答
反对 回复 2019-06-21
  • 3 回答
  • 0 关注
  • 336 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号