Java - JLabel губи изображение и се появява ново отпред

Имам голям JLabel с картина, където бих искал веднага щом потребителят натисне мишката върху него, да загуби изображението си и в него да се появят други малки картинки, близо една до друга. Като родословно дърво, където основното изображение е дърво и когато се влезе с мишката, малки снимки на плебси се появяват една до друга, като снимката по-долу. Използвам:

JLabel c = new JLabel();
c.setBorder(new EtchedBorder(EtchedBorder.RAISED));
c.setIcon(new ImageIcon("C:\\Users\\Lud\\Desktop\\family\\tree.png"));
c.setBackground(new Color(192, 192, 192));
c.setOpaque(true);
c.setBounds(5, 5, 256, 256);

    c.addMouseListener(new MouseAdapter() {
        public void mouseEntered(MouseEvent me) {
            c.setIcon(null);
            JLabel c1 = new JLabel();
            c1.setIcon(new ImageIcon("C:\\Users\\Lud\\Desktop\\family\\george.png"));
            c1.setBounds(10, 10, 32, 32);
            add(c1);
        }
        public void mouseExited(MouseEvent me) {

        }
    });
    add(c);

Основното JLabel/дървообразно изображение изглежда добре, но когато вляза с мишката върху него, то просто губи своите изображения, без да показва новото над него. Какво правя грешно? Благодаря

въведете описание на изображението тук


person darkchampionz    schedule 27.10.2015    source източник
comment
Съгласен съм с HovercraftFullOfEels, но ако все пак искате да правите както го направихте, можете да добавите c.setVisible(false); вместо c.setIcon(null); преди да създадете нов етикет. JLabel c1 = нов JLabel();   -  person Earthx9    schedule 27.10.2015
comment
Новият jlabel все още не се вижда :|   -  person darkchampionz    schedule 27.10.2015
comment
Опитахте ли да добавите ' c1.setVisible(true);' след JLabel c1 = нов JLabel(); c1.setIcon(нова ImageIcon(C:\\Users\\Lud\\Desktop\\family\\george.png)); c1.setBounds(10, 10, 32, 32);   -  person Earthx9    schedule 27.10.2015
comment
Да, поставих го видимо, преди да го добавя. Сега работи добре, въпреки че ще трябва да преработя кода си след това, което беше предложено тук. Благодаря за вашата помощ   -  person darkchampionz    schedule 27.10.2015
comment
Моля. Добре е, ако ти е помогнало.   -  person Earthx9    schedule 27.10.2015


Отговори (1)


Не създавайте нов JLabel, а просто задайте иконата върху съществуващия JLabel.

Като странична препоръка, моля, разберете, че докато null layouts и setBounds() може да изглеждат като най-лесния и най-добрия начин за създаване на сложни GUI на начинаещите Swing, колкото повече Swing GUI създавате, толкова по-сериозни трудности ще срещнете, когато ги използвате. Те няма да преоразмеряват вашите компоненти, когато графичният потребителски интерфейс се преоразмерява, те са кралска вещица за подобряване или поддържане, те се провалят напълно, когато са поставени в панели за превъртане, изглеждат адски ужасно, когато се гледат на всички платформи или разделителни способности на екрана, които са различни от оригиналната .

person Hovercraft Full Of Eels    schedule 27.10.2015
comment
Да, но бих искал потребителите да могат да реагират с новите JLabels, например да задържат курсора на мишката върху една снимка и да показват възрастта на човека и т.н. - person darkchampionz; 27.10.2015
comment
@darkchampionz: все още можете да направите това с оригиналния JLabel! - person Hovercraft Full Of Eels; 27.10.2015