Java 为什么大型机JButton出现在JInternalFrame的前台?
我正在创建一个Swing应用程序。我有一个主Java 为什么大型机JButton出现在JInternalFrame的前台?,java,swing,jinternalframe,jdesktoppane,Java,Swing,Jinternalframe,Jdesktoppane,我正在创建一个Swing应用程序。我有一个主JFrame和一个JDesktopPane。我在主框架上添加了一个按钮和一个标签。但如果我打开主框架按钮上的任何JInternalFrame,标签就会覆盖内部框架 (JButton和JLabel出现在JInternalFrame的前景)。如果单击“内部帧”按钮,则转到背景 你能帮我解决这个问题吗 import java.awt.Color; import java.awt.FlowLayout; import java.awt.Font; import
JFrame
和一个JDesktopPane
。我在主框架上添加了一个按钮和一个标签。但如果我打开主框架按钮上的任何JInternalFrame
,标签就会覆盖内部框架
(JButton
和JLabel出现在JInternalFrame
的前景)。如果单击“内部帧”按钮,则转到背景
你能帮我解决这个问题吗
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Point;
import java.awt.Rectangle;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
public class MainFrame {
JFrame frame1 ;
JDesktopPane desktop ;
public MainFrame () {
frame1 = new JFrame("EMPLOYEE LEAVE TRACKER");
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setExtendedState(Frame.MAXIMIZED_BOTH);
frame1.repaint();
desktop = new JDesktopPane(); //Creates a new JDesktopPane.
frame1.setContentPane(desktop);
frame1.setSize(900,700);
frame1.setVisible(true);
desktop.setBackground(Color.DARK_GRAY );
//Creates a JLabel on JDesktopPane.
JLabel label1 = new JLabel("EMPLOYEE LEAVE TRACKER", SwingConstants.CENTER);
label1.setFont(new Font("SansSerif",Font.ITALIC + Font.BOLD,54));
label1.setBounds(new Rectangle(new Point(275, 100),label1.getPreferredSize()));
//Creates a JButon on JDesktopPane.
JButton Leave = new JButton("Leave Management");
Leave.setHorizontalTextPosition(JButton.CENTER);
Leave.setBounds(new Rectangle(new Point(700,200),Leave.getPreferredSize()));
Leave.setSize(300, 300);
Leave.addActionListener(new java.awt.event.ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent e) {
frame1.add(LeaveManagment());
}
});
//Look and Feel
try {
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
} catch(Exception e) {
System.out.println("Error setting native LAF: " + e);
}
desktop.add(Leave);
desktop.add(label1);
}
//Creating JInternalFrame
public JInternalFrame LeaveManagment(){
final JInternalFrame employeeFrame = new JInternalFrame("LEAVE M" +
"ANAGEMNT", true, true, true, true);
employeeFrame.getContentPane().setBackground(Color.white);
employeeFrame.setSize(900,700);
employeeFrame.setVisible(true);
employeeFrame.setMaximizable(true);
employeeFrame.setResizable(true);
JComponent c = (JComponent)
employeeFrame.getContentPane();
c.setLayout(new FlowLayout());
return employeeFrame;
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MainFrame ();
}
});
}}
听上去,您已经将按钮添加到了
JDesktopPane
桌面窗格是一种类型的JLayeredPane
,它允许您将组件放置在我们将要讨论的层上
虽然这是一个整洁的功能,但是在桌面上应该只显示JinternalFrame和偶尔出现的特殊“窗口”(尽管桌面管理器使用一种按钮来表示最小化的窗口)
就我个人而言,我会把按钮也放在哪里,而不是放在桌面上
看一看从它的声音中,您已经将按钮添加到了
JDesktopPane
桌面窗格是一种类型的JLayeredPane
,它允许您将组件放置在我们将要讨论的层上
虽然这是一个整洁的功能,但是在桌面上应该只显示JinternalFrame和偶尔出现的特殊“窗口”(尽管桌面管理器使用一种按钮来表示最小化的窗口)
就我个人而言,我会把按钮也放在哪里,而不是放在桌面上
看一看,程序员是对的。一种解决方案是将组件添加到相应的JLayeredPane层。i、 e
// Note name change of JButton to adhere to Java naming standards:
desktop.add(leaveManagementBtn, JLayeredPane.DEFAULT_LAYER);
desktop.add(label1, JLayeredPane.DEFAULT_LAYER); // note layer component being added to
以及
同样,MadProgrammer是对的,按钮不应该在JDesktopFrame上,而应该在桌面的按钮栏上。我建议你接受他的回答。程序员说得对。一种解决方案是将组件添加到相应的JLayeredPane层。i、 e
// Note name change of JButton to adhere to Java naming standards:
desktop.add(leaveManagementBtn, JLayeredPane.DEFAULT_LAYER);
desktop.add(label1, JLayeredPane.DEFAULT_LAYER); // note layer component being added to
以及
同样,MadProgrammer是对的,按钮不应该在JDesktopFrame上,而应该在桌面的按钮栏上。我建议您接受他的回答。请编辑您的问题,以包含一个显示您描述的问题的答案。问题的代码未显示。请参阅对您的SSCCE的答复。@MadProgrammer的答案是正确的。请编辑您的问题,以包含一个显示您描述的问题的答案。问题的代码未显示。请参阅对您的SSCCE的答复。@MadProgrammer的答案是正确的。