Как мне заставить MouseListener работать на JTable - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь заставить JTable работать с MouseListener. Код прямо сейчас является примером программы для JTable с иконками. Я хочу, чтобы, если вы дважды щелкнули в строке, dialog должен был открыться с информацией из всей строки или только index-number из строки. Но моя проблема в том, что команда: table.addMouseListener(this); не работает, может быть, это из-за конструктора?

Я попытался использовать new object внутри основного метода и создать затем MousListener.

 public class TableIcon extends JPanel
 {
   public TableIcon()
   {
       Icon aboutIcon = new ImageIcon("Mypath");
       Icon addIcon = new ImageIcon("Mypath");
       Icon copyIcon = new ImageIcon("Mypath");

       String[] columnNames = {"Picture", "Description"};
       Object[][] data =
       {
           {aboutIcon, "Pic1"},
           {addIcon, "Pic2"},
           {copyIcon, "Pic3"},
       };

       DefaultTableModel model = new DefaultTableModel(data,columnNames)
       {
           public Class getColumnClass(int column)
           {
               return getValueAt(0, column).getClass();
           }

           public boolean isCellEditable(int row, int column)
           {
               return false;
           }

       };
       JTable table = new JTable( model );
       table.setPreferredScrollableViewportSize
           (table.getPreferredSize());
 // ################ MyError #########
       table.addMouseListener(this); // Error
 // ##################################
       JScrollPane scrollPane = new JScrollPane( table );
       add( scrollPane );  
   }

   private static void createAndShowGUI()
   {
       TableIcon test = new TableIcon();

       JFrame frame = new JFrame("Table Icon");
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.add(test);
       frame.setLocationByPlatform( true );
       frame.pack();
       frame.setVisible( true );
   }

   public static void main(String[] args)
   {
       EventQueue.invokeLater(new Runnable()
       {
           public void run()
           {
               createAndShowGUI();
           }
       });
   }
   public void mouseClicked(MouseEvent e)
   {
       System.out.println("clicked");
   }
}

В этом коде я ожидаю print с "clicked", но все, что я получаю, это эта ошибка Моя ошибка TableIcon не может быть приведен к java.awt.event.MouseListener

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Вы ссылаетесь на this, который является классом TableIcon, и он не реализует интерфейс MouseListener, но метод addMouseListener() ожидает его.

public void addMouseListener(MouseListener l)

Если вы хотите пойти с приближениемКласс TableIcon также выступает в роли обработчика событий, затем добавьте реализацию для интерфейса MouseListener.

public class TableIcon extends JPanel implements MouseListener {

 ...

 public void mouseClicked(MouseEvent e) {
    // code for handling of the click event
 }

 public void mouseEntered(MouseEvent e) {
 }

 public void mouseExited(MouseEvent e) {
 }

 public void mousePressed(MouseEvent e) {
 }

 public void mouseReleased(MouseEvent e) {
 }

}
1 голос
/ 25 октября 2019

Попробуйте использовать класс адаптера:

table.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
      if (e.getClickCount() == 2) {
        //Code for handling the double click event
      }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...