java – 将组件放在玻璃窗格上

前端之家收集整理的这篇文章主要介绍了java – 将组件放在玻璃窗格上前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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());
原文链接:https://www.f2er.com/java/126105.html

猜你在找的Java相关文章