2015-09-09 2 views
-1

Я хочу добавить кратные изображения в JFrame и сделать каждый из них доступным для клика. Поскольку слушатели не могут быть реализованы непосредственно на изображении в Swing, мне пришлось бы сделать эти много объектов JComponent и реализовать слушателей на этих компонентах.Swing: создание нескольких изображений в JComponent/JPanel

Является ли это понимание правильным или есть лучший подход?

+0

* «есть лучший подход?» * Один 'ActionListener' прилагается ко многим кнопок, которые использует' Event.getSource() ', чтобы выяснить, какие кнопки (и, следовательно, какое изображение) была нажата, или' JList 'для отображения всех изображений. Вот [пример показа изображений в списке] (http://stackoverflow.com/a/9544652/418556). –

+0

Вы также можете посмотреть JButton.setIcon (новый ImageIcon (...)). .. – ControlAltDel

+0

Я также хочу сделать изображение растяжимым. Могу ли я использовать мышь на кнопках и менять ширину кнопок на событиях мыши? –

ответ

0

Есть несколько способов, вы можете справиться с этим:

  1. Создать класс самостоятельно и расширяет его JComponent

    class ClickableImage extends JComponent implements MouseListener 
    { 
        private BufferedImage img; 
    
        //Include all the overridden methods for MouseListener 
        @Override public void mouseClicked(MouseEvent e){ 
         //To do upon clicking on image; 
        } 
    } 
    
  2. Вы можете установить изображение на JButton. Добавьте ActionListener для этих JButton (s).

  3. Используйте BufferedImage для своего изображения, определите щелчок по этому изображению с помощью положения курсора мыши.

    class ClikableImage extends Rectangle{ 
        private BufferedImage img; 
        //You can include any other class members you need. 
    
        public MyClickableImage(int x, int y, int width, int height){ 
         setBounds(x, y, width, height); 
        } 
    } 
    

Для обнаружения нажмите на конкретное изображение, итерацию по списку ClickableImage и проверьте, содержит ли что ClickableImage курсор мыши координаты.

//Within a MouseListener 
for(ClickableImage ci : list) 
    if(ci.contains(e.getX(), e.getY())) 
     clickedImage = ci; 
+0

Я также хочу сделать изображение растяжимым. Могу ли я использовать mouselistener на кнопках и менять ширину кнопок на событиях мыши? Какой подход будет лучше справиться с этим? –

+0

@RajTrivedi Оба подхода одинаково хороши для растягиваемого изображения. Вам нужно будет перерисовать JPanel/JComponent с JButton в обоих случаях. Подход к использованию JButton проще, потому что вы можете использовать доступные листеры, такие как ActionListener, для обнаружения кликов вместо ручного перебора по списку объектов. – user3437460