Menu Popup w tabelce?

0

Prosze o pomoc, napisałem mały programik aby nauczyć się dodawać menu do tabelki (PopupMenu ). Wszystko działa dobrze w samym oknie. Jednak jak dołożę tabele zaczynają się problemy.
Co chce uzyskac?, chciałbym aby przy kliknieciu na tebeli, podswitlał sie jeden wiersz (to juz mam), i wyświetlało sie menu do Popup zwiazane z ta tabela. na razie testowo chce aby to menu zadziałało ;/

package aplikacja;

import java.awt.Frame;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.Popup;
import javax.swing.table.AbstractTableModel;

class Aplikacja extends Frame implements ActionListener, MouseListener
{
 PopupMenu menu;
 JFrame frame = new JFrame("Stany");
 JPanel panel = new JPanel();
 String[] nag={"Stany:"};
 JTable table = new JTable();
 JScrollPane js = new JScrollPane();

 public Aplikacja()
  {
   menu= new PopupMenu();
   menu.add(new MenuItem("Pozycja 1"));
   menu.getItem(0).setActionCommand("posision1");
   menu.add(new MenuItem("Pozycja 2"));
   menu.getItem(1).setActionCommand("exit");
   menu.addActionListener(this);
   frame.add(menu);
   frame.addMouseListener(this);
   //---------------------------------------------------------------------------
   String[][] dane=new String[5][1];
    for (int i=0;i<5;i++)
         for (int j=0;j<1;j++)
         {
           dane[i][0]="test";
         }
   //---------------------------------------------------------------------------
   ModelTabelki model = new ModelTabelki( dane, nag );
   table = new JTable(model);
   js = new JScrollPane( table );
   js.setBounds(10, 10, 100, 100);   //szerokosc, długość
   panel.add(js);
   frame.add(panel);
   frame.setSize(500,330);
   panel.setLayout(null);                                                            //Wyłancza automatyczne ustawianei komponentów
   frame.setVisible(true);
   frame.setLocationRelativeTo(null);
  }

    public static void main(String[] args) {new Aplikacja();}
    public void mousePressed(MouseEvent e) {
                                            if(e.getButton()==MouseEvent.BUTTON3)
                                               menu.show(this, e.getX(), e.getY());
                                           }
    public void actionPerformed(ActionEvent e) {
                                                String command=e.getActionCommand();
                                                if(command.equals("exit"))
                                                   dispose();
                                               }

    public void mouseClicked(MouseEvent e) { }
    public void mouseReleased(MouseEvent e) { }
    public void mouseEntered(MouseEvent e) {  }
    public void mouseExited(MouseEvent e) {   }
    //--------------------------------------------------------------------------
    class ModelTabelki extends AbstractTableModel
        {
                Object[][] data;
                Object[] naglowek;
                public ModelTabelki(Object[][] dat, Object[] nag)
                       {
                        data = dat;
                        naglowek = nag;
                       }
                public int getColumnCount()
                       {
                        if(naglowek!=null)
                        return naglowek.length;
                        return 0;
                       }
                public int getRowCount()
                       {
                        if(data!=null)
                        return data.length;
                        return 0;
                       }
                public String getColumnName(int col)
                       {
                       return naglowek[col].toString();
                       }
                public Object getValueAt(int row, int col)
                {
                return data[row][col];
                }
        }
}
0

Hej.
spróbuj tak: dodaj do tabelki listener:

myJTable.addMouseListener(popupListener);

A klasa listenera wygląda tak:

  class PopupListener extends MouseAdapter {
    public void mousePressed(MouseEvent e) {
      showPopup(e);
    }

    public void mouseReleased(MouseEvent e) {
      showPopup(e);
    }

    private void showPopup(MouseEvent e) {
      if (e.isPopupTrigger()) {
        popupMenu.show(e.getComponent(), e.getX(), e.getY());
      }
    }
  }

I powinno zadziałać.

Pozdrawiam.

0

niestety ;/ ale dzięki za pomoc ;)

0

Juz sobie poradziłem, wygląda to tak Może komuś się przyda ;)

package aplikacja;

import java.awt.Frame;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.Popup;
import javax.swing.table.AbstractTableModel;

class Aplikacja extends Frame implements ActionListener, MouseListener
{
PopupMenu menu;
JFrame frame = new JFrame("Stany");
JPanel panel = new JPanel();
String[] nag={"Stany:"};
JTable table = new JTable();
JScrollPane js = new JScrollPane();
int index_do_edycji;

public Aplikacja()
{
menu= new PopupMenu();
menu.add(new MenuItem("Wyjście"));
menu.getItem(0).setActionCommand("exit");
menu.add(new MenuItem("Nr wiersza"));
menu.getItem(1).setActionCommand("Nr wiersza");
menu.addActionListener(this);
frame.add(menu);
//frame.addMouseListener(this);
//---------------------------------------------------------------------------
String[][] dane=new String[5][1];
for (int i=0;i<5;i++)
for (int j=0;j<1;j++)
{
dane[i][0]="test";
}
//---------------------------------------------------------------------------
ModelTabelki model = new ModelTabelki( dane, nag );
table = new JTable(model);

table.addMouseListener(new MouseAdapter()
{

       public void mouseClicked(final MouseEvent e)
            {
            if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount()==2)
                {
                 JTable tabela=(JTable)(e.getSource());
                 index_do_edycji=tabela.getSelectedRow();
                 menu.show(e.getComponent(), e.getX(), e.getY());
                }
            };
        });

js = new JScrollPane( table );
js.setBounds(10, 10, 100, 100); //szerokosc, długość
panel.add(js);
frame.add(panel);
frame.setSize(500,330);
panel.setLayout(null); //Wyłancza automatyczne ustawianei komponentów
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}

public static void main(String[] args) {new Aplikacja();}
public void mouseClicked(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
//--------------------------------------------------------------------------
public void actionPerformed(ActionEvent e)
{
 String command=e.getActionCommand();
 if(command.equals("exit")){dispose();}
 if(command.equals("Nr wiersza")){
                                 JOptionPane.showMessageDialog(null,index_do_edycji,"",JOptionPane.INFORMATION_MESSAGE);
                                 }
//--------------------------------------------------------------------------
class ModelTabelki extends AbstractTableModel
    {
            Object[][] data;
            Object[] naglowek;
            public ModelTabelki(Object[][] dat, Object[] nag)
                   {
                    data = dat;
                    naglowek = nag;
                   }
            public int getColumnCount()
                   {
                    if(naglowek!=null)
                    return naglowek.length;
                    return 0;
                   }
            public int getRowCount()
                   {
                    if(data!=null)
                    return data.length;
                    return 0;
                   }
            public String getColumnName(int col)
                   {
                   return naglowek[col].toString();
                   }
            public Object getValueAt(int row, int col)
            {
            return data[row][col];
            }
    }

}

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