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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка изображении через JTextField 
:(
    Опции темы
wishamster
Дата 20.4.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



День добрый.
Я недавно начал работать с GUI на Java.

Возникла такая проблема:
1. Есть JTextField в который пишем наименование изображения  для загрузки (C:\\image.jpg).
2. Есть кнопка AddImage после нажатия на которую это изображения должно появится ниже

Вопрос в том что у меня изображение загружается, но не появляется.
Как решить эту задачу?

Код

import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class LoadImage extends JFrame
{
    protected String image_path; 
    protected JButton add_button;
    protected JTextField add_text_field; 
    protected JLabel label;
    protected JPanel addPanel;

    public LoadImage()
    {
        this.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
       
        setTitle("Download Image");
        
        setSize(640, 300);
        addPanel = new JPanel();
        add_text_field = new JTextField(20);
        addPanel.add(add_text_field);
        add_button = new JButton("Add Image");
        addPanel.add(add_button);
        add_button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)  //в этот момент загружаем изображение
            {
                setImagePath();
                showLoadedImage();
            }
        });
        add_button.setVisible(true);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(addPanel, BorderLayout.NORTH);

    }

    // extragem din cimpul textual calea spre imagine
    private void setImagePath()
    {
        image_path = add_text_field.getText();
        // JOptionPane.showMessageDialog(this, image_path);
    }

    private void showLoadedImage()
    {
        Icon bug = new ImageIcon(getClass().getResource(image_path));
        label = new JLabel("", bug, SwingConstants.CENTER);
        addPanel.add(label);                      // здесь ошибка
        addPanel.repaint();    
    }

    public void paint(Graphics g)
    {
       
    }

    public static void main(String args[])
    {
        LoadImage oLoadImage = new LoadImage();
        oLoadImage.setVisible(true);
        // oLoadImage.show();
    }
}




PM MAIL   Вверх
dorogoyIV
Дата 20.4.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



ну так метод paint() пустой.
интересно -  чем ты хочешь показать свою картинку?
PM MAIL   Вверх
dorogoyIV
Дата 20.4.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
import java.net.*;

public class WorkWithImage extends JFrame
{
 MyChooser chooser = new MyChooser();

 WorkWithImage()
 {
  setBounds(100, 100, 400, 300);
  setJMenuBar(new MyMenu(this));
 }

 public static void main(String [] args)
 {
  JFrame f = new WorkWithImage();
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

class MyMenu extends JMenuBar
             implements ActionListener
{
 WorkWithImage f;

 MyMenu(WorkWithImage f)
 {
  this.f = f;
  JMenu file = new JMenu("File");
  JMenuItem open = new JMenuItem("Open file");
  JMenuItem exit = new JMenuItem("Exit");

  file.add(open);
  file.add(exit);
  add(file);

  open.addActionListener(this);
  exit.addActionListener(this);
 }

 public void actionPerformed(ActionEvent e)
 {
  if(e.getActionCommand().equals("Exit"))
    System.exit(0);

  else
  {
   MyChooser chooser = f.chooser;
   int x = chooser.showOpenDialog(null);

   if(x == JFileChooser.APPROVE_OPTION)
   {
    MyPanel panel = new MyPanel();
    panel.setImageFile(new File(chooser.getSelectedFile().getAbsolutePath()));
    f.add(panel);
    f.validate();
    f.repaint();
   }
  }
 }
}

class MyChooser extends JFileChooser
{
 MyChooser()
 {
  setFileFilter(new MyFilter());
 }

 class MyFilter extends FileFilter
 {
  public boolean accept(File file)
  {
   if(file.isDirectory())
     return true;
   return file.getName().endsWith("gif");
  }

  public String getDescription()
  {
   return ".gif";
  }
 }
}

class MyPanel extends JPanel 
              implements MouseMotionListener
{
 BufferedImage originalImage = null;
 Image image = null;
 static Point oldPoint = null;
 static Point newPoint = null;

 MyPanel() 
 {
  initComponents();
  addMouseMotionListener(this);
 }

 public void mouseMoved(MouseEvent e)
 {
  oldPoint = e.getPoint();
 }
 public void mouseDragged(MouseEvent e)
 {
  newPoint = e.getPoint();
  repaint();
 }
    
 private void initComponents() 
 {
  setLayout(null);

  addComponentListener(new ComponentAdapter() 
  {
   public void componentResized(ComponentEvent e)
   {
    formComponentResized(e);
   }
  });
 }
    
 private void formComponentResized(ComponentEvent e)
 {
  int w = getWidth();
  int h = getHeight();

  if ((originalImage != null) && (w > 0) && (h > 0)) 
  {
   image = originalImage.getScaledInstance(w, h, Image.SCALE_DEFAULT);
   repaint();
  }
 }

 public void paint(Graphics g) 
 {
  if (image != null) 
  {
   g.drawImage(image, 0, 0, null);
  }
       
  super.paintChildren(g);
  super.paintBorder(g);

  g.setColor(new Color(0, 0, 100, 50));

  if(oldPoint != null && newPoint != null)
  {
   g.fillRect(oldPoint.x, oldPoint.y,
              newPoint.x - oldPoint.x,
              newPoint.y - oldPoint.y);

   if(oldPoint.x > newPoint.x)
   {
    g.fillRect(newPoint.x, oldPoint.y,
               oldPoint.x - newPoint.x,
               newPoint.y - oldPoint.y);
   }
   if(oldPoint.y > newPoint.y)
   {
    g.fillRect(oldPoint.x, newPoint.y,
               newPoint.x - oldPoint.x,
               oldPoint.y - newPoint.y);
   }
   if(oldPoint.x > newPoint.x && oldPoint.y > newPoint.y)
   {
    g.fillRect(newPoint.x, newPoint.y,
               oldPoint.x - newPoint.x,
               oldPoint.y - newPoint.y);
   }
  }
 }
    
 public BufferedImage getImage() 
 {
  return originalImage;
 }
    
 public void setImage(BufferedImage image) 
 {
  this.originalImage = image;
  int w = this.getWidth();
  int h = this.getHeight();

  if ((originalImage != null) && w > 0 && h > 0)
  {
   this.image = originalImage.getScaledInstance(w, h, image.SCALE_DEFAULT);
  }
 }

 public void setImageFile(File file) 
 {
  try 
  {
   if (file == null) 
   {
    originalImage = null;
   }

   BufferedImage bi = ImageIO.read(file);
   originalImage = bi;
  } 
  catch (IOException ex){}
  repaint();
 }
}

на вот, позанимайся.
найдешь ошибку - плюс дам.
сразу предупреждаю - с анимироваными ГИФАМИ плохо дружит
PM MAIL   Вверх
wishamster
Дата 20.4.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



так вот дело в том что я не понимая что написать в метод paint()
PM MAIL   Вверх
dorogoyIV
Дата 21.4.2008, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(wishamster @  20.4.2008,  16:23 Найти цитируемый пост)
так вот дело в том что я не понимая что написать в метод paint()

в твоем случае метод paint и не нужен - раз ты ставишь картинку на JLabel
Код

    private void showLoadedImage()
    {
        setImagePath(); // надо здесь вызвать этот метод, а там выше в 39 строке можно убрать
        Icon bug = new ImageIcon(getClass().getResource(image_path));
        label = new JLabel("", bug, SwingConstants.CENTER);
        addPanel.add(label);
        addPanel.repaint();    
        validate();
    }

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

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

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


 




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


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

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