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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нарисовать поверх JTable 
V
    Опции темы
niasilil
Дата 5.1.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Кликнув на ячейку таблички, надо сделать так чтобы появилась стрелочка показывающая на одну из соседних ячеек - откуда было взято данное. Как нарисовать объект поверх таблицы? Куда копать? 


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
serger
Дата 5.1.2008, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Отрисовывай внутри ячейки
JTable t ...
t.setDefaultRenderer(...)

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

Это сообщение отредактировал(а) serger - 5.1.2008, 11:03


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


Опытный
**


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

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



Цитата(serger @ 5.1.2008,  11:02)
Отрисовывай внутри ячейки
JTable t ...
t.setDefaultRenderer(...)

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

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


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
Kangaroo
Дата 5.1.2008, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



niasilil, 
може на GlassPane рисовать? Но нужно будет высчитывать координаты..


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


Эксперт
***


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

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



еще такой вариант  smile 
Код

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

public class TablePointer extends JFrame
                     implements MouseListener
{
 JTable table;
 MyWindow window=new MyWindow();

 TablePointer()
 {
  setBounds(100, 100, 400, 300);

  table=new JTable(5, 10);
  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)
 {
  Point p=MouseInfo.getPointerInfo().getLocation();
  window.setVisible(true);
  window.setLocation(p);
 }

 public static void main(String[] args)
 {
  try
  {
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
   JFrame f = new TablePointer();
   f.setVisible(true);
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
  catch (Exception ex){}
 }
}

class MyWindow extends JWindow
{
 MyWindow()
 {
  URL image=MyWindow.class.getResource("strelka.gif");

  if(image != null)
  {
   ImageIcon icon=new ImageIcon(image);
   add(new JLabel(icon));
   setSize(icon.getIconWidth(), icon.getIconHeight());
  }
  else
  {
   add(new JLabel(" >>"));
   setSize(20, 14);
  }
  setAlwaysOnTop(true);
 }
}



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


Эксперт
***


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

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



в продолжение - например укажем на третий столбец:
Код

 public void mouseClicked(MouseEvent e)
 {
  TableColumnModel columnmodel=table.getColumnModel();
  Point p=MouseInfo.getPointerInfo().getLocation();
  window.setVisible(true);

  int x=0;
  for(int i=0; i < 3 && i < table.getColumnCount(); i++) // 3 - номер столбца
  {
   x+=columnmodel.getColumn(i).getWidth();
  }
  window.setLocation(x + getX() ,
                     p.y - e.getY() % table.getRowHeight());
 }


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


Опытный
**


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

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



Очень интересно, спасибо. Оба метода очень интересны. Обязательно оба попробую и позже решу. 

dorogoyIV, я тут воткнул в конец метода задержку в секунду чтобы убирать нарисованную картинку, так у меня перестало рисовать стрелочку и стало рисовать что то совсем другое. Интересно в чем дело? 
Код

public void mouseClicked(MouseEvent e){

...
         Thread.sleep(1000);
         window.setVisible(false);
}


PS администраторам: добавьте пожалуйста плюсики Kangaroo и dorogoyIV за помощь. 

Это сообщение отредактировал(а) niasilil - 6.1.2008, 09:34


--------------------
SCJP 5.0, SCJD
PM MAIL   Вверх
dorogoyIV
Дата 6.1.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(niasilil @  6.1.2008,  09:32 Найти цитируемый пост)
я тут воткнул в конец метода задержку в секунду чтобы убирать нарисованную картинку, так у меня перестало рисовать стрелочку и стало рисовать что то совсем другое

ну я не знаю как ты запустил поток, что картинка пропала  smile 
PM MAIL   Вверх
GZep
Дата 8.1.2008, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



Здравствуйте!

Вопрос "в тему" (а может и нет, нужно еще в этом тоже удостовериться):

Как сделать следующее: есть таблица. И пока пользователь не сделает действие (возьмем для примера нажатие на кнопку) в таблице отображается: "Нажмите на кнопку". Выглядит это примерно так: на сером фоне по центру надпись. Ну, а после нажатия вырисовывается структура таблицы.
ИМХО такая ситуация относительно не редкая, может кому-нибудь приходилось делать. Поделитесь опытом!

Заранее благодарен. smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Kangaroo
Дата 8.1.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



GZep, есть лейаут CardLayout. С помощью него можно сделать несколько панелей (одна под другой) и скрывать-показывать их.
Для вашего примера это будет одна серая панель с надписью и одна панель с табличкой. А по кнопке переключать.


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


участник Винграда
***


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

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



Kangaroo, ок, с CardLayer разобрался, но что именно мне накладывать на таблицу? Каким объектом посоветуете воспользоваться?


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Kangaroo
Дата 9.1.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



Цитата(GZep @  9.1.2008,  19:16 Найти цитируемый пост)
Каким объектом посоветуете воспользоваться? 


Я вроде написал:
Цитата(Kangaroo @  8.1.2008,  19:57 Найти цитируемый пост)
Для вашего примера это будет одна серая панель с надписью и одна панель с табличкой. А по кнопке переключать. 


Может я не так понял задачу? Мое видение: юзер видит пустую панельку с надписью в центре, клацает на ней, вместо панельки появляется табличка. Вроде так.


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


участник Винграда
***


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

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



Kangaroo, а чем мне рисовать-то эту панель? (и будет ли она того же размера, что и таблица?)

Добавлено через 28 секунд
Цитата(GZep @  10.1.2008,  15:23 Найти цитируемый пост)
чем мне рисовать-то эту панель?

panel = new ЧТО_ТУТ();


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
dorogoyIV
Дата 10.1.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(GZep @  10.1.2008,  15:23 Найти цитируемый пост)
 а чем мне рисовать-то эту панель?

вот примерно:
Код

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

class MyCardLayout extends JFrame
{
 CardLayout cl=new CardLayout();
 JPanel jp=new JPanel();

 MyCardLayout()
 {
  setBounds(100,100,400,300);

  jp.setLayout(cl);
  add(jp);

  JPanel start=new JPanel();
  start.add(new JLabel("Click me"));
  jp.add(start, "page 1");

  JPanel t=new JPanel();
  t.add(new JTable(10, 5));
  jp.add(t, "page 2");

  cl.show(jp, "page 1");

  start.addMouseListener(new MouseAdapter()
  {
   public void mouseClicked(MouseEvent e)
   {
    cl.show(jp, "page 2");
   }
  });
 }

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


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


участник Винграда
***


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

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



dorogoyIV, спасибо. Тема раскрыта. +1 Kangaroo, +1


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.