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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTabbedPane схлопывание 
:(
    Опции темы
seomazzi
Дата 8.3.2012, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть JTabbedPane,  подскажите как сделать схлопнуть содержимое вкладки

Код


public class Testing {
    public void buildGUI() {
        JTabbedPane tp = new JTabbedPane();
        tp.addTab("A", getPanel("A"));
    

        JFrame f = new JFrame();
        f.getContentPane().add(tp);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

    public JPanel getPanel(String tabText) {
        JPanel p = new JPanel();
        p.add(new JLabel(tabText));
        return p;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Testing().buildGUI();
            }
        });
    }
}


Т.е. есть

user posted image

А хотелось бы допустим по клику сворачивать содержимое

user posted image

 

Это сообщение отредактировал(а) seomazzi - 9.3.2012, 09:21
PM MAIL   Вверх
dorogoyIV
Дата 9.3.2012, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

 ...
 implements MouseListener
 ...
 tp.addMouseListener(this);
 ...

 public void mouseClicked(MouseEvent e)
 {
  Component comp = tp.getSelectedComponent();
  tp.setPreferredSize(new Dimension(0, 0));
  JFrame main = (JFrame)tp.getParent().getParent().getParent().getParent(); // бред блин :) (лучше сделай ссылку на JFrame,
                                                                                   // через которую можно легко обращаться к нему)
  main.pack();
 }


Это сообщение отредактировал(а) dorogoyIV - 9.3.2012, 03:08
PM MAIL   Вверх
seomazzi
Дата 9.3.2012, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Немного не так работает. Привел пример ближе к реальности

Код


public class Testing implements MouseListener {
    private JTabbedPane tp;
    private JFrame f;
    private JPanel mainP;

    public void buildGUI() {
        f = new JFrame();
        mainP = new JPanel();
        tp = new JTabbedPane();
        tp.setBackground(Color.BLUE);
        tp.addTab("A", getPanel("A"));
        tp.addMouseListener(this);

        mainP.setLayout(new BoxLayout(mainP, BoxLayout.Y_AXIS));
        mainP.add(tp);
        mainP.add(new JButton("TEST"));
        f.add(mainP);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

    public JPanel getPanel(String tabText) {
        JPanel p = new JPanel();
        p.add(new JLabel(tabText));
        return p;
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        Component comp = tp.getSelectedComponent();
        tp.setPreferredSize(new Dimension(0, 20));
        f.pack();
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Testing().buildGUI();
            }
        });
    }
}




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

Это сообщение отредактировал(а) seomazzi - 9.3.2012, 09:27
PM MAIL   Вверх
dorogoyIV
Дата 9.3.2012, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



тогда так:
Код

 public void mouseClicked(MouseEvent e)
 {
  int index = tp.getSelectedIndex();
  Rectangle rect = tp.getBoundsAt(index);
  tp.setPreferredSize(new Dimension(0, rect.height));
  ...

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


Новичок



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

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



Не работает не фига блин. Такое впечатление что  setPreferredSize вообще не отрабатывает. 
PM MAIL   Вверх
dorogoyIV
Дата 10.3.2012, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



да что ж не работает то?! (старался код оставить оригинальным... ;) )
Код

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

public class Main implements ActionListener, MouseListener

{
 JFrame f = new JFrame();
 JTabbedPane tp = new JTabbedPane();
 JButton jb = new JButton("change placement");
 private int [] placement = {JTabbedPane.TOP,
                             JTabbedPane.BOTTOM,
                             JTabbedPane.LEFT,
                             JTabbedPane.RIGHT};

 public void Main()
 {
  tp.addMouseListener(this);

  tp.addTab("A", getPanel("A"));
  tp.addTab("B", getPanel("B"));
  tp.addTab("<html><center>C<br>second line", getPanel("C"));
  tp.addTab("DDDD", getPanel("D"));
    
  f.getContentPane().add(tp);
  f.setBounds(100, 100, 400, 300);
  f.setLocationRelativeTo(null);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  f.setVisible(true);

  f.add(jb, "South");
  jb.addActionListener(this);
 }

 public void actionPerformed(ActionEvent e)
 {
  setPlacement();
 }

 private void setPlacement()
 {
  int i = tp.getTabPlacement();
  i++;
  tp.setTabPlacement(placement [i % 4]);
 }

 public void mouseEntered(MouseEvent e){}
 public void mouseExited(MouseEvent e){}
 public void mouseClicked(MouseEvent e)
 {
  int pm = tp.getTabPlacement();

  if(pm == 1 || pm == 3)
   tp.setPreferredSize(new Dimension(fullWidth() + 8, maxHeight() + 8));
  else
   tp.setPreferredSize(new Dimension(maxWidth() + 8, fullHeight() + 8));

  f.pack();
 }
 public void mousePressed(MouseEvent e){}
 public void mouseReleased(MouseEvent e){}

 private int maxWidth()
 {
  int width = 0;

  for(int i = 0; i < tp.getTabCount(); i++)
  {
   Rectangle rect = tp.getBoundsAt(i);

   if(width < rect.width)
    width = rect.width;
  }
  return width;
 }

 private int maxHeight()
 {
  int height = 0;

  for(int i = 0; i < tp.getTabCount(); i++)
  {
   Rectangle rect = tp.getBoundsAt(i);

   if(height < rect.height)
    height = rect.height;
  }
  return height;
 }

 private int fullWidth()
 {
  int width = 0;

  for(int i = 0; i < tp.getTabCount(); i++)
  {
   Rectangle rect = tp.getBoundsAt(i);
   width += rect.width;
  }
  return width;
 }

 private int fullHeight()
 {
  int height = 0;

  for(int i = 0; i < tp.getTabCount(); i++)
  {
   Rectangle rect = tp.getBoundsAt(i);
   height += rect.height;
  }
  return height;
 }

 public JPanel getPanel(String tabText)
 {
  JPanel p = new JPanel();
  p.add(new JLabel(tabText));
  return p;
 }

 public static void main(String[] args) {
  SwingUtilities.invokeLater(new Runnable() {
   public void run() {
    new Main().Main();
   }
  });
 }
}

PM MAIL   Вверх
dorogoyIV
Дата 10.3.2012, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



забыл описать -  что такое 8.

у компонентов swing есть граница (border)
граница имеет размер 2 пикселя (по умолчанию)

предположим, что, у нас таббедпэйн по умолчанию (т.е. табы вверху)
верхних 2 пикселя + нижних 2 пикселя = 4
таббедпэйн лежит на панели, панель тоже имеет бордер.
верхних 2 пикселя панели + нижних 2 пикселя панели = 4.
итого мы получаем 4 пикселя таббедпэйн + 4 пикселя панели = 8
8

если хочется иметь другие границы (border), то их надо учитывать...

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.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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