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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jList, колумс и др. 
V
    Опции темы
AbMan
Дата 5.11.2006, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет Всем!
Пожалеста подскажите как в jList добавить колонки.
я использую HTML тег примерно так --
Код
s="<html>\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"border-collapse: collapse; border-width: 0\" bordercolor=\"#111111\" width=\"500\">\n<tr>\n<td width=\"40%\" style=\"border-style: none; border-width: 0\">";
s=s+"<font color=\"#00FFFF\">"+elem.text+"</font></td>";
s=s+"</td>\n<td width=\"20%\" style=\"border-style: none; border-width: 0\">";
s=s+"Labe2";
s=s+"</td>\n<td width=\"20%\"=\"border-style: none; border-width: 0\">";
s=s+"Labe3";
s=s+"</td>\n<td width=\"20%\"=\"border-style: none; border-width: 0\">";
s=s+"Labe4"+"</td>\n</tr>\n</table>";
                
JLabel l = (JLabel) super.getListCellRendererComponent(list, s, index, isSelected, cellHasFocus);

--но список тормозить.
PM MAIL   Вверх
LSD
Дата 5.11.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Не удивительно. Используй JTable.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
AbMan
Дата 5.11.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А нельзя в JList-e сделать, а то программа в принципе готова, вот только  режим расширенного просмотра осталось дописать, очень не хочется  переписывать, и в JTable честно пока не разобрался. Я то Java всего около месятся пытаюсь писать. 
На Дельфи это можно было сделать, в обработчике paint() списка. 
А в JTable – можно динамически менять количество колонак.

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


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Реализуй свой ListCellRenderer.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
AbMan
Дата 5.11.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Подскажите,  пожалуйста, а можно в Font-e, задать вывод шрифта фиксированный (то есть все буквы одной ширины), или только при помаши тега <tt>.

И как получить в FileSystemView- короткое названия файла (как в ДОС – 8.3).  

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


software saboteur
****


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

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



Цитата(AbMan @  5.11.2006,  14:49 Найти цитируемый пост)
задать вывод шрифта фиксированный (то есть все буквы одной ширины),

Задай имя шрифта: Monospaced


--------------------
user posted image нет времени думать - нужно писать КОД!

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


Новичок



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

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



Спасибо! 
Сейчас попробую.
Да еще такой вопрос как из JList-a обратно получить объекты в Vector (при jList1.setListData(Vector1)-> Vector1= jList1.?????), а то тут подсказали, что при изменение типа сортировки, чем заново создавать список, лучше и быстрей отсортировать существующий список.

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


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(AbMan @  5.11.2006,  14:49 Найти цитируемый пост)
И как получить в FileSystemView- короткое названия файла (как в ДОС – 8.3).

Никак, тем более что на NTFS томах создание короткого имени может быть отключено.


Цитата(AbMan @  5.11.2006,  15:51 Найти цитируемый пост)
Да еще такой вопрос как из JList-a обратно получить объекты в Vector (при jList1.setListData(Vector1)-> Vector1= jList1.?????), а то тут подсказали, что при изменение типа сортировки, чем заново создавать список, лучше и быстрей отсортировать существующий список.

Создай свою ListModel, за образец можешь взять DefaultListModel. Только не забудь когда отсортируешь элементы, уведомить слушателей, что модель изменилась.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
AbMan
Дата 6.11.2006, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет!
Нашел решения по созданию колонок в JList в книге - "Swing" by Matthew Robinson and Pavel Vorobiev – ссылка -http://www.grandt.com/sbe/.

Код

class TabListCellRenderer extends JLabel
  implements ListCellRenderer {

  protected static Border m_noFocusBorder;

  protected FontMetrics m_fm = null;
  protected Insets m_insets = new Insets(0, 0, 0, 0);
  protected int m_defaultTab = 50;
  protected int[] m_tabs = null;

  public TabListCellRenderer() {
    m_noFocusBorder = new EmptyBorder(1, 1, 1, 1);
    setOpaque(true);
    setBorder(m_noFocusBorder);
  }

  public Component getListCellRendererComponent(JList list,
    Object value, int index, boolean isSelected, boolean cellHasFocus)
  {
    setText(value.toString());

    setBackground(isSelected ? list.getSelectionBackground() 
      : list.getBackground());
    setForeground(isSelected ? list.getSelectionForeground() 
      : list.getForeground());

    setFont(list.getFont());
    setBorder((cellHasFocus) ?
      UIManager.getBorder("List.focusCellHighlightBorder") 
        : m_noFocusBorder);

    return this;
  }

  public void setDefaultTab(int defaultTab) {
    m_defaultTab = defaultTab;
  }

  public int getDefaultTab() {
    return m_defaultTab;
  }

  public void setTabs(int[] tabs) {
    m_tabs = tabs;
  }

  public int[] getTabs() {
    return m_tabs;
  }

  public int getTab(int index) {
    if (m_tabs == null)
      return m_defaultTab*index;

    int len = m_tabs.length;
    if (index>=0 && index<len)
      return m_tabs[index];

    return m_tabs[len-1] + m_defaultTab*(index-len+1);
  }


  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Color colorRetainer = g.getColor();
    m_fm = g.getFontMetrics();

    g.setColor(getBackground());
    g.fillRect(0, 0, getWidth(), getHeight());
    getBorder().paintBorder(this, g, 0, 0, getWidth(), getHeight());

    g.setColor(getForeground());
    g.setFont(getFont());
    m_insets = getInsets();
    int x = m_insets.left;
    int y = m_insets.top + m_fm.getAscent();

    StringTokenizer  st = new StringTokenizer(getText(), "\t");
    while (st.hasMoreTokens()) {
      String sNext = st.nextToken();
      g.drawString(sNext, x, y);
      x += m_fm.stringWidth(sNext);

      if (!st.hasMoreTokens())
        break;
      int index = 0;
      while (x >= getTab(index))
        index++;
      x = getTab(index);
    }

    g.setColor(colorRetainer);
  }

}

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


Новичок



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

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



Привет!
Появилась проблема, ни как не могу  нарисовать иконку, в верхнем коде вставил  g.drawlmage(ficon, 0, 0, this), не компилируется  помогите пожалуйста! Уже все перепробовал.  

Код ошибки -

Compiling 1 source file to E:\Arc\AmArc\build\classes
E:\Arc\AmArc\src\amarc\TableListCellRenderer.java:110: cannot find symbol
symbol  : method drawlmage(javax.swing.Icon,int,int,amarc.TableListCellRenderer)
location: class java.awt.Graphics
    g.drawlmage(ficon, 0, 0, this);
1 error
ПОСТРОЕНИЕ ЗАВЕРШЕНО НЕУДАЧНО (общее время: 0 секунд)

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


software saboteur
****


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

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



Компилятор все тебе написал:

Цитата(AbMan @  7.11.2006,  02:15 Найти цитируемый пост)
E:\Arc\AmArc\src\amarc\TableListCellRenderer.java:110: cannot find symbol
symbol  : method drawlmage(javax.swing.Icon,int,int,amarc.TableListCellRenderer)
location: class java.awt.Graphics
    g.drawlmage(ficon, 0, 0, this);


Это значит, что в классе java.awt.Graphics нет метода с именем drawlmage, принимающего в качестве параметров javax.swing.Icon, int, int, amarc.TableListCellRenderer... 



--------------------
user posted image нет времени думать - нужно писать КОД!

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


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Код
icon.paintIcon(this, g, 0, 0);



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
AbMan
Дата 7.11.2006, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо… работает.
Нравится мне этот форум – классный.
А не подскажете, если компонент типа заголовка JTable (чтобы можно было изменять колонки)- хочу вставить в скрол-неад где список, что бы изменять размер колонок. Или ссылку где можно посмотреть код, наверно уже кто-то делал такое.

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


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(AbMan @  7.11.2006,  19:07 Найти цитируемый пост)
А не подскажете, если компонент типа заголовка JTable (чтобы можно было изменять колонки)- хочу вставить в скрол-неад где список, что бы изменять размер колонок. Или ссылку где можно посмотреть код, наверно уже кто-то делал такое.

Используй JTable, разом решится куча проблем. Если у тебя данные хранятся в одном объекте, а их надо разбить по столбцам - то реализуюй свою модель:
Код
class MyData
{
  public String text;
  public Date date;
  public Integer number;
}

class MyTableModel extends AbstractTableModel
{
  private MyData[] data;

  public MyTableModel(MyData[] data)
  {
    this.data = data;
  }

  public int getRowCount()
  {
    return data.length;
  }

  public int getColumnCount()
  {
    return 3;
  }

  public Object getValueAt(int rowIndex, int columnIndex)
  {
    MyData myData = data[rowIndex];
    if(myData!=null)
    {
      switch(columnIndex)
      {
        case 0:
          return myData.text;

        case 1:
          return myData.date;

        case 2:
          return myData.number;
      }
    }
    return null;
  }

  @Override
  public String getColumnName(int column)
  {
    switch(column)
    {
      case 0:
        return "Text";

      case 1:
        return "Date";

      case 2:
        return "Number";

      default:
        return "Unknown";
    }
  }

  @Override
  public Class<?> getColumnClass(int columnIndex)
  {
    switch(columnIndex)
    {
      case 0:
        return String.class;

      case 1:
        return Date.class;

      case 2:
        return Integer.class;

      default:
        return Object.class;
    }
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
AbMan
Дата 8.11.2006, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, будем изучать JTable.
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.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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