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


Автор: BlHol 10.2.2006, 12:25
Добрый день!

В JBuildere в дизайнере рисую компонент jTabbedPane1.
Добавляю к нему несколько ярлычков:

Код


jTabbedPane1.addTab("Panel1",null);

    jTabbedPane1.addTab("Panel2",null);
    jTabbedPane1.addTab("Panel3",null);
        contentPane.add(jTabbedPane1, null);
    jTabbedPane1.add(jPanel1,  "jPanel1");


Задача такая. При клике на ярлычке он должен заливаться каким-либо цветом. При этом, этим же цветом должен заливаться и весь компонент, НО остальные ярлычки не должны менять цвет

Вот обработчик клика:

Код

void jTabbedPane1_mouseClicked(MouseEvent e) {
    jTabbedPane1.setBackground(Color.darkGray);
    
  }



Как решить проблему?
Заранее благодарен.
С уважением.

Автор: LSD 10.2.2006, 12:29
Под ярлычком подразумевается закладка TabbedPane?

Автор: BlHol 10.2.2006, 12:46
Она, самая!
Забыл добавить, что результат таков: при клике окрашиваются и ярлычки, а не нужно, чтоб окрашивались.

Автор: LSD 10.2.2006, 14:25
Ничего не понял, что надо сделать?
Цитата(BlHol @ 10.2.2006, 12:25 Найти цитируемый пост)
При клике на ярлычке он должен заливаться каким-либо цветом. При этом, этим же цветом должен заливаться и весь компонент, НО остальные ярлычки не должны менять цвет

Цитата(BlHol @ 10.2.2006, 12:46 Найти цитируемый пост)
при клике окрашиваются и ярлычки, а не нужно, чтоб окрашивались



Отрисовка закладки полностью лежит на TabbedPaneUI и без его переписывания не обойтись. В принципе это реализуемо, но надо смотреть чтобы твой компонент не выделялся среди других компонентов. Если интерестно могу посмотреть, но позже.

Автор: BlHol 10.2.2006, 14:49
Сделать нужно вот что.

Есть три закладки TabbedPane. Когда кликаем по одной из них, она выходит на передний план. Но этого мало. Нужно, чтоб при клике закладка окрашивалась, например, в синий. Причем, не только сам ярлычок, но и вся панелька. При этом нужно, чтобы 2 оставшихся (неактивных) ярлычка свой цвет не меняли. А у меня получается, что при клике окрашивается и активный и неактивные ярлычки.

Автор: powerOn 10.2.2006, 15:00
используй методы

setForegroundAt(int index, Color c);
setBackgroundAt(int index, Color c);

Для компонента JTabbedPane естественно. index - номер вкладки. Сolor - цвет.

Автор: LSD 10.2.2006, 15:34
Для того чтобы гарантировано изменить цвет закладки нужно переписать UI.
Для Metal такой код сработает:
Код
UIManager.getDefaults().put("TabbedPane.selected", Color.BLUE);

А для Windows нет.

Автор: powerOn 10.2.2006, 15:42
Цитата

Для того чтобы гарантировано изменить цвет закладки нужно переписать UI.
Для Metal такой код сработает:

код Java
1:
UIManager.getDefaults().put("TabbedPane.selected", Color.BLUE);

А для Windows нет.


ИМХО, достаточно изменить цвет надписи ярлычка на более яркий, и получить прекрасное выделение закладки. Это работает везде. А изменение цвета фона уже пребор. Впрочем, автору виднее...

Автор: BlHol 10.2.2006, 15:58
Цитата(MoonCat @ 10.2.2006, 15:00)
используй методы

setForegroundAt(int index, Color c);
setBackgroundAt(int index, Color c);

Для компонента JTabbedPane естественно. index - номер вкладки. Сolor - цвет.


Благодарствую!
Только зразу возникает вопрос: как "поймать" номер вкладки при клике?

Ведь int index нужно откуда-то получить.

Заранее благодарен.
С уважением.

Автор: LSD 10.2.2006, 16:01
Код
tabbedPane.addChangeListener(new ChangeListener()
{
  public void stateChanged(ChangeEvent e)
  {
    JTabbedPane tabbedPane = (JTabbedPane) e.getSource();
    int selected = tabbedPane.getSelectedIndex()
  }
});

Автор: powerOn 10.2.2006, 16:08
Обрабатываешь событие изменения состояния JTabbedPane для того чтобы в момент изменения поменять цвета у вкладки. Для получения текущей вкладки используй
jTabbedPane1.getSelectedIndex(). Но незабудь сменить цвета у вкладки которая уже не является активной. Для этого её номер (видимо) придется сохранять в какой-нибудь переменной.


Код

jTabbedPane1.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                jTabbedPane1.setForegroundAt(jTabbedPane1.getSelectedIndex(), Color.Red);

            }
        });



опередили..... smile smile

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