猿问

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

是否有可能添加多个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() {


哆啦的时光机
浏览 307回答 2
2回答

守着一只汪

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

相关分类

Java
我要回答