Hallo,
ich habe eine JTable. Diese kann ggf. tausende von Einträgen enthalten.
Wenn ich in der Tabelle eine Zeile anklicke und dann mit der rechten Maustaste das PopupMenü aufrufen möchte, positioniere ich es bisher so:
Das Ganze funktioniert super, so lange die Masse der Einträge/Zeilen nicht die Höhe der/des ScrollPane überschreitet. Sobald ich scrollen muß, verrutscht mein PopupMenü beim Erscheinen, mit jeder weiteren Zeile, immer weiter nach unten, obwohl der Mauszeiger seine Position nicht ändert.
Ein Beispiel:
Mein ScrollPane hat zum Beispiel eine Höhe von 10 Zeilen und ich habe eine Tabelle mit 50 Zeilen.
Ich scrolle nun zum Beispiel bis zur Zeile 40. Diese ist jetzt, im ScrollPane, als Zeile 3 sichtbar. Klicke ich da drauf und dann auf die rechte Maus-Taste, erscheint das Menü am untersten Bildschirmrand, obwohl sich die Maus so ca. in der Mitte des Displays befindet.
Ich weiß nicht worauf ich referenzieren muß, damit das PopupMenü, egal wie tief ich in der Liste scrolle, immer rechts unten neben dem MausZeiger erscheint. Wie bekomme ich das hin? Der/die/das ScrollPane scheint ja schon mal der falsche Weg zu sein...
Hilfe!!!
ich habe eine JTable. Diese kann ggf. tausende von Einträgen enthalten.
Java:
// aus der Klasse MainFrame
//
tabActiveJobs = new JTable();
tabActiveJobs.getSelectionModel().addListSelectionListener(appController);
tabActiveJobs.getColumnModel().getSelectionModel().addListSelectionListener(appController);
tabActiveJobs.addKeyListener(appController);
tabActiveJobs.addMouseListener(appController);
panel.add(tabActiveJobs);
// verhindern, dass Spalten vertauscht werden koennen
tableHeader = tabActiveJobs.getTableHeader();
tableHeader.setResizingAllowed(false);
tableHeader.setReorderingAllowed(false);
scpTabActiveJobs = new JScrollPane();
scpTabActiveJobs.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scpTabActiveJobs.setBounds(10, 10, 740, 165);
scpTabActiveJobs.setViewportView(tabActiveJobs);
panel.add(scpTabActiveJobs);
Wenn ich in der Tabelle eine Zeile anklicke und dann mit der rechten Maustaste das PopupMenü aufrufen möchte, positioniere ich es bisher so:
Java:
// aus der Klasse AppController
//
public void mouseClicked(MouseEvent e){
if(e.getModifiers() == 4){ // rechte Maustaste gedrueckt
if(mainFrame.getTabActiveJobsIsSelected() == true){
int trueX = mainFrame.getTabActiveJobsY() + e.getX() + 25;
int trueY = mainFrame.getTabActiveJobsY() + e.getY() + 110;
mainFrame.getPopUpMenuActive(trueX, trueY);
}
}
}
// aus der Klasse MainFrame
//
public int getTabActiveJobsX(){return scpTabActiveJobs.getX();}
public int getTabActiveJobsY(){return scpTabActiveJobs.getY();}
public void getPopUpMenuActive(int x , int y){
popupMenu = new JPopupMenu();
menuItem = new JMenuItem("Beenden");
menuItem.addActionListener(appController);
menuItem.setActionCommand(Integer.toString(STOP_ACTION));
popupMenu.add(menuItem);
menuItem = new JMenuItem("Statusinformationen anzeigen");
menuItem.addActionListener(appController);
menuItem.setActionCommand(Integer.toString(PERMIT_PROMPT_ACTION));
popupMenu.add(menuItem);
popupMenu.setLabel("Stopmenue");
popupMenu.setBorder(new javax.swing.border.BevelBorder(javax.swing.border.BevelBorder.RAISED));
popupMenu.addPopupMenuListener(appController);
popupMenu.show(this, x, y);
}
Das Ganze funktioniert super, so lange die Masse der Einträge/Zeilen nicht die Höhe der/des ScrollPane überschreitet. Sobald ich scrollen muß, verrutscht mein PopupMenü beim Erscheinen, mit jeder weiteren Zeile, immer weiter nach unten, obwohl der Mauszeiger seine Position nicht ändert.
Ein Beispiel:
Mein ScrollPane hat zum Beispiel eine Höhe von 10 Zeilen und ich habe eine Tabelle mit 50 Zeilen.
Ich scrolle nun zum Beispiel bis zur Zeile 40. Diese ist jetzt, im ScrollPane, als Zeile 3 sichtbar. Klicke ich da drauf und dann auf die rechte Maus-Taste, erscheint das Menü am untersten Bildschirmrand, obwohl sich die Maus so ca. in der Mitte des Displays befindet.
Ich weiß nicht worauf ich referenzieren muß, damit das PopupMenü, egal wie tief ich in der Liste scrolle, immer rechts unten neben dem MausZeiger erscheint. Wie bekomme ich das hin? Der/die/das ScrollPane scheint ja schon mal der falsche Weg zu sein...
Hilfe!!!
Zuletzt bearbeitet: