加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

将JPanel带到java中的其他对象(SWING)前面

发布时间:2020-12-15 00:20:27 所属栏目:Java 来源:网络整理
导读:我想在app进程时加载,所以我在JTree上使用了JPanel.但是当用户点击JPanel时,JTree将选择并且JPanel会转到后面.隐藏jpanel之后它再也没有显示出来(我不知道为什么!但它似乎永远不会出现在jtree上). 我需要一种方法来让JPanel前进.我怎样才能做到这一点? 另
我想在app进程时加载,所以我在JTree上使用了JPanel.但是当用户点击JPanel时,JTree将选择并且JPanel会转到后面.隐藏jpanel之后它再也没有显示出来(我不知道为什么!但它似乎永远不会出现在jtree上).

我需要一种方法来让JPanel前进.我怎样才能做到这一点?

另外我必须提到我不想要JDialog.我想使用任何元素的jpanel顶部来显示加载,直到进程完成.

解决方法

所以这里至少有两个解决方案.或者选择@Geoff和@sthupahsmaht建议的内容. BTW也可以使用JOptionPane,它会自动为您创建一个对话框.

另一种选择是使用框架中的GlassPane.

或者另一个选择是使用JLayeredPane作为@jzd建议.

编辑:
示例显示如何使用GlassPane捕获用户选择.
请尝试以下步骤:

1.左键点击开始时可见的玻璃窗格.查看输出.

2.点击它.这隐藏了玻璃窗格.

3.左键单击??内容窗格.查看输出.

4.点击它.转到第1点.
请享用.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class OverPanel extends JPanel
{   
    private static void createAndShowGUI()
    {
        final JFrame f = new JFrame();
        f.setPreferredSize(new Dimension(400,300));
        f.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);       
        JPanel glassPanel = new JPanel();
        glassPanel.setBackground(Color.RED);        
        glassPanel.addMouseListener(new MouseAdapter()
        {
            @Override
            public void mousePressed(MouseEvent e)
            {
                super.mousePressed(e);
                System.out.println("f.getGlassPane() mousePressed");
                if(e.getButton() == MouseEvent.BUTTON3)
                    f.getGlassPane().setVisible(false);
            }
        });
        f.setGlassPane(glassPanel);     

        f.getContentPane().setBackground(Color.GREEN);
        f.getContentPane().addMouseListener(new MouseAdapter()
        {
            @Override
            public void mousePressed(MouseEvent e)
            {
                super.mousePressed(e);
                System.out.println("f.getContentPane() mousePressed");
                if(e.getButton() == MouseEvent.BUTTON3)
                    f.getGlassPane().setVisible(true);
            }
        });
        f.getGlassPane().setVisible(true);
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                createAndShowGUI();
            }
        });
    }
}

EDIT2:
如果您希望获得对话框的效果,可以通过将此代码合适地合并到我的示例中来实现.

JPanel panel = new JPanel(new GridLayout(0,1));
        panel.setBorder(BorderFactory.createLineBorder(Color.BLACK,2));
        panel.setBackground(Color.YELLOW);
        panel.add(new JLabel("I am message Label"));
        panel.add(new JButton("CLOSE"));
        JPanel glassPanel = new JPanel(new GridBagLayout());
        glassPanel.setOpaque(false);
        glassPanel.add(panel);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读