Код не работает для кнопки качающегося изображения

Я написал этот код для отображения изображения вместо кнопки после Этот ответ

Мой код:

JButton btnCalender;
    try {
        
        BufferedImage calendarIcon = ImageIO.read(new File("Calendar_0.jpg"));
        btnCalender = new JButton("Calendar", new ImageIcon(calendarIcon));
        btnCalender.setBorder(BorderFactory.createEmptyBorder());
        btnCalender.setContentAreaFilled(false);
        btnCalender.setBounds(244, 177, 129, 36);
        frmOptions.getContentPane().add(btnCalender);
        btnCalender.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    

Но изображение не показывает. Область кнопки пуста. Все изображения находятся в папке проекта. Почему это происходит? Пожалуйста, дайте мне решение. Спасибо.

Изменить: решение найдено. Мое разрешение изображения было слишком большим. Я сжал это до 144*144. Теперь это работает.


person Amir Hossain    schedule 21.11.2013    source источник
comment
Для меня это не проблема.   -  person Masudul    schedule 21.11.2013
comment
Вы запускаете его из любой IDE? Почему вы храните изображения в исходной папке?   -  person Masudul    schedule 21.11.2013
comment
Да. все изображения находятся в папке src. Я тоже поместил эти изображения в папку проекта. Но не работает. IDE затмевает WindowBuilder.   -  person Amir Hossain    schedule 21.11.2013
comment
Похоже на неправильный путь. Для задач отладки попробуйте установить изображение пути абсолютно.   -  person manix    schedule 21.11.2013


Ответы (6)


Код, который вы разместили, выглядит нормально. Без остальной части кода трудно сказать наверняка, но похоже, что проблема, с которой вы столкнулись, связана с фактическим размещением кнопки в графическом интерфейсе.

Дважды проверьте, чтобы не было никаких исключений IOException при поиске/загрузке изображения.

person jzd    schedule 21.11.2013
comment
Исключения ввода-вывода нет. Я проверил это. Изображения также находятся в папке Project. Но до сих пор нет результата. - person Amir Hossain; 21.11.2013
comment
Пожалуйста, опубликуйте SSCCE, потому что происходит что-то еще, чего вы не включаете. - person jzd; 21.11.2013

Вы пробовали добавить:

btnCalender.setContentAreaFilled(false);
person Octoshape    schedule 21.11.2013

попробуйте удалить область границ и содержимого следующим образом:

BufferedImage calendarIcon = ImageIO.read(new File("Calendar_0.jpg"));
btnCalender = new JButton("Back", new ImageIcon(calendarIcon));
btnCalender.setBorder(BorderFactory.createEmptyBorder());
btnCalender.setContentAreaFilled(false);
person jandresrodriguez    schedule 21.11.2013
comment
я попробовал этот код, и он работает для меня, пожалуйста, проверьте, что изображение существует и находится в правильном каталоге - person jandresrodriguez; 21.11.2013

Есть две вещи, которые вы можете попробовать: во-первых, убедитесь, что вы указали макет "точное позиционирование" для contentPane
frmOptions.getContentPane().setLayout(null);
а также убедитесь, что вы перерисовали свою contentPane после того, как добавили компонент jbutton, подобный этому
frmOptions.getContentPane().repaint();
Не забудьте поставить его ПОСЛЕ того, как вы добавили кнопку на панель содержимого!

person Linus    schedule 21.11.2013

JFrame f = new JFrame("This is a test");
    f.setSize(400, 150);
    Container content = f.getContentPane();
    BufferedImage calendarIcon = ImageIO.read(new File("C:\\Documents and Settings\\sugandhan\\Desktop\\suganthan.jpg"));
    content.add(new JButton("Calendar", new ImageIcon(calendarIcon)));
    f.setVisible(true);

И, пожалуйста, проверьте путь к изображению

person Suganthan Madhavan Pillai    schedule 21.11.2013

Во-первых, для этого вам не нужен буферизованный образ, во-вторых, вам нужно исправить ссылку на изображение следующим образом:

JFrame frmOptions = новый JFrame();

JButton btnCalender = new JButton("Calendar", new ImageIcon(
        "./src/Calendar_0.jpg"));
btnCalender.setBorder(BorderFactory.createEmptyBorder());
btnCalender.setContentAreaFilled(false);
btnCalender.setBounds(244, 177, 129, 36);

btnCalender.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    }
});
frmOptions.getContentPane().add(btnCalender);
frmOptions.setDefaultCloseOperation(3);
frmOptions.pack();
frmOptions.setLocationRelativeTo(null);
frmOptions.setVisible(true);

Я надеюсь, что это поможет, если это так, сделайте это, пожалуйста;) Салам

person BilalDja    schedule 21.11.2013