Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> смена рисунка на форме по нажатию кнопки 
V
    Опции темы
Pawl
Дата 13.11.2013, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 1
Всего: 28



Собственно, возникла такая проблема. С GUI практически не работал, а тут вот попалось... Уже предельно упростил задачу, не знаю, как сделать: На форме отображается рисунок, надо, чтобы при нажатии кнопки этот рисунок поменялся. Вот мой код (не рабочий, но желательно, чтобы рабочий был максимально близок к этому):
Код

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class MainFrame extends JFrame {
    private JButton b;
    private JPanel p = paintImg("f1.bmp");

// вот тут я для смены рисунка вешаю событие на кнопку
    protected void addButtonAction(String buttonName) {
        b = new JButton(buttonName);
        b.addActionListener(new ActionListener() {            
            public void actionPerformed(ActionEvent ev) {
                p = paintImg("f2.bmp");
                repaint();
            }
        });        
    }

    protected JPanel paintImg(final String ImgName) {
        return new JPanel() {
            public void paintComponent(Graphics g) {
                Image image = null;
                try {
                    image = ImageIO.read(new File(ImgName));
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (image != null) {
                    g.drawImage(image, 0, 0, 450, 50, null);
                }
            }
        };
    }

    public MainFrame() {
        setSize(500, 200);
        addButtonAction("GO!");
        Box contentBox = Box.createVerticalBox();
        contentBox.add(b);
        contentBox.add(p);
        getContentPane().add(contentBox);        
    }

    public static void main(String[] args) {
        MainFrame frame = new MainFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Спасибо заранее за помощь!


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Michael.de
Дата 14.11.2013, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: нет
Всего: 9



Pawl: возможно нижеперечисленное может пригодиться

1. Общая информация: _http://docs.oracle.com/javase/tutorial/uiswing/components/icon.html
2. пример: _http://docs.oracle.com/javase/tutorialJWS/samples/uiswing/IconDemoProject/IconDemo.jnlp
3. и его java source code + *.jpg: _http://docs.oracle.com/javase/tutorial/uiswing/examples/components/index.html#IconDemo
PM MAIL   Вверх
Michael.de
Дата 18.11.2013, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: нет
Всего: 9



Если ещё актуально... вот рабочий пример:
Код

import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class MainFrame extends JFrame implements ActionListener {
    private JButton b1, b2;
    private JPanel p;
    private JLabel l;

    public MainFrame() {
        setSize(500, 200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        p=new JPanel();
        b1=new JButton("first");
        b2=new JButton("second");
        b1.addActionListener(this);
        b2.addActionListener(this);
        l=new JLabel();
        paintImg(l, "f1.bmp");
        p.add(b1);
        p.add(b2);
        p.add(l);
        getContentPane().add(p);
        setVisible(true);
    }

    private JLabel paintImg(JLabel l, String ImgName) {
    Image image = null;
    try {
        image = ImageIO.read(new File(ImgName));
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (image != null) {
        l.setIcon(new ImageIcon(image));
    }
    return l;
    }

    public void actionPerformed(ActionEvent e) {
        Object o = e.getSource();
        if (o == b1) {
            paintImg(l, "f2.bmp");
        }
        else if (o == b2) {
            paintImg(l, "f1.bmp");
        }
        else ; // etc.
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(
            new Runnable() {
                public void run() {
                    new MainFrame();
                }
            }
        );
    }
}


P.S. ... и repaint() с paintComponent() не требуется smile

Это сообщение отредактировал(а) Michael.de - 18.11.2013, 17:43
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.