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

在根容器中分层放置多个GlassPane

在根容器中分层放置多个GlassPane

哆啦的时光机 2019-11-03 08:04:33
是否有可能添加多个GlassPane处理单一JFrame,或者我必须使用不舒服LayeredPane与Opacity属性。我已经附上了一些代码,该代码显示了我想做什么(由@camickr提供)。import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;import javax.swing.border.*;public class MultiplayGlassPane {    private static final long serialVersionUID = 1L;    private JFrame frame = new JFrame("frameTitle");    private JPanel fPanel = new JPanel();    private Random random = new Random();    private final static Border MESSAGE_BORDER = new EmptyBorder(10, 10, 10, 10);    private JLabel message = new JLabel();    private ArrayList<Star> stars = new ArrayList<Star>();    public MultiplayGlassPane() {        MyGlassPane glass = new MyGlassPane();        for (int i = 0; i < 35; i++) {            Star star = new Star(new Point(random.nextInt(580), random.nextInt(550)));            star.setColor(Color.orange);            star.setxIncr(-3 + random.nextInt(7));            star.setyIncr(-3 + random.nextInt(7));            glass.add(star);        }        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.add(glass, BorderLayout.CENTER);        frame.setLocation(20, 20);        frame.pack();        frame.setVisible(true);        DisabledGlassPane1 glassPane = new DisabledGlassPane1();        JRootPane rootPane = SwingUtilities.getRootPane(frame);        rootPane.setGlassPane(glassPane);        glassPane.activate("");    }    private class MyGlassPane extends JLabel {        private static final long serialVersionUID = 1L;        private ArrayList<Star> stars = new ArrayList<Star>();        private javax.swing.Timer timer = new javax.swing.Timer(20, new ActionListener() {
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

我认为您对示例中的术语感到困惑。“ MyGlassPane”根本不是玻璃窗格,它只是一个JComponent。您应该将其重命名为“ StarPanel”。它被添加到JFrame容器中。附带说明,使用JFrame.add()是非法的,您应该使用frame.getContentPane()。add()将MyGlassPane添加到根容器中

查看完整回答
反对 回复 2019-11-04
  • 2 回答
  • 0 关注
  • 306 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信