JTable-Zelle mit JPopupMenu

SnEaKy

Erfahrenes Mitglied
Hallo

Ich habe eine JTable und würde gerne auf eine Zelle dieser Tabelle ein PopupMenu setzten. Hab nun auch schon ein paar Versuche gestartet, aber die gewünschte Lösung ist noch nicht dabei gewesen. Kann mir vielleicht jemand weiterhelfen?

Danke!
 
Moin!
Also ich hab dich jetzt so verstanden, dass du gerne für bestimmte Zellen ein Popup Menü haben möchtest?! Dann schau dir mal das an:
Code:
/*
 * Start.java
 *
 * Created on 28. Juni 2007, 14:34
 */

/**
 *
 * @author  meinereiner
 */
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JMenuItem;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Start extends JFrame{
    JScrollPane scoller = new JScrollPane();
    JTable simpleTable = new JTable(new DefaultTableModel(new String[] {"Spalte0 ","Spalte1"}, 2 ));
    
    JPopupMenu popupMenu = new JPopupMenu();
    
    /** Creates a new instance of Start */
    public Start() {
        this.setSize(new Dimension(400, 300));
        this.getContentPane().add(scoller, BorderLayout.CENTER);
        scoller.getViewport().add(simpleTable, null);
        
        JMenuItem menuItem = new JMenuItem("info for column 1");
        menuItem.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                System.out.println("Info");
            }
        });
        popupMenu.add(menuItem);
        
        simpleTable.addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e) {
                showPopup(e);
            }
            
            public void mouseReleased(MouseEvent e) {
                showPopup(e);
            }
           
            
        });
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    private void showPopup(MouseEvent e) {
        if (e.isPopupTrigger()) {
            int column = simpleTable.columnAtPoint(e.getPoint());
            if(column==1)
                popupMenu.show(e.getComponent(), e.getX(), e.getY());
        }
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new Start();
    }
    
    
    
}


*grüssle*
MeinerEiner
 
Hallo,

meinst du ein PopupMenu als eine Art Kontext-Menü bei Rechtsklick?
Dann könntest du z.B. im MouseListener den Point vom MouseEvent benutzen und von der JTable über rowAtPoint() und columnAtPoint() die Zeile und Spalte bekommen, die mit der gewünschten Zelle vergleichen und ggf. das PopupMenu öffnen.
 
Hi,

du musst dir eine Klasse schreiben die von DefaultTableCellRenderer erbt und in der Methode getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) in der richtigen row und column das gewünschte Component zurückgeben.

Lg, Yanick
 
Zurück