Есть ли ограничение на количество слоев для JLayeredPane в Java? - PullRequest
0 голосов
/ 02 июля 2010

У меня есть Java-приложение для УВД.Я только начал работать с GUI.Сначала у меня есть мэйнфрейм, JLayeredPane на этом мэйнфрейме и панели с метками (ImageIcons) внутри них на JLayeredPane.

Я успешно добавил около 4 панелей (панели имеют метки, а метки ImageIcons) к JLayeredPane.Когда я добавляю пятую панель, она отображает неправильный графический интерфейс.

Это то, что я получаю до добавления pnlplane (4 слоя):

Вот что я получаю (когда пытаюсь добавить плоскость - 5 слоев [проблема]):

Вот что я должен был получить:

import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

public class GUI extends JFrame {

JFrame main = new JFrame();

JLayeredPane jp = new JLayeredPane();

//Add JPanels here
JPanel pnlbackground = new JPanel();
JPanel pnlrunwayone = new JPanel();
JPanel pnlrunwaytwo = new JPanel();
JPanel pnlholding = new JPanel();
JPanel pnlplane = new JPanel();




//Add ImageIcons here
ImageIcon imgbackground = new ImageIcon("background.gif");
ImageIcon imgrunwayone = new ImageIcon("runway01.gif");
ImageIcon imgrunwaytwo = new ImageIcon("runway01.gif");
ImageIcon imgholding = new ImageIcon("holding01.gif");
ImageIcon imgplane = new ImageIcon("plane.gif");




//Add JLabels here
JLabel lblbackground = new JLabel(imgbackground);
JLabel lblrunwayone = new JLabel(imgrunwayone);
JLabel lblrunwaytwo = new JLabel(imgrunwaytwo);
JLabel lblholding = new JLabel(imgholding);
JLabel lblplane = new JLabel(imgplane);




public GUI() {

    //Background
    pnlbackground.setOpaque(false);
    pnlbackground.setBounds(0, -5, 1024, 768);
    pnlbackground.add(lblbackground);

    //Runway one
    pnlrunwayone.setOpaque(false);
    pnlrunwayone.setBounds(170, 404, 685, 39);
    pnlrunwayone.add(lblrunwayone);

    //Runway two
    pnlrunwaytwo.setOpaque(false);
    pnlrunwaytwo.setBounds(170, 443, 685, 39);
    pnlrunwaytwo.add(lblrunwaytwo);

    //        Holding pattern
    pnlholding.setOpaque(false);
    pnlholding.setBounds(0, 00, 330, 143);
    pnlholding.add(lblholding);

    //plane
    pnlholding.setOpaque(false);
    pnlholding.setBounds(0, 0, 48, 60);
    pnlholding.add(lblplane);


    //Adding them to each other
    add(jp);
    jp.add(pnlbackground, new Integer(0));
    jp.add(pnlrunwayone, new Integer(1));
    jp.add(pnlrunwaytwo, new Integer(2));
    jp.add(pnlholding, new Integer(3));
    jp.add(pnlplane, new Integer(4));




    //MainFrame properties
    setSize(1024, 768);
    setBackground(Color.BLACK);
    setTitle("Air Traffic Control");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setVisible(true);


}

public static void main(String[] args) {

    new GUI();

}
}

Самый простой выход - это пойти исобрать все изображения в одно большое изображение в фотошопе.Тем не менее, я хотел бы знать, есть ли другие доступные исправления.

1 Ответ

0 голосов
/ 02 июля 2010

Мне кажется, ваш код работает нормально.То есть я вижу 5 изображений.

Это выглядит немного странно:

pnlholding.setOpaque(false); 
pnlholding.setBounds(0, 00, 330, 143); 
pnlholding.add(lblholding); 

//plane 
pnlholding.setOpaque(false); 
pnlholding.setBounds(0, 0, 48, 60); 
pnlholding.add(lblplane); 

Я думаю, что lblplane нужно добавить в pnlplane.

Еще проще добавитьметка непосредственно на многоуровневую панель, нет необходимости сначала добавлять ее на панель.Так работает учебник по Swing на Как использовать многоуровневые панели .

...