0

Swing アプリケーションを作成しています。私は 1 つのメインJFrameJDesktopPane. メインフレームにボタンを1つ、ラベルを1つ追加しました。しかし、メイン フレーム ボタンのいずれかを開く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 ();
      }
});
}}
4

2 に答える 2

3

その音から、ボタンを に追加しましたJDesktopPane

デスクトップ ペインは の一種ですJLayeredPane。これにより、レイヤーにコンポーネントを配置できます。

これはきちんとした機能ですが、私見ですが、JInternalFrames と時折特別な「ウィンドウ」のみがデスクトップに表示されます (ただし、デスクトップ マネージャーは最小化されたウィンドウを表すボタンの種類を使用します)。

個人的には、デスクトップではなく、どこにでもボタンを配置したいと思います。

内部フレームの使用方法とレイヤード ペインの使用方法をご覧ください。

于 2012-10-12T11:51:00.187 に答える
0

MadProgrammer はその通りです。1 つの解決策は、コンポーネントを適切な JLayeredPane レイヤーに追加することです。つまり、

// 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

と、

public void actionPerformed(java.awt.event.ActionEvent e) {
  // again method name capitalization changed to adhere to standard
  // again, component added to appropriate layer
  frame1.add(leaveManagment(), JLayeredPane.PALETTE_LAYER);
}

繰り返しますが、MadProgrammer は正しいです。ボタンは JDesktopFrame ではなく、デスクトップのボタン バーに配置する必要があります。彼の答えを受け入れることをお勧めします。

于 2012-10-16T12:18:23.163 に答える