我想在应用程序处理时发出加载消息,因此我在上使用JPanel
了JTree
。但是,当用户单击时JPanel
,JTree
将选择,然后JPanel
将转到后面。隐藏后JPanel
,它将不再显示。我不知道为什么,但是似乎永远不会走到JTree
。
我需要一种将JPanel
一切摆在最前面的方法。我怎样才能做到这一点?
编辑: 另外,我必须提到,我不需要JDialog
。我想使用JPanel
任何元素的顶部显示加载消息,直到过程完成。
因此,这里至少有两个解决方案。要么按照@Geoff和@sthupahsmaht的建议去做。顺便说一句,也可以使用JOptionPane,它会自动为您创建一个对话框。
另一种选择是使用框架中的GlassPane。
或另一个选择是使用@@ zzd建议的JLayeredPane。
编辑: 显示如何使用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);
我在写一个简单的信息管理程序的代码。我在Java swing GUI中遇到了麻烦。在这段代码中,我计划在Northpanel_center中使用JTextField字符串,以便在NorthPanel_East中使用。但我不能用它。 要补充的是,类似这样的搜索方法。
我正在制作这个基于控制台的游戏。 但我不明白这一点,也不明白为什么这样做是错误的。 所以基本上我有10个房间,所以一个房间有以下东西: -房间号码 -hashmap,其中包含一个Room作为值和一个String作为键 现在的问题是,一个房间可以从4个方向北、东、南、西退出,所以这是哈希图中的字符串/键。 它也可以有2个出口或1或3个。 所以在那个哈希图中,我将方向保存为键和值另一个房间对象,这样我
Navicat 还能让你管理其他 SQLite 对象:索引和触发器。在主窗口的主工具栏点击相应的按钮来打开对象列表。
Navicat 还能让你管理其他 SQL Server 对象:索引、同义词、触发器、备份设备、链接服务器、服务器触发器、程序集、数据库触发器、分区函数和分区方案。在主窗口中,点击 “其他”,然后选择一个对象来打开对象列表。
Navicat 还能让你管理其他 PostgreSQL 对象:聚合、转换、域、索引、运算符、运算符类别、序列、触发器、表空间、编制和语言。在主窗口中,点击 “其他”,然后选择一个对象来打开对象列表。
Navicat 还能让你管理其他 Oracle 对象:数据库链接、索引、Java、实体化视图日志、序列、同义词、触发器、类型、XML 架构、目录、公用数据库链接、公用同义词和表空间。在主窗口中,点击 “其他”,然后选择一个对象来打开对象列表。