gpt4 book ai didi

java - 将 JPanel 置于 java 中其他对象的前面(SWING)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:54 26 4
gpt4 key购买 nike

我想在应用程序处理时发出加载消息,所以我在 JTree 上使用了 JPanel。但是当用户点击 JPanel 时,JTree 将被选中并且 JPanel 将返回到后面。隐藏 JPanel 后,它再也不会显示了。我不知道为什么,但它似乎永远不会在 JTree 前面。

我需要一种方法将 JPanel 放在所有内容的前面。我该怎么做?

编辑:另外我必须提到我不需要JDialog。我想在任何元素顶部使用 JPanel 来显示加载消息,直到进程完成。

最佳答案

所以这里你至少有两个解决方案。要么按照@Geoff 和@sthupahsmaht 的建议去做。顺便说一句,也可以使用 JOptionPane 自动为您创建一个对话框。

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

或者另一种选择是按照@jzd 的建议使用 JLayeredPane。

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

1.左键单击​​开始时可见的玻璃板。查看输出。

2.右击它。这会隐藏玻璃板。

3.左键单击​​内容 Pane 。查看输出。

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();
}
});
}
}

编辑 2:如果你想有一个对话框的效果,你可以通过将这段代码适本地结合到我的例子中来实现它。

        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);

关于java - 将 JPanel 置于 java 中其他对象的前面(SWING),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com