Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Этот RowHeader - большая кучка чего-то нехорошего / 15 сообщений из 15, страница 1 из 1
03.10.2006, 15:50:51
    #34029169
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
Если кто хочет - пусть попробует получить птички в RowHeader самостоятельно!
Было бы интересно узнать - как?
...
Рейтинг: 0 / 0
04.10.2006, 16:00:34
    #34032291
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
Чу, никто не проникся. В принице - использую для тех же целей нулевую колонку самой таблицы - все классно!
...
Рейтинг: 0 / 0
04.10.2006, 16:04:14
    #34032315
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
Это выглядит -> так
...
Рейтинг: 0 / 0
04.10.2006, 18:43:01
    #34032941
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
И то-же самое но на JToggleButtons
...
Рейтинг: 0 / 0
09.10.2006, 14:07:55
    #34041654
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
Наконец то я его сделал - вот можете полюбоваться
На самом деле, когда проектируешь таблицу надо учитывать адекватность работы встроенного по умолчанию редактора. и чтобы он не портил вид ячейки, только что подвергшейся редактирование - надо вставлять cancelCellEditing(); и stopCellEditing();
Вот пример кода:
Код: 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  BoxEditor
     extends  DefaultCellEditor {
   protected   int  row;
   protected   int  column;
   public  JPanel pnl =  new  JPanel( new  GridLayout( 1 ,  1 ,  0 ,  0 ));
   public  ItemListener im =  new  ItemListener() {
     public   void  itemStateChanged(ItemEvent e) {
      JTable table = CBTableExamle2.table;
      TableModel tm = table.getModel();
       try  {
        tm.setValueAt( ( (BoxEditor) table.getCellEditor()).getCellEditorValue(),
                      row, column);
      }
       catch  (NullPointerException ex) {}
    }
  };
   public  JToggleButton btnFour = CBTableExamle2.getTB("A");
   public  JToggleButton btnThree = CBTableExamle2.getTB("B");
   public  JToggleButton btnTwo = CBTableExamle2.getTB("C");
   public  JToggleButton btnOne = CBTableExamle2.getTB("D");
   public  BoxEditor(JCheckBox checkBox) {
     super (checkBox);
  }

   boolean  isChanged = false;

   public  Component getTableCellEditorComponent(JTable table, Object value,
                                                boolean  isSelected,  int  row,
                                                int  column) {

     this .row = row;
     this .column = column;
     if  (value ==  null ) {
       return   null ;
    }
    pnl.add(btnFour);
    pnl.add(btnThree);
    pnl.add(btnTwo);
    pnl.add(btnOne);
    ItemListener[] il = btnFour.getItemListeners();
     if  (il.length !=  0  && il[ 0 ] !=  null ) {
      btnFour.removeItemListener(il[ 0 ]);
    }
    il = btnThree.getItemListeners();
     if  (il.length !=  0  && il[ 0 ] !=  null ) {
      btnThree.removeItemListener(il[ 0 ]);
    }
    il = btnTwo.getItemListeners();
     if  (il.length !=  0  && il[ 0 ] !=  null ) {
      btnTwo.removeItemListener(il[ 0 ]);
    }
    il = btnOne.getItemListeners();
     if  (il.length !=  0  && il[ 0 ] !=  null ) {
      btnOne.removeItemListener(il[ 0 ]);
    }
     if  (column !=  0 ) {
      btnFour.addItemListener(im);
      btnThree.addItemListener(im);
      btnTwo.addItemListener(im);
      btnOne.addItemListener(im);
    }
     else  {
      btnFour.addItemListener( new  MyItemListenerRowHeader(row));
      btnThree.addItemListener( new  MyItemListenerRowHeader(row));
      btnTwo.addItemListener( new  MyItemListenerRowHeader(row));
      btnOne.addItemListener( new  MyItemListenerRowHeader(row));
    }
    TableModel dm = table.getModel();
     int  cellValue = Integer.parseInt( (String) dm.getValueAt(row, column));
    btnFour.setSelected(cellValue /  8  ==  1 );
    cellValue = cellValue %  8 ;
    btnThree.setSelected(cellValue /  4  ==  1 );
    cellValue = cellValue %  4 ;
    btnTwo.setSelected(cellValue /  2  ==  1 );
    cellValue = cellValue %  2 ;
    btnOne.setSelected(cellValue ==  1 );
    stopCellEditing();
     return  pnl;
  }

   public  Object getCellEditorValue() {
     int  i =  0 ;
     if  (btnFour.isSelected() == true) {
      i +=  8 ;
    }
     if  (btnThree.isSelected() == true) {
      i +=  4 ;
    }
     if  (btnTwo.isSelected() == true) {
      i +=  2 ;
    }
     if  (btnOne.isSelected() == true) {
      i +=  1 ;
    }
 cancelCellEditing();
     return  "" + i;
  }

   public   boolean  isCellEditable(EventObject anEvent) {
     return  true;
  }

   public   boolean  shouldSelectCell(EventObject anEvent) {
     return  false;
  }

   public   boolean  stopCellEditing() {
     return  true;
  }
}
...
Рейтинг: 0 / 0
09.10.2006, 15:51:49
    #34042054
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
Alex-2Наконец то я его сделал - вот можете полюбоваться

Не могу. Видя паблики - не могу, а особенно видя дублирование кода.

Код: 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.
 class  BoxEditor  extends  DefaultCellEditor {
     protected   int  row;
     protected   int  column;
     public  JPanel panel =  new  JPanel( new  GridLayout( 1 ,  1 ,  0 ,  0 ));

     public  ItemListener myListener =  new  ItemListener() {
         public   void  itemStateChanged(ItemEvent e) {
            JTable table = CBTableExamle2.table;
             try  {
                table.getModel().setValueAt(table.getCellEditor().getCellEditorValue(), row, column);
            }
             catch  (NullPointerException ex) {
            }
        }
    };

     public  JToggleButton[] buttons =  new  JToggleButton[]{
            CBTableExamle2.getTB("A"), //4
            CBTableExamle2.getTB("B"), //3
            CBTableExamle2.getTB("C"), //2
            CBTableExamle2.getTB("D")  //1
    };

     public  BoxEditor(JCheckBox checkBox) {
         super (checkBox);
    }

     boolean  isChanged = false;

     public  Component getTableCellEditorComponent(JTable table, Object value,
                                                  boolean  isSelected,  int  row,
                                                  int  column) {
         this .row = row;
         this .column = column;
         if  (value ==  null ) {  // != table.getModel().getValueAt(row, column) ???
             return   null ;
        }
         for  (JToggleButton button : buttons) {
            panel.add(button);
            ItemListener[] listeners = button.getItemListeners();
             if  (listeners.length !=  0  && listeners[ 0 ] !=  null ) { // == null ???
                button.removeItemListener(listeners[ 0 ]);
            }
            button.addItemListener(column ==  0  ?  new  MyItemListenerRowHeader(row) : myListener);
        }
         int  status = Integer.parseInt((String) table.getModel().getValueAt(row, column));
         for  ( int  i =  0 , j =  1 ; i < buttons.length; i++, j *=  2 ) {
            buttons[i].setSelected((status & j) == j);
        }
        stopCellEditing();
         return  panel;
    }

     public  Object getCellEditorValue() {
         int  status =  0 ;
         for  ( int  i =  0 , j =  1 ; i < buttons.length; i++, j *=  2 ) {
             if  (buttons[i].isSelected()) {
                status += j;
            }
        }
        cancelCellEditing();
         return  Integer.toString(status);
    }

     public   boolean  isCellEditable(EventObject anEvent) {
         return  true;
    }

     public   boolean  shouldSelectCell(EventObject anEvent) {
         return  false;
    }

     public   boolean  stopCellEditing() {
         return  true;
    }
}
...
Рейтинг: 0 / 0
09.10.2006, 18:04:13
    #34042586
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
Код: plaintext
1.
for (int i =  0 , j =  1 ; i < buttons.length; i++, j *=  2 )

Не могу! Терпеть не могу умножение на 2!! Даешь логические сдвиги!
...
Рейтинг: 0 / 0
09.10.2006, 18:33:49
    #34042682
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
mayton
Код: plaintext
1.
for (int i =  0 , j =  1 ; i < buttons.length; i++, j *=  2 )

Не могу! Терпеть не могу умножение на 2!! Даешь логические сдвиги!

Да. Меня тоже коробит эта строчка, только по другой причине :)

Сдвиги дело привычки, объективной необходимости фигачить >> куда попало нет.
...
Рейтинг: 0 / 0
09.10.2006, 18:52:42
    #34042731
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
NotGonnaGetUsпо другой причине
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    ...
        BitSet status = (BitSet) table.getModel().getValueAt(row, column);
         for  ( int  i =  0 ; i < buttons.length; i++) {
            buttons[i].setSelected(status.get(i));
        }
        stopCellEditing();
         return  panel;
    }

     public  Object getCellEditorValue() {
        BitSet status =  new  BitSet(buttons.length);
         for  ( int  i =  0 ; i < buttons.length; i++) {
            status.set(i, buttons[i].isSelected());
        }
        cancelCellEditing();
         return  status;
    }
...
Рейтинг: 0 / 0
09.10.2006, 18:54:19
    #34042733
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
NotGonnaGetUs mayton
Код: plaintext
1.
for (int i =  0 , j =  1 ; i < buttons.length; i++, j *=  2 )

Не могу! Терпеть не могу умножение на 2!! Даешь логические сдвиги!

Да. Меня тоже коробит эта строчка, только по другой причине :)

Сдвиги дело привычки, объективной необходимости фигачить >> куда попало нет.
silent overflow?
...
Рейтинг: 0 / 0
09.10.2006, 23:51:24
    #34043030
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
Хм... не заметил особой разницы. Компиллер оптимизацию не просек. Аккуратно исполнил умножение и сдвиг. Ожидаемого exception с переполнением не произошло.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 public   class  recode
{
	 public   static   void  main(String[] args)
	{

		 short  x=0x7FFF;

		x<<= 1 ; 	// shl	       

		System.out.printf("%04X\n",x);

		 short  y=0x7FFF;

		y*= 2 ;   // imul

		System.out.printf("%04X\n",y);

		x<<= 1 ;  // Overflow?
		y*= 2 ;

	}
}

Код: 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.
    0 :	sipush	 32767 
    3 :	istore_1
    4 :	iload_1
    5 :	iconst_1
    6 :	ishl
    7 :	i2s
    8 :	istore_1
    9 :	getstatic	# 2 ; //Field java/lang/System.out:Ljava/io/PrintStream;
    12 :	ldc	# 3 ; //String %04X\n
    14 :	iconst_1
    15 :	anewarray	# 4 ; //class java/lang/Object
    18 :	dup
    19 :	iconst_0
    20 :	iload_1
    21 :	invokestatic	# 5 ; //Method java/lang/Short.valueOf:(S)Ljava/lang/Short;
    24 :	aastore
    25 :	invokevirtual	# 6 ; //Method java/io/PrintStream.printf:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
    28 :	pop
    29 :	sipush	 32767 
    32 :	istore_2
    33 :	iload_2
    34 :	iconst_2
    35 :	imul
    36 :	i2s
    37 :	istore_2
    38 :	getstatic	# 2 ; //Field java/lang/System.out:Ljava/io/PrintStream;
    41 :	ldc	# 3 ; //String %04X\n
    43 :	iconst_1
    44 :	anewarray	# 4 ; //class java/lang/Object
    47 :	dup
    48 :	iconst_0
    49 :	iload_2
    50 :	invokestatic	# 5 ; //Method java/lang/Short.valueOf:(S)Ljava/lang/Short;
    53 :	aastore
    54 :	invokevirtual	# 6 ; //Method java/io/PrintStream.printf:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
    57 :	pop
    58 :	iload_1
    59 :	iconst_1
    60 :	ishl
    61 :	i2s
    62 :	istore_1
    63 :	iload_2
    64 :	iconst_2
    65 :	imul
    66 :	i2s
    67 :	istore_2
    68 :	return

Stdout:
Код: plaintext
1.
2.
FFFE
FFFE
...
Рейтинг: 0 / 0
10.10.2006, 10:57:00
    #34043550
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
Ха. никто не говорит об ожидаемом exception'e. Silent overflow.
...
Рейтинг: 0 / 0
10.10.2006, 12:08:05
    #34043869
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
TimmХа. никто не говорит об ожидаемом exception'e. Silent overflow.
Случайно "джава питфулсами" не обчитался? :)

Мне, как известному борцу за ясность кода, больше претит запутанность такого кода. Как можно увидеть, погоня за ясностью решает даже такие гипотетические проблемы как silent overflow.
...
Рейтинг: 0 / 0
10.10.2006, 12:14:31
    #34043891
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
NotGonnaGetUs TimmХа. никто не говорит об ожидаемом exception'e. Silent overflow.
Случайно "джава питфулсами" не обчитался? :)

Мне, как известному борцу за ясность кода, больше претит запутанность такого кода. Как можно увидеть, погоня за ясностью решает даже такие гипотетические проблемы как silent overflow.
Пачитываю.
...
Рейтинг: 0 / 0
10.10.2006, 21:43:29
    #34045701
alexx726
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Этот RowHeader - большая кучка чего-то нехорошего
Ребят, я может быть туповат и вы какую-то свою тему разрабатываете, но я например не вижу проблем использования галочек в RowHeader. Тем более, после публикования грязноватого исходного кода. Может объясните, в чем прикол?

Извините, если встрял...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Этот RowHeader - большая кучка чего-то нехорошего / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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