Java 将JInternalFrame置于其他JPanel之上

Java 将JInternalFrame置于其他JPanel之上,java,swing,jpanel,jinternalframe,Java,Swing,Jpanel,Jinternalframe,我有两个JPanel,分别命名为“panelMenu”和“panelTable”。它们都被添加到名为“桌面”的JDesktopPane中。我在“panelMenu”中放置了一个按钮,当它被点击时,它将显示一个JInternalFrame 两个面板在“桌面”中并排设置…问题来了…当我单击按钮时…JInternalFrame将显示,但它最初位于“面板”的后面…我如何使JInternalFrame始终位于任何其他组件的顶部 //将面板添加到桌面 panelMenu.setBackground(Colo

我有两个JPanel,分别命名为“panelMenu”和“panelTable”。它们都被添加到名为“桌面”的JDesktopPane中。我在“panelMenu”中放置了一个按钮,当它被点击时,它将显示一个JInternalFrame

两个面板在“桌面”中并排设置…问题来了…当我单击按钮时…JInternalFrame将显示,但它最初位于“面板”的后面…我如何使JInternalFrame始终位于任何其他组件的顶部

//将面板添加到桌面

panelMenu.setBackground(Color.yellow);
panelMenu.setBounds(0,0,200,800);
panelMenu.setLayout(null);

panelTable.setBackground(Color.gray);
panelTable.setBounds(250,50,700,700);
panelTable.setLayout(null);

desktop.setLayout(null);
desktop.setSize(width, height);
desktop.setBackground(Color.gray);

desktop.add(panelMenu);
desktop.add(panelTable);
this.add(desktop);
如何使用:


下面的代码将帮助您

//yourDesktopPane
//panelMenu
//panelTable
//buttonMenu
//buttonTable

private void buttonMenuMouseClicked(java.awt.event.MouseEvent evt) {                                    

    panelMenu obj = new panelMenu ();
    BasicInternalFrameUI bi = (BasicInternalFrameUI) obj.getUI();
    bi.setNorthPane(null);
    obj.setBounds(0, 0, 1220, 700);//your desired values
    obj.setVisible(true);
    yourDesktopPane.add(obj);
    obj.toFront();
}

private void buttonTableMouseClicked(java.awt.event.MouseEvent evt) {                                    

    panelTableobj = new panelTable();
    BasicInternalFrameUI bi = (BasicInternalFrameUI) obj.getUI();
    bi.setNorthPane(null);
    obj.setBounds(0, 0, 1220, 700);//your desired values
    obj.setVisible(true);
    yourDesktopPane.add(obj);
    obj.toFront();
}

避免使用
null
布局,像素完美的布局在现代ui设计中是一种错觉。影响零部件单个尺寸的因素太多,您无法控制。Swing旨在与核心的布局管理器一起工作,丢弃它们将导致无止境的问题,您将花费越来越多的时间试图纠正
JDesktopPane
扩展自
JLayeredPane
。您可以尝试使用
JInternalFrame#moveToFront
,但这可能不起作用,因为面板可能已添加到与内部框架相同或更高的位置。有关更多详细信息,请参阅提供了一个演示您的问题的文档。这将减少混乱和更好的响应
//yourDesktopPane
//panelMenu
//panelTable
//buttonMenu
//buttonTable

private void buttonMenuMouseClicked(java.awt.event.MouseEvent evt) {                                    

    panelMenu obj = new panelMenu ();
    BasicInternalFrameUI bi = (BasicInternalFrameUI) obj.getUI();
    bi.setNorthPane(null);
    obj.setBounds(0, 0, 1220, 700);//your desired values
    obj.setVisible(true);
    yourDesktopPane.add(obj);
    obj.toFront();
}

private void buttonTableMouseClicked(java.awt.event.MouseEvent evt) {                                    

    panelTableobj = new panelTable();
    BasicInternalFrameUI bi = (BasicInternalFrameUI) obj.getUI();
    bi.setNorthPane(null);
    obj.setBounds(0, 0, 1220, 700);//your desired values
    obj.setVisible(true);
    yourDesktopPane.add(obj);
    obj.toFront();
}