JTable I MouseAdapter

0

Witam.
Mój Problem polega na tym, że chciałbym zrobić w tabeli akcje myszy która zachowuje się jak ikony w Windowsie, czyli...
Gdy najadę na jakiś wiersz w tabeli i wcisnę prawy myszki to tabelka się zaznacza i wyswietla się PopupMenu...
Gdy zaznaczę sobie kilka wierszy w tabeli (lewy myszki i ctrl) i najadę kursorem na jednen z zaznaczonych wierszy, klikając prawy myszki to wyswietla się do nich PopupMenu
Ale gdy mam zaznaczone kilka wierszy w JTable i najadę kursorem na nie zaznaczony wiersz, wciskając przy tym prawy myszy to wyswietla się JPopupMenu do tych zaznaczonych wierszy, a nie do tej nie zaznaczonej...
Męczę się nad tym juz 3 dni i nie mogę tego rozgryźć...
kod :

tabela.addMouseListener(new MouseAdapter() 
		{
		    @Override
		    public void mouseReleased(MouseEvent e) 
		    {
		        int r = tabela.rowAtPoint(e.getPoint());
		        	
		        if (r>= 0 && r < tabela.getRowCount()) 
		        {
		        	if(tabela.getSelectedRowCount()<=1)
		        		tabela.setRowSelectionInterval(r, r);
		        	else if((tabela.getSelectedRowCount()>1)&&( tabela.rowAtPoint(e.getPoint())!=r))
		        	{
						
							tabela.clearSelection();
							tabela.setRowSelectionInterval(r, r);
							
		        	}
		        } 
		        else
		        	tabela.clearSelection();
		        
		        
		        int rowindex = tabela.getSelectedRow();
		        if (rowindex < 0)
		        {
		        	
		        	return;
		        }
		            
		        if (e.isPopupTrigger()) 
		        {
		        	Edycja.show(e.getComponent(), e.getX(), e.getY());
		        }
		    }
		});
0

Nikt nie pomoże? ...

0

Jaka Java? Jaki system? U mnie Twój kod działa (chyba) zgodnie z Twoimi oczekiwaniami. Piszę chyba, bo nie jestem pewien co znaczy "do tych" w tym zdaniu:

wyswietla się JPopupMenu do tych zaznaczonych wierszy

0

Java najnowsza, Win 7 x64 , Zaznacz sobie na pulpicie kilka plików (ctrl + lewy myszki), a następnie kliknij prawym na nie zaznaczony plik to zrozumiesz o co mi chodzi :P odznacząją się te zaznaczone wczesniej pliki i zaznacza się nowy plik i do niego wyskakuje menu ;) chodzmi o taką samą funkcjonalność tylko ze w tabeli ;s A i jeszcze mam problem do tego, że gdy wyjde poza obszar tabeli, (czyli akcja MouseExited) i gdy wcisne lewy myszki, to wszystkie pola się nie odznaczają ;)

public void mouseExited(MouseEvent e)
		    {
		    	if((SwingUtilities.isLeftMouseButton(e)))
				tabela.clearSelection();
		    }
0

Na razie pierwszy problem.

                int r = tabela.rowAtPoint(e.getPoint());
                ...
                    else if((tabela.getSelectedRowCount()>1)&&( tabela.rowAtPoint(e.getPoint())!=r))
                    {
 
                            tabela.clearSelection();
                            tabela.setRowSelectionInterval(r, r);
 
                    }

Warunek w else if nigdy nie będzie spełniony =>kod zmieniający zaznaczenie nigdy się nie wykona. Zmień warunek na

else if((table.getSelectedRowCount()>1)&&e.isPopupTrigger())

Jeśli chodzi to drugi problem, to zupełnie źle kombinujesz. Metoda mouseExited jest wywoływana w momencie gdy kursor opuszcza tabelę, późniejsze kliknięcia nie są już widziane wewnątrz tej metody. Musiałbyś dodać MouseListenera do reszty okna.

0

Tak, ale teraz nie działa ta opcja...
""Gdy zaznaczę sobie kilka wierszy w tabeli (lewy myszki i ctrl) i najadę kursorem na jednen z zaznaczonych wierszy, klikając prawy myszki to wyswietla się do nich PopupMenu""

0

Chodzi mi dokladnie o to, że gdy kursor myszki NIE jest na jednym z kilku wczesniej zaznaczonych wierszy to powinno się wyswietlic PopUp menu tylko do tego jednego wiersza( gdzie aktualnie znajduje się kursor myszki), a gdy kursor jest na jednym z kilku zaznaczonych wierszy to kursor powinnien wyswietlic menu dla tych wszystkich zaznaczonych wierszy :s

0

Czym się różni "wyświetlić PopUp menu tylko dla tego jednego wiersza" od "wyświetlić menu dla tych wszystkich zaznaczonych wierszy"? Może musisz przekazać odpowiednie parametry do metody show?

                if (e.isPopupTrigger()) 
                {
                    Edycja.show(e.getComponent(), e.getX(), e.getY());
                }
0

Różni się to tym, że np. jak chcę usuwać/kopiować rekordy to ciężko robić to pojedynczo(A w opcjach popmenu mam wlasnie te usuwanie/kopiowanie), ale tez gdy chce zaznaczyc jeden wiersz prawym myszki i przy tym uruchomic Popup menu to dla jednego mają byc te opcje rownież dostepne... i tak jak wspomnialem wczesniej, z tym kursorem i zaznaczonymi wierszami.. Ciężko to wytłumaczyć słownie, najlepiej przyjrzeć się jak działa kursor myszki i jej przyciski na folderach/plikach w jakims folderze albo na pulpicie.

0

Zrobione! :D Zostawiam dla potomnych :

public void mouseReleased(MouseEvent e) 
		    {
		        int index_wiersza = tabela.rowAtPoint(e.getPoint());
		        	
		     
		        
		        
		            
		        if (e.isPopupTrigger()) 
		        {
		        	
		        		if(tabela.getSelectedRowCount()<=1)
		        			{
		        				tabela.setRowSelectionInterval(index_wiersza, index_wiersza);
		        				System.out.println(index_wiersza);
		        			}
		        		else
		        		{
		        			int[] zaznaczone_wiersze = tabela.getSelectedRows();
		        		
		        			int czy_ppm_na_zaznaczonym_wierszu=0;
		        			for(int i=0;i<tabela.getSelectedRowCount();i++)
		        			{
		        				if(index_wiersza==zaznaczone_wiersze[i])
		        					czy_ppm_na_zaznaczonym_wierszu++;
		        				
		        				
		        			}
		        			if(czy_ppm_na_zaznaczonym_wierszu==0)
		        			{
		        				tabela.clearSelection();
								tabela.setRowSelectionInterval(index_wiersza, index_wiersza);
		        			}
							
		        		}

		        	Edycja.show(e.getComponent(), e.getX(), e.getY());
		        }
		    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1