JFrame始终在顶部,但在另一个jframe之下?

时间:2019-01-25 09:48:00

标签: java jframe

我的问题是,我有3个不同的JFrame(我不能将3个整合在一起,因为所有JFrame都包含ImageIcons和Mouslisteners)。当我打开程序时,它们正好是我想要的位置,但是当我在后台单击JFrame时,它将出现在前景中,而其他的将移至后台。

我知道我可以设置一个JFrame.alwaysOnTop(true),但是当我将一个设置在顶部时,另一个将移至后台。

因此,我需要类似命令的内容,可以在其中将一个JFrame设置为Background,将一个JFrame设置为Foreground,将一个JFrame设置为两者之间的某个东西,并且不应通过单击来切换它。有人可以帮我吗?

ImageIcon img1 = new ImageIcon(getClass().getResource("/image/x.png"));
ImageIcon img2 = new ImageIcon(getClass().getResource("/image/y.png"));
ImageIcon img3 = new ImageIcon(getClass().getResource("/image/z.png"));

JFrame frame1 = new JFrame();
JFrame frame2 = new JFrame();
JFrame frame3 = new JFrame();

JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();

label1.setIcon(img1);
label2.setIcon(img2);
label3.setIcon(img3);

JPanel panel1 = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel1 = new JPanel();

panel1.add(label1);
panel2.add(label2);
panel3.add(label3);

frame1.setContentPane(panel1);
frame2.setContentPane(panel2);
frame3.setContentPane(panel3);

panel1.setBorder(null);
panel2.setBorder(null);
panel3.setBorder(null);

frame1.setVisible(true);
frame2.setVisible(true);
frame3.setVisible(true);

期望结果是全屏背景jframe,中间有一个大的jframe,在中间JFrame的顶部还有另一个JFrame。而且我不希望JFrame更改其位置。

谢谢!

2 个答案:

答案 0 :(得分:0)

单击背景JFrame之后,它将自动聚焦被单击的JFrame,因为此自动聚焦是操作系统的功能。如果要使用描述了三个嵌套视图的框架,则可以在容器JPanel中使用JPanel,在JPanel中使用JFrame,以得到相同的外观:

伪代码如下:

JPanel innerPanel = new JPanel();
innerPanel.setWidth(100)
innerPanel.setHeight(100);

JPanel containerPanel= new JPanel();
containerPanel.setWidth(200)
containerPanel.setHeight(200);

JFrame mainFrame = new JFrame();
mainFrame.setWidth(400)
mainFrame.setHeight(400);

innerPanel.add(containerPanel);
mainFrame.getContentPane().add(containerPanel);

mainFrame.setVisible(true);

答案 1 :(得分:0)

您必须将JFrames的“ FocusableWindowState”设置为false。

frame1.setFocusableWindowState(false);
frame2.setFocusableWindowState(false);
frame3.setFocusableWindowState(false);

要将一个背景放置在另一个背景上,只需将它们设置为按特定顺序可见即可。

frame1.setFocusableWindowState(false);
frame2.setFocusableWindowState(false);
frame3.setFocusableWindowState(false);

就像第一个JFrame在后台,第二个在中间,最后一个在前景。

ImageIcon img1 = new ImageIcon(getClass().getResource("/image/x.png"));
ImageIcon img2 = new ImageIcon(getClass().getResource("/image/y.png"));
ImageIcon img3 = new ImageIcon(getClass().getResource("/image/z.png"));


JFrame frame1 = new JFrame();
JFrame frame2 = new JFrame();
JFrame frame3 = new JFrame();

JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();

label1.setIcon(img1);
label2.setIcon(img2);
label3.setIcon(img3);

JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();

panel1.add(label1);
panel2.add(label2);
panel3.add(label3);

frame1.setContentPane(panel1);
frame2.setContentPane(panel2);
frame3.setContentPane(panel3);

panel1.setBorder(null);
panel2.setBorder(null);
panel3.setBorder(null);

frame1.setFocusableWindowState(false);
frame2.setFocusableWindowState(false);
frame3.setFocusableWindowState(false);

frame1.setVisible(true);
frame2.setVisible(true);
frame3.setVisible(true);

希望我能为您提供帮助!