Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSplitPane, как связать 2 сплита на изменение одного 
V
    Опции темы
cube
Дата 10.12.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 1
Всего: 3



Мне нужно свзать два сплита так чтобы при изменение размеров одного изменялись размеры другого...

на рисунке показано стрелками влево и вправо показано перемещение одного разделителя, расстояние должно оставаться неизменным...  smile 

Присоединённый файл ( Кол-во скачиваний: 33 )
Присоединённый файл  3.GIF 10,09 Kb
PM MAIL   Вверх
serger
Дата 11.12.2007, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: нет
Всего: 5



А если  void setDividerSize(int newSize) ?


--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
cube
Дата 11.12.2007, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 1
Всего: 3



Цитата(serger @ 11.12.2007,  07:55)
А если  void setDividerSize(int newSize) ?

нет!

как понятно у меня два сплита treeSplitLeft и treeSplitRight. К каждому я добавляю слушателя событий на изменение свойств, при запуске программы естественно возникает СтэкОверфлоуЕррор...

Мне нужно как бы связаьт два слита так чтобы они одновременно изменяли размер при изменении одного из них... т.е. если я буду двигать левый сплит в право, мне нужно чтобы на столько же подвинулся и правый... или наоборот правый сплит в лево, чтобы на столько же передвинулся левый

Код

    treeSplitLeft.addPropertyChangeListener(new PropertyChangeListener() {

      public void propertyChange(PropertyChangeEvent evt) 
      {
        if (evt.getPropertyName().equalsIgnoreCase("dividerLocation")){
          try
          {
            int move = Integer.parseInt(evt.getNewValue().toString()) - Integer.parseInt(evt.getOldValue().toString());
            treeSplitRight.setDividerLocation(treeSplitRight.getDividerLocation() + move);
          }catch(Exception e){}
        }            
      }
    });

    treeSplitRight.addPropertyChangeListener(new PropertyChangeListener() 
    {
      public void propertyChange(PropertyChangeEvent evt) 
      {
        if (evt.getPropertyName().equalsIgnoreCase("dividerLocation")){
          try
          {
            int move = Integer.parseInt(evt.getNewValue().toString()) - Integer.parseInt(evt.getOldValue().toString());
            treeSplitLeft.setDividerLocation(treeSplitLeft.getDividerLocation() + move);
          }catch(Exception e){}
        }            
      }
    });


PM MAIL   Вверх
dorogoyIV
Дата 11.12.2007, 12:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Split extends JFrame
{
 JSplitPane sp,sp2;
 JPanel jp=new JPanel();
 JPanel jp2=new JPanel();
 JPanel jp3=new JPanel();

 Split()
 {
  setBounds(100,100,400,300);
  setLayout(new BorderLayout());

  jp.setLayout(new FlowLayout());
  jp.setBackground(Color.red);
  jp.setPreferredSize(new Dimension(100,200));

  jp2.setLayout(new FlowLayout());
  jp2.setBackground(Color.green);
  jp2.setPreferredSize(new Dimension(100,200));

  jp3.setLayout(new FlowLayout());
  jp3.setBackground(Color.blue);
  jp3.setPreferredSize(new Dimension(100,200));

  sp2=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                         true, jp2, jp3);
  sp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
                         true, jp, sp2);

  add(sp);

  jp2.addComponentListener(new ComponentAdapter()
  {
   public void componentResized(ComponentEvent e)
   {
    if(jp2.getWidth() != jp2.getPreferredSize().width)
    {
     sp.setDividerLocation(sp2.getDividerLocation() - 
                           jp2.getPreferredSize().width +
                           sp.getDividerLocation());
    }
   }
  });
 }

 public static void main(String[]args)
 {
  JFrame f=new Split();
  f.setVisible(true);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
}


PM MAIL   Вверх
cube
Дата 11.12.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 1
Всего: 3



да... все именно так!!! интресное решение, спасибо!
(кто нить добавте ему репутацию, как наберу посты - отдам долг)))
PM MAIL   Вверх
cube
Дата 26.2.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 1
Всего: 3



А как быть с вертикальным сплитом?

Код


    JSplitPane splitA = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true);
    JSplitPane splitB = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true);

    JPanel panel = new JPanel();
    panel.setPreferredSize(new Dimension(300,50));

    splitA.add(new JPanel(), JSplitPane.TOP);
    splitA.add(panel, JSplitPane.BOTTOM);

    splitB.add(splitA, JSplitPane.TOP);
    splitB.add(new JPanel(), JSplitPane.BOTTOM);


    panel.addComponentListener(new ComponentAdapter()
    {
      @Override
      public void componentResized(ComponentEvent e)
      {
       if(panel.getHeight() != panel.getPreferredSize().height)
         splitA.setDividerLocation(splitB .getDividerLocation()- panel.getPreferredSize().height);
      }
    });


Вот так работает только тогда, когда "тянешь" только за один сплит - нижний
PM MAIL   Вверх
dorogoyIV
Дата 27.2.2008, 13:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Код

  splitA.add(new JPanel(), JSplitPane.TOP);
  splitA.add(splitB /*panel*/, JSplitPane.BOTTOM);

  splitB.add(panel /*splitA*/, JSplitPane.TOP);
  splitB.add(new JPanel(), JSplitPane.BOTTOM);

  add(splitA);

  panel.addComponentListener(new ComponentAdapter()
  {
   public void componentResized(ComponentEvent e)
   {
    if(panel.getHeight() != panel.getPreferredSize().height)
    {
     splitA.setDividerLocation(splitB.getDividerLocation() -
                       panel.getPreferredSize().height +
                       splitA.getDividerLocation());
    }
   }
  });

PM MAIL   Вверх
cube
Дата 27.2.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 11.4.2007

Репутация: 1
Всего: 3



Спасибо тебе! (блин я столько голову ломал)  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0617 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.