powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Этот RowHeader - большая кучка чего-то нехорошего
15 сообщений из 15, страница 1 из 1
Этот RowHeader - большая кучка чего-то нехорошего
    #34029169
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кто хочет - пусть попробует получить птички в RowHeader самостоятельно!
Было бы интересно узнать - как?
...
Рейтинг: 0 / 0
Этот RowHeader - большая кучка чего-то нехорошего
    #34032291
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чу, никто не проникся. В принице - использую для тех же целей нулевую колонку самой таблицы - все классно!
...
Рейтинг: 0 / 0
Этот RowHeader - большая кучка чего-то нехорошего
    #34032315
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это выглядит -> так
...
Рейтинг: 0 / 0
Этот RowHeader - большая кучка чего-то нехорошего
    #34032941
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И то-же самое но на JToggleButtons
...
Рейтинг: 0 / 0
Этот RowHeader - большая кучка чего-то нехорошего
    #34041654
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наконец то я его сделал - вот можете полюбоваться
На самом деле, когда проектируешь таблицу надо учитывать адекватность работы встроенного по умолчанию редактора. и чтобы он не портил вид ячейки, только что подвергшейся редактирование - надо вставлять 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
Этот RowHeader - большая кучка чего-то нехорошего
    #34042054
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Этот RowHeader - большая кучка чего-то нехорошего
    #34042586
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
for (int i =  0 , j =  1 ; i < buttons.length; i++, j *=  2 )

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

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

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

Сдвиги дело привычки, объективной необходимости фигачить >> куда попало нет.
...
Рейтинг: 0 / 0
Этот RowHeader - большая кучка чего-то нехорошего
    #34042731
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Этот RowHeader - большая кучка чего-то нехорошего
    #34042733
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs mayton
Код: plaintext
1.
for (int i =  0 , j =  1 ; i < buttons.length; i++, j *=  2 )

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

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

Сдвиги дело привычки, объективной необходимости фигачить >> куда попало нет.
silent overflow?
...
Рейтинг: 0 / 0
Этот RowHeader - большая кучка чего-то нехорошего
    #34043030
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... не заметил особой разницы. Компиллер оптимизацию не просек. Аккуратно исполнил умножение и сдвиг. Ожидаемого 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
Этот RowHeader - большая кучка чего-то нехорошего
    #34043550
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ха. никто не говорит об ожидаемом exception'e. Silent overflow.
...
Рейтинг: 0 / 0
Этот RowHeader - большая кучка чего-то нехорошего
    #34043869
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimmХа. никто не говорит об ожидаемом exception'e. Silent overflow.
Случайно "джава питфулсами" не обчитался? :)

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

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

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


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