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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание кастомной таблицы, Скриншот прилагается 
:(
    Опции темы
Kangaroo
Дата 8.5.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

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



Всем привет.

Помогите реализовать таблицу как в аттаче, может кто-нибудь делал похожее.
Разноцветные ряды это не проблема, а вот раскрывающийся ряд (как дерево) - тут нужна помощь.

Спасибо!

Присоединённый файл ( Кол-во скачиваний: 45 )
Присоединённый файл  table.jpg 75,81 Kb


--------------------
Lost....
PM MAIL MSN   Вверх
dorogoyIV
Дата 8.5.2008, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 smile  ну вот набросал навскидку, нагородил конечно...  smile 
Код

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

public class TableTree extends JFrame
                       implements MouseListener
{
 JTable table;
 static Vector <Integer> parent_rows = new Vector <Integer> ();//массив строк, которые НЕ будут скрываться
 static Vector <Integer> hide_rows = new Vector <Integer> ();//массив строк, которые будут скрываться

 public TableTree()
 {
  table = new JTable(27, 4);

  for(int i=0; i < table.getRowCount(); i++)
  {
   if((i % 3) != 0)
   {
    hide_rows.addElement(i);
    table.setRowHeight(i, 1);
   }
   else
    parent_rows.addElement(i);
  }

  add(new JScrollPane(table));
  table.addMouseListener(this);
 }

 public void mouseEntered(MouseEvent e){}
 public void mouseExited(MouseEvent e){}
 public void mousePressed(MouseEvent e){}
 public void mouseReleased(MouseEvent e){}
 public void mouseClicked(MouseEvent e)
 {
  int row = table.getSelectedRow();

//в этом цикле скрываю все строки hide_rows
  for(int i = 0; i < table.getRowCount(); i++)
  {
   if(hide_rows.contains(i))
   {
    table.setRowHeight(i, 1);
   }
  }

//здесь открываю скрытые строки
//я поленился, и написал только для трех строк :)
//ну все таки это всего лишь набросочек, надеюсь простишь? :)
  for(int i = row; i < 3 + row; i++)
  {
   table.setRowHeight(i, table.getRowHeight(0));
  }
 }

 public static void main(String [] args)
 {
  JFrame f = new TableTree();
  f.setBounds(100, 100, 400, 300);
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

вектор здесь неудобно использовать  smile 
насчет плюсиков/минусиков - их можно положить на JScrollPane в поле rowHeader

ну, я думаю, разберешься, и сделаешь все путем  smile 
хотя возможно найдешь другое решение!
PM MAIL   Вверх
ivg
Дата 8.5.2008, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



google: Swing TreeTable
smile 
PM MAIL   Вверх
Kangaroo
Дата 8.5.2008, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

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



dorogoyIV, спасибо за вариант  smile
На выходных буду еще пробовать, делать, посмотрим, что получиться. Пока ждем еще идей и предложений

Добавлено через 5 минут и 35 секунд
Цитата(ivg @  8.5.2008,  22:45 Найти цитируемый пост)
google: Swing TreeTable


Это само собой  smile Куда ж без гугла. 

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



--------------------
Lost....
PM MAIL MSN   Вверх
dorogoyIV
Дата 9.5.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 smile вот такое у меня получилось  smile 
я так и оставил для трех строк на доработку кому нибудь  smile 
Код

import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.table.*;
import javax.swing.*;
import javax.swing.border.*;

public class TableTree extends JFrame
                       implements MouseListener
{
 JTable table;
 JPanel jp = new JPanel(null);
 JLabel [] jl;
 static Vector <Integer> parent_rows = new Vector <Integer> ();//массив строк, которые не будут скрываться
 static Vector <Integer> hide_rows = new Vector <Integer> ();//массив строк, которые будут скрываться

 public TableTree()
 {
  table = new JTable(18, 4);
  jp.setPreferredSize(new Dimension(20, 2000));

  for(int i=0; i < table.getRowCount(); i++)
  {
   if((i % 3) != 0)
   {
    hide_rows.addElement(i);
    table.setRowHeight(i, 1);
   }
   else
   {
    parent_rows.addElement(i);
   }
  }

  JViewport viewport = new JViewport();
  viewport.setView(jp);
  JScrollPane jsp = new JScrollPane(table);
  jsp.setRowHeader(viewport);
  add(jsp);

  jl = new JLabel [parent_rows.size()];
  for(int i = 0; i < jl.length; i++)
  {
   jl [i] = new JLabel("+", JLabel.CENTER);
   jl [i].setOpaque(true);
   jl [i].setBackground(Color.yellow);
   jl [i].setBorder(new BevelBorder(BevelBorder.RAISED));
   jl [i].addMouseListener(this);
   jp.add(jl [i]);
  }
  drawLabels();
 }

 public void drawLabels()
 {
  for(int i = 0; i < parent_rows.size(); i++)
  {
   Rectangle r = new Rectangle(table.getCellRect(parent_rows.elementAt(i), 0, true));
   jl [i].setBounds(r.x, r.y, 20, r.height);
  }
 }

 public void mouseEntered(MouseEvent e){}
 public void mouseExited(MouseEvent e){}
 public void mousePressed(MouseEvent e){}
 public void mouseReleased(MouseEvent e){}

 public void mouseClicked(MouseEvent e)
 {
  JLabel l = (JLabel)e.getSource();

  if(l.getText().equals("+"))
  {
   expandRows(l);
   l.setText("-");
  }
  else
  {
   collapseRows(l);
   l.setText("+");
  }
  drawLabels();
 }

 public void expandRows(JLabel l)
 {
  int row = table.rowAtPoint(l.getLocation());

  for(int i = row; i < 3 + row; i++)
  {
   table.setRowHeight(i, table.getRowHeight(0));
  }
 }

 public void collapseRows(JLabel l)
 {
  int row = table.rowAtPoint(l.getLocation());

  for(int i = row + 1; i < 3 + row; i++)
  {
   table.setRowHeight(i, 1);
  }
 }

 public static void main(String [] args)
 {
  JFrame f = new TableTree();
  f.setBounds(100, 100, 400, 300);
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 18.12.2007
Где: BW,Stuttgart

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



Kangaroo
Если подойдёт SWT реализация - могу скинтуь.
PM MAIL ICQ   Вверх
Kangaroo
Дата 9.5.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

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



dorogoyIV, все лучше и лучше  smile 


Цитата(Zlatogorov @  9.5.2008,  11:41 Найти цитируемый пост)
Если подойдёт SWT реализация - могу скинтуь. 

Нет, спасибо. Только Свинг.


--------------------
Lost....
PM MAIL MSN   Вверх
dorogoyIV
Дата 9.5.2008, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Kangaroo @  9.5.2008,  11:44 Найти цитируемый пост)
dorogoyIV, все лучше и лучше   

ну там уже мелочи остаются - установить цвета, ширину строк, размеры плюсиков, ...
это на свой вкус пожалуйста делайте  smile 
PM MAIL   Вверх
Kangaroo
Дата 9.5.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

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



Цитата(dorogoyIV @  9.5.2008,  15:41 Найти цитируемый пост)

ну там уже мелочи остаются - установить цвета, ширину строк, размеры плюсиков, ...
это на свой вкус пожалуйста делайте  smile  

Да, это понятно. Спасибо  smile . Просто ща другое делаю. Вернусь к табличке - буду красоту наводить.


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

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

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


 




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


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

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