Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Как изменить порядок отрисовки компонент?


Автор: Royan 17.4.2005, 19:34
Приветствую!
Допустим я добавил в окошко две кнопки. И пусть они они у меня друг на дружку накладываются, как мне поменять их местами.
Рассмотрим пример (еще раз спасибо Domestic Cat):
Код

import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.Window;
public class test01 
{   
    public static void main(String [] args)
    {       
        Frame frm = new Frame("MyApp");
        Window wnd = new Window(frm);        
        frm.setSize(300, 300);
        wnd.setSize(300, 300);
        Button b1 = new Button("Do nothing 1");
        Button b2 = new Button("Do nothing 2");
        Panel panel = new Panel();
        panel.setLayout(null);
        b1.setBounds(50, 40, 100, 22);
        b2.setBounds(70, 45, 150, 22);
        panel.add(b1);
        panel.add(b2);        
        wnd.add(panel);  
        wnd.show();
        try {
            /* 5 seconds delay */
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.exit(0);
    }
}

Сейчас b1 отображается поверх b2, как заставить b2 отображаться поверх b1?
Спасибо!

Автор: Domestic Cat 17.4.2005, 19:57
Код

import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.Window;
public class test01 
{   
    public static void main(String [] args)
    {       
        Frame frm = new Frame("MyApp");
        Window wnd = new Window(frm);        
        frm.setSize(300, 300);
        wnd.setSize(300, 300);
        Button b1 = new Button("Do nothing 1");
        Button b2 = new Button("Do nothing 2");
        Panel panel = new Panel();
        panel.setLayout(null);
        b1.setBounds(50, 40, 100, 22);
        b2.setBounds(70, 45, 150, 22);
        panel.add(b1);
        panel.add(b2);        
        wnd.add(panel);  
        wnd.show();
        try {
            /* 5 seconds delay */
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        panel.remove(b1);
        panel.add(b1);
        try {
            /* 5 seconds delay */
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.exit(0);
    }
}

Заметь какую кнопку я убираю и добавляю - ту что поверх.

Автор: batigoal 17.4.2005, 21:05
А может, попробовать сделать кнопку невидимой? Или нажатие все равно будет ловиться?

Автор: Domestic Cat 17.4.2005, 21:23
Цитата(Lamer @ 17.4.2005, 12:05)
А может, попробовать сделать кнопку невидимой? Или нажатие все равно будет ловиться?

smile

Автор: batigoal 18.4.2005, 11:15
Я имею в виду
Код

b1.setVisible(false);

Автор: Domestic Cat 18.4.2005, 17:49
Так задача не в том, чтобы скрыть, а в том, чтобы вынести на передний план.

Автор: batigoal 18.4.2005, 18:00
Ну ведь если одна скроется, то вторая автоматом станет видна. Проверил - если сделать кнопку невидимой, то она становится ваще невидимой, и места не занимает.

Автор: Domestic Cat 18.4.2005, 18:27
А если ее показать - изменится порядок отрисовки?

Автор: batigoal 18.4.2005, 21:30
Нет. Просто станет видна нижняя кнопка вместо верхней.

Автор: Domestic Cat 18.4.2005, 21:33
Не понял я. Ты запусти мой код тут и посмотри на результат (он через 5 секунд идет.)

Автор: batigoal 18.4.2005, 21:43
Твой код работает (не запускал, но вроде должен). Я просто предложил другой вариант, как альтернативу.

Автор: Domestic Cat 19.4.2005, 00:09
Дело в том, что твой вариант не сработает просто.

Автор: Royan 19.4.2005, 10:02
Domestic Cat, Моя признательность, эти хинты явно заработаны долгим и упорным трудом!

Автор: Royan 19.4.2005, 14:48
Единственное что хочу добавить по коду, наверно следует сделать указать размеры панели (panel.setSize(300, 300);), чтобы при wnd.pack() окошко не пропадало

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)