Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JList как ячейка JTable / 18 сообщений из 18, страница 1 из 1
05.03.2007, 09:19
    #34370314
sommer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
добрый день )
есть необходимость создать таблицу с jlist в ячейках (подобие планировщика задач, календарный view)
пытаюсь использовать код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
 import  javax.swing.*;
 import  java.awt.*;
 import  javax.swing.table.*;

 import  java.util.*;

 import  java.io.*;
 public   class  jtablejlist //extends JFrame
{

 public   void  init()
{
Vector data =  new  Vector();
Vector tmp =  new  Vector();

String[] sdata ={"test1","test2"};
tmp.addElement (sdata);
tmp.addElement ("This is test1");
data.addElement (tmp);

tmp =  new  Vector();
String[] sdata2 ={"stock1","stock2","stock3","stock4"};
tmp.addElement (sdata2);
tmp.addElement ("This is stocks");
data.addElement (tmp);


Vector cols =  new  Vector();
cols.addElement ("col1");
cols.addElement ("col2");

JTable table =  new  JTable(data,cols);
TableColumn column = table.getColumnModel().getColumn( 0 );
MyListEditor area= new  MyListEditor();
// ROWHIGHT=table.getRowHeight() +table.getRowMargin()+1; 
column.setCellEditor(area); 
column.setCellRenderer( new  MyCellRenderer ());

JFrame frame =  new  JFrame();
frame.getContentPane().add( new  JScrollPane(table));
frame.pack();
frame.setVisible(true);
}

 class  MyListEditor  extends  AbstractCellEditor  implements  TableCellEditor
{ 
JList mlist;

 public  MyListEditor()
{
mlist =  new  JList();
} 

 public  Object[] getCellEditorValue() 
{
 return  ((DefaultListModel)mlist.getModel()).toArray();
}

// This method is called when a cell value is edited by the user.
 public  Component getTableCellEditorComponent(JTable table, 
Object value,  boolean  isSelected,  int  row, int  column) 
{ 
mlist.setListData((Object[])value);
 return  mlist;
} 

}

 class  MyCellRenderer  extends  JList  implements  TableCellRenderer 
{
 public  MyCellRenderer(){
 super ();
}
 public  Component getTableCellRendererComponent(JTable mtable, Object value,
 boolean  isSelected,  boolean  hasFocus,  int  rowIndex,  int  vColIndex) {

 if (isSelected)
setBackground(mtable.getSelectionBackground() );
 else 
setBackground(Color.white );
String stmp;
StringTokenizer st;
 int  rowHight=mtable.getRowHeight() +mtable.getRowMargin()+ 1 ;
 int  fold;

String[] mlist = (String[]) value;


fold = mlist.length ;

//adjust row height
 if (mtable.getRowHeight(rowIndex)!=fold*rowHight) //otherwise, the save dialog couldn't show normally 
mtable.setRowHeight(rowIndex, fold*rowHight); 


setListData((String[])value);

 return   this ;
} 
}


 public   static   void  main(String[] args)
{
jtablejlist jj = new  jtablejlist();
jj.init();
}

}
http://kidslovepc.com/javatable/java-jtable-jlist-row-height.shtml

проблема в том, что когда переходишь из jlist1 с выбранной строкой в jlist2(другая ячейка) и фокус остается на jlist1, вываливается эксепшен на вызов MyListEditor.getCellEditorValue

не подскажите\поможите как решить проблему?
...
Рейтинг: 0 / 0
05.03.2007, 09:32
    #34370348
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
подебужте отладчегом. само оно никогда не работает, поскольку не должно
...
Рейтинг: 0 / 0
05.03.2007, 09:48
    #34370395
Ruslan.Isbarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
Не плохо было бы привести стек-трейс. Приведу здесь его за Вас:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JList$ 4 
	at jtablejlist$MyListEditor.getCellEditorValue(jtablejlist.java: 53 )
	at jtablejlist$MyListEditor.getCellEditorValue(jtablejlist.java: 45 )
	at javax.swing.JTable.editingStopped(JTable.java: 3332 )

...


Что мы видим: ClassCastException при попытке прикастить модель листа к DefaultListModel.


Смотрим код JList.java (метод, которым Вы воспользовались):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
/**
 * Constructs a <code>ListModel</code> from an array of objects and then
 * applies <code>setModel</code> to it.
 *
 * @param listData an array of Objects containing the items to display
 *                 in the list
 * @see #setModel
 */
 public   void  setListData( final  Object[] listData) {
    setModel (
         new  AbstractListModel() {
             public   int  getSize() {  return  listData.length; }
             public  Object getElementAt( int  i) {  return  listData[i]; }
        }
    );
}


На размышление:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 public  Component getTableCellEditorComponent(JTable table,
                                             Object value, 
                                              boolean  isSelected, 
                                              int  row, 
                                              int  column) {
    
    DefaultListModel model =  new  DefaultListModel();

    Object[] items = (Object[]) value;

     for  ( int  i =  0 ; i < items.length; i++) {
        model.add(i, items[i]);
    }

    mlist.setModel(model);
     return  mlist;
}

P.S. Требует окультуривания.
...
Рейтинг: 0 / 0
06.03.2007, 08:26
    #34373019
sommer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
спасибо, Руслан, помог.

небольшое дополнение - в методе getTableCellRendererComponent нужно все String[] заменить на Object[]
...
Рейтинг: 0 / 0
16.03.2007, 14:50
    #34396006
sommer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
хочу получить таблицу, ячейки которых должны заполнять jlist'ы, и чтобы был некий title в ячейках - соответствующее число - см. картинку
сейчас использую следующий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
 class  MyListEditor  extends  AbstractCellEditor  implements  TableCellEditor
{
JList mlist;
JScrollPane scpane;
Border scborder =  new  TitledBorder(BorderFactory.createEmptyBorder(), "title");
 

 public  MyListEditor()
{
mlist =  new  JList();
scpane =  new  JScrollPane();
scpane.getViewport().add(mlist);
scpane.setBorder(scborder);

}

 public  Object getCellEditorValue()
{
 return  ((DefaultListModel)mlist.getModel()).toArray();
}

// This method is called when a cell value is edited by the user.
/*public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row,int column)
{
mlist.setListData((Object[])value);
return mlist;
}
*/
     public  Component getTableCellEditorComponent(JTable table,
                                             Object value,
                                              boolean  isSelected,
                                              int  row,
                                              int  column) {

    DefaultListModel model =  new  DefaultListModel();

    Object[] items = (Object[]) value;

     for  ( int  i =  1 ; i < items.length; i++) {
        model.add(i- 1 , items[i]);
    }

    mlist.setModel(model);

//    return mlist;

    Border scborder =  new  TitledBorder(BorderFactory.createEmptyBorder(), items[ 0 ].toString());
    scpane.setBorder(scborder);
    scpane.getViewport().add(mlist);

     return  scpane;


}



}

 class  MyCellRenderer  extends  JList  implements  TableCellRenderer
{
 public  MyCellRenderer(){
 super ();
}
 public  Component getTableCellRendererComponent(JTable mtable, Object value,
 boolean  isSelected,  boolean  hasFocus,  int  rowIndex,  int  vColIndex) {

 if (isSelected)
setBackground(mtable.getSelectionBackground() );
 else 
setBackground(Color.white );
String stmp;
StringTokenizer st;
 int  rowHight=mtable.getRowHeight() +mtable.getRowMargin()+ 1 ;
 int  fold;

Object[] mlist = (Object[]) value;


fold = mlist.length ;

//adjust row height
//if(mtable.getRowHeight(rowIndex)!=fold*rowHight) //otherwise, the save dialog couldn't show normally
//mtable.setRowHeight(rowIndex, fold*rowHight);
//mtable.setRowHeight(rowIndex, mtable.getHeight()/mtable.getRowCount());
    mtable.setRowHeight(rowIndex,  70 );


//setListData((Object[])value);
   JList jlist =  new  JList();
   JScrollPane scpane =  new  JScrollPane();
   DefaultListModel model =  new  DefaultListModel();
    for  ( int  i =  1 ; i < mlist.length; i++) {
       model.add(i- 1 , mlist[i]);
   }

   jlist.setModel(model);
   Border scborder =  new  TitledBorder(BorderFactory.createEmptyBorder(), mlist[ 0 ].toString());
   scpane.setBorder(scborder);
   scpane.getViewport().add(jlist);

    return  scpane;

    

//return this;
}
}

с одной стороны работает, но реализовано херово, занимает 99%процессорного времени

как изменить getTableCellRendererComponent чтобы меньше занимало системных ресурсов?
...
Рейтинг: 0 / 0
16.03.2007, 14:52
    #34396012
sommer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
здесь жирным выделены titledborder'ы компоненты scrollpane
...
Рейтинг: 0 / 0
16.03.2007, 15:37
    #34396255
Ruslan.Isbarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
А это зачем в рендерере?

Код: plaintext
1.
DefaultListModel model =  new  DefaultListModel();

Это ж сколько моделей будет создано, при прорисовках таблицы?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.11.2016, 14:46
    #39342634
Rintsler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
sommerхочу получить таблицу, ячейки которых должны заполнять jlist'ы, и чтобы был некий title в ячейках - соответствующее число - см. картинку
сейчас использую следующий код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
class MyListEditor extends AbstractCellEditor implements TableCellEditor
{
JList mlist;
JScrollPane scpane;
Border scborder = new TitledBorder(BorderFactory.createEmptyBorder(), "title");
 

public MyListEditor()
{
mlist = new JList();
scpane = new JScrollPane();
scpane.getViewport().add(mlist);
scpane.setBorder(scborder);

}

public Object getCellEditorValue()
{
return ((DefaultListModel)mlist.getModel()).toArray();
}

// This method is called when a cell value is edited by the user.
/*public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row,int column)
{
mlist.setListData((Object[])value);
return mlist;
}
*/
    public Component getTableCellEditorComponent(JTable table,
                                             Object value,
                                             boolean isSelected,
                                             int row,
                                             int column) {

    DefaultListModel model = new DefaultListModel();

    Object[] items = (Object[]) value;

    for (int i = 1; i < items.length; i++) {
        model.add(i-1, items[i]);
    }

    mlist.setModel(model);

//    return mlist;

    Border scborder = new TitledBorder(BorderFactory.createEmptyBorder(), items[0].toString());
    scpane.setBorder(scborder);
    scpane.getViewport().add(mlist);

    return scpane;


}



}

class MyCellRenderer extends JList implements TableCellRenderer
{
public MyCellRenderer(){
super();
}
public Component getTableCellRendererComponent(JTable mtable, Object value,
boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {

if(isSelected)
setBackground(mtable.getSelectionBackground() );
else
setBackground(Color.white );
String stmp;
StringTokenizer st;
int rowHight=mtable.getRowHeight() +mtable.getRowMargin()+1;
int fold;

Object[] mlist = (Object[]) value;


fold = mlist.length ;

//adjust row height
//if(mtable.getRowHeight(rowIndex)!=fold*rowHight) //otherwise, the save dialog couldn't show normally
//mtable.setRowHeight(rowIndex, fold*rowHight);
//mtable.setRowHeight(rowIndex, mtable.getHeight()/mtable.getRowCount());
    mtable.setRowHeight(rowIndex, 70);


//setListData((Object[])value);
   JList jlist = new JList();
   JScrollPane scpane = new JScrollPane();
   DefaultListModel model = new DefaultListModel();
   for (int i = 1; i < mlist.length; i++) {
       model.add(i-1, mlist[i]);
   }

   jlist.setModel(model);
   Border scborder = new TitledBorder(BorderFactory.createEmptyBorder(), mlist[0].toString());
   scpane.setBorder(scborder);
   scpane.getViewport().add(jlist);

   return scpane;

    

//return this;
}
}



с одной стороны работает, но реализовано херово, занимает 99%процессорного времени

как изменить getTableCellRendererComponent чтобы меньше занимало системных ресурсов?
...
Рейтинг: 0 / 0
07.11.2016, 14:49
    #39342640
Rintsler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
Извините, пытаюсь понять как пользоваться форумом. Слушайте, где вы код пишете все, я просто на какой форум не попаду не пойму, я начал работать в netbeans, и не пойму как исправить свой код, куда что вписывать?
...
Рейтинг: 0 / 0
07.11.2016, 15:05
    #39342663
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
RintslerИзвините, пытаюсь понять как пользоваться форумом. Слушайте, где вы код пишете все, я просто на какой форум не попаду не пойму, я начал работать в netbeans, и не пойму как исправить свой код, куда что вписывать?
Сверху есть комбобокс "SRC", ну или руками внутри тега [SRC JAVA][/SRC]
...
Рейтинг: 0 / 0
07.11.2016, 15:07
    #39342667
Rintsler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
SQL2008,

Вот это?
...
Рейтинг: 0 / 0
07.11.2016, 15:12
    #39342676
Rintsler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
VS я быстро понял, а остальные среды намудренные какие-то, интерфейс налепили абы как.
...
Рейтинг: 0 / 0
07.11.2016, 15:15
    #39342680
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
RintslerVS я быстро понял, а остальные среды намудренные какие-то, интерфейс налепили абы как.
Это Java. Тут всё так. Не только IDE.
...
Рейтинг: 0 / 0
07.11.2016, 15:20
    #39342697
Rintsler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
Я уже просто думаю взять изучить все как пишется вручную, а не при помощи интерфейса среды, потому что как мне надо реализовать что-то по-сложнее так я в ступоре. Java недавно начал изучать, думал тоже самое что и C# =))
...
Рейтинг: 0 / 0
07.11.2016, 17:57
    #39342840
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
RintslerSQL2008,

Вот это?
Хм... Я имел в виду этот форум вообще-то...
Кстати, тоже совсем недавно начал изучать Java и NetBeans.
Что касается среды, то больших проблем не испытываю, хотя всю жизнь до этого работал в MS Visual Studio.
...
Рейтинг: 0 / 0
07.11.2016, 18:04
    #39342850
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
Rintsler Java недавно начал изучать, думал тоже самое что и C# =))
Общего действительно много, зная С# разобраться можно, если конечно замены типа
Код: c#
1.
2.
3.
4.
5.
using System.IO.Text;
...
foreach(String s in strings){
...
}


на
Код: java
1.
2.
3.
4.
5.
import java.util.List;
...
for(String s : strings) {
...
}


не ставят вас в тупик.
...
Рейтинг: 0 / 0
10.11.2016, 19:38
    #39345186
Rintsler
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
SQL2008,

Не ставят, мне не понятно как netbeans распределяет в себе код.
...
Рейтинг: 0 / 0
10.11.2016, 22:01
    #39345244
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JList как ячейка JTable
RintslerSQL2008,

Не ставят, мне не понятно как netbeans распределяет в себе код.
- Хватит писать фигню в теме которой уже почти 10 лет. Создайте новую тему.
- Сформулийте свои вопросы. "не понятно" это не вопрос.
- NetBeans в себе код не распределяет, по этому объяснить вам то что вы спрашиваете не возможно.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JList как ячейка JTable / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]