powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / [swing] не знаю что делать, eventы нажатия кнопки мыши
1 сообщений из 1, страница 1 из 1
[swing] не знаю что делать, eventы нажатия кнопки мыши
    #34905095
sommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добрый день
пытаюсь сделать некий календаррь-планировщик

в каждую ячейку таблицы кладу по JScrollPane, в каждый scrollpane кладу JList, в JLIstзаношу информацию, например, фамилии

по клику на фамилию возникает popup с менюшкой

один из календарей должен редактироваться только для текущей даты, т.е. popup должен возникать только если кликнуть на ячейку с текущей датой(отвечающую за текущую дату)

в этом календаре сразу после его создания popup возникает только для текущий даты, для других не появляется, однако, после того как ткнешь в текущую - он будет появляться для любой даты из это столбца(CellEditor задается для столбоцов)

помогите кто чем может? )


Код: 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.
 class  MyListEditor  extends  AbstractCellEditor  implements  TableCellEditor {
    ScheduleCalendar scheduleCalendar;
    JList mlist;
    JList cell_info;
    TitledBorder scborder =  new  TitledBorder(BorderFactory.createEmptyBorder(),
                                             "title");
    JScrollPane scpane;

    Color color_full;
    Color color_mid;
    Color color_empty;
     int  cell_full =  2 ;

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



    }

     public  Object getCellEditorValue() {
//scborder.getTitle();
         return  ((DefaultListModel) cell_info.getModel()).toArray();
    }

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

        DefaultListModel model =  new  DefaultListModel();
        DefaultListModel cell_model =  new  DefaultListModel();

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

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

        cell_info.setModel(cell_model);
        mlist.setModel(model);
        mlist.addMouseListener( new  PopupListener(
                scheduleCalendar, items[ 0 ].toString()));

//mlist.setListData((Object[]) value);
        scborder =  new  TitledBorder(BorderFactory.createEmptyBorder(),
                                    items[ 0 ].toString());
        scpane.setBorder(scborder);
        scpane.getViewport().add(mlist);
         if  (cell_full <= items.length -  1 ) {
            mlist.setBackground(color_full);
        }  else   if  (items.length >  1 ) {
            mlist.setBackground(color_mid);
        }  else  {
            mlist.setBackground(color_empty);
        }

         return  scpane;

    }

}



Код: 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.
 class  MyJobCellRenderer  extends  JScrollPane  implements  TableCellRenderer {
    Color color_full;
    Color color_mid;
    Color color_empty;
     int  cell_full;
     private   boolean  cellHasFocus;
    Border scborder;
    JList jlist;

     public  MyJobCellRenderer() {
         super ();
//        color_full = new Color(205, 255, 204);
//        color_mid = new Color(205, 255, 204);
        color_full = Color.WHITE;
        color_mid = Color.WHITE;

        color_empty = Color.white;
        cell_full =  2 ;
    }


     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[] cell_info = (Object[]) value;

//setListData((Object[])value);

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

        jlist.setModel(model);

//       jlist.setListData((Object[])value);
        scborder =  new  TitledBorder(BorderFactory.createEmptyBorder(),
                                           cell_info[ 0 ].toString());
         this .setBorder(scborder);
         this .getViewport().add(jlist);

         if  (cell_full <= cell_info.length -  1 ) {
            jlist.setBackground(color_full);
        }  else   if  (cell_info.length >  1 ) {
            jlist.setBackground(color_mid);
        }  else  {
            jlist.setBackground(color_empty);
        }
         this .setBackground(Color.white);
        jlist.setCellRenderer( new  MyJListCellRenderer( this ));


         return   this ;

    }

     public   boolean  isOpaque() {
         return  true;
    }
/*
    protected void paintComponent(Graphics g) {

        g.setColor(Color.white);
        g.fillRect(0, 0, getPreferredSize().width, getSize().height);
        this.setBorder(scborder);
        super.paintComponent(g);
    }
*/


}




Код: 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.
 class  PopupListener  extends  MouseAdapter {
     private  ScheduleCalendar adaptee;
     private  String title;
    PopupListener(ScheduleCalendar adaptee, String title) {
         this .adaptee = adaptee;
         this .title = title;
    }

     public   void  mouseReleased(MouseEvent e) {
        JList theList = ((JList) (e.getSource()));
         int  index = theList.locationToIndex(e.getPoint());

         if  (index >=  0 ) {
            theList.setSelectedIndex(index);
        }


         if  (e.isPopupTrigger()) {
            adaptee.activePopup(e, title);
//            e.consume();
        }
    }
}




Код: 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.
     public   void  activePopup(MouseEvent e, String borderTitle) {
        String borderMonth = borderTitle.substring( 0 , borderTitle.indexOf(" "));

        // it's previous or next month
         if  (!borderMonth.equals(months[report_month])) {
            e.consume();
             return ;
        }
        String borderDay = borderTitle.substring(borderTitle.indexOf(" ") +  1 ,
                                                 borderTitle.length());

        String selectedJobDate = borderDay +
                                 "-" + monthStart + "-" + jYearChooser1.getYear();

         if  (mode== this .SINGLE_MODE && (mysys.today.get(Calendar.YEAR)!=jYearChooser1.getYear() ||
                                       mysys.today.get(Calendar.MONTH)!=Integer.valueOf(monthStart)- 1  ||
                                       mysys.today.get(Calendar.DAY_OF_MONTH)!=Integer.valueOf(borderDay))) {
            e.consume();
             return ;
        }

        JList theList = ((JList) (e.getSource()));
        jMenuAdd.removeAll();
        jMenuItemListener =  new  scheduleCalendar_jMenuItem_mouseAdapter( this , borderDay);
         for  ( int  index =  0 ; index < addConsVector.size(); index++) {
            jMenuItem =  new  JMenuItem(addConsVector.elementAt(index).toString());
//            jMenuItem.addMouseListener(jMenuItemListener);
            jMenuItem.addActionListener(jMenuItemListener);
            jMenuAdd.add(jMenuItem);
        }

        popup.remove(jMenuItemDelete);
        jMenuItemDelete =  new  JMenuItem("удалить");
         if  (theList.getModel().getSize() >  0 ) {
            String consulter_name = theList.getSelectedValue().
                                    toString();
            jMenuItemDelete.setVisible(true);
            jMenuItemDelete.addActionListener( new 
                                              scheduleCalendar_jMenuItem_mouseAdapterDelete( this ,
                    borderDay, theList.getSelectedValue().
                    toString()));
        }  else  {
            jMenuItemDelete.setVisible(false);

        }
        popup.add(jMenuItemDelete);

        popup.show(theList, e.getX(), e.getY());
        e.consume();

    }

если поставить breakpoint на PopupListener, то получается что каждый раз когда кликаем на колонке содержащей текущую дату - сначала приходит ивент на текущую дату, потом на все последующие, которые были "кликнуты", т.е. после каждого клика приходит гнесколько ивентов и последний - на кликнутую дату

p.s. на сколько "не круто" написан код можно не писать, какой достался, прошу помочь решить проблему
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / [swing] не знаю что делать, eventы нажатия кнопки мыши
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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