我有一个JLabel的子类,它是我的GUI组件的一部分。我已经实现了将该组件从一个容器拖放到另一个容器的功能,但没有任何视觉效果。我希望在从一个容器拖动项目时,这个JLabel能跟随光标移动。我想创建一个玻璃板,并在上面绘制它。然而,即使我将组件添加到玻璃板中,将组件设置为可见,将玻璃板设置为可见,并将玻璃板设置为不透明,我仍然看不到组件。我知道组件是有效的,因为我可以将其添加到内容窗格并显示出来。
如何将组件添加到玻璃板中?
最后终于弄清楚了如何让简单示例起作用。谢谢@akf。我能够将这个解决方案应用到我的原始问题上,从而允许我删除大约60行Java2D代码,手动渲染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);
}
}
TileView
是JLabel
的子类。 - Chris Lieb