在玻璃板上放置部件

在玻璃板上放置部件

我有一个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);
    }}


慕沐林林
浏览 337回答 3
3回答

Smart猫小萌

除了已经提供的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());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java