Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/69: Рейтинг темы: голосов - 69, средняя оценка - 4.65
610 / 93 / 4
Регистрация: 08.07.2010
Сообщений: 1,893

Загрузить или сохранить картинку в jpanel

01.10.2010, 13:29. Показов 14062. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как загрузить или сохранить картинку в jpanel?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2010, 13:29
Ответы с готовыми решениями:

Загрузить картинку и сохранить в базу
Windows Forms, SQL Server. Подскажите как загрузить картинку и сохранить в базу openFileDialog1.ShowDialog(); ...

Как сохранить картинку в базу данных а потом её оттуда загрузить?
Вопрос начинающего: Как сохранить картинку в базу данных а потом её оттуда загрузить

OpenFileFialog - как загрузить картинку и сохранить ее в качестве свойства BackGroundImage
Здравствуйте! Подскажите пожалуйста, как мне дать возможность пользователю загрузить с жесткого диска свою картинку и сохранить ее в...

18
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
01.10.2010, 21:54
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
import javax.imageio.ImageIO;
 
public class PicturePanel extends javax.swing.JPanel {
    private static final long serialVersionUID = 1L;
    private BufferedImage originalImage = null;
    private Image image = null;
    public float suSize;
    
    public PicturePanel() {
        initComponents();
    }
    
    private void initComponents() {
        setLayout(null);
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                formComponentResized(evt);
            }
        });
 
    }
    
    private void formComponentResized(java.awt.event.ComponentEvent evt) {
        int w = this.getWidth();
        int h = this.getHeight();
        if ((originalImage != null) && (w > 0) && (h > 0)) {
            image = originalImage.getScaledInstance(w, h, Image.SCALE_DEFAULT);
            this.repaint();
        }
    }
    
    public void paint(Graphics g) {
        
        if (image != null) {
            g.drawImage(image, 0, 0, null);
        }      
        super.paintChildren(g);
        super.paintBorder(g);
    }
    
  
    public BufferedImage getImage() {
        return originalImage;
    }
    
    public void setImage(BufferedImage image) {
        this.originalImage = image;
        suSize = (float)(image.getWidth())/(float)(image.getHeight());
        formComponentResized(null);
    }
    
 
    public void setImageFile(File iF) {
        if(iF==null)originalImage=null;
        else{
            try {
                BufferedImage bi;
                bi = ImageIO.read(iF);              
                originalImage = bi;
            } catch (IOException ex) {
                System.err.println("Неудалось загрузить картинку!");
                ex.printStackTrace();
            }
            formComponentResized(null);
            suSize = (float)(originalImage.getWidth())/(float)(originalImage.getHeight());
            repaint();
        }
    }
 
}
0
610 / 93 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
03.10.2010, 14:05  [ТС]
Не так, надо с помощью JFileChooser.
0
610 / 93 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
05.10.2010, 14:56  [ТС]
Неужели никто не знает?
0
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
05.10.2010, 17:03
Что значит не так?? Именно так!! Вы вообще чего хотите? Корректно задавайте. Вопрос был: "как загрузить картинку в jpanel" - я показал. А как работать с JFileChooser - читайте в книжке. Вообще ничего сложного, выбираете файл(картинку) с помощью JFileChooser (он даст только имя файла), затем засовываете его в методе SetImage в 64 строку
Java
1
bi = ImageIO.read(iF);
Все.
Если не знаете работать как с JFileChooser - писали бы об этом сразу.
Читайте здесь http://javaswing.wordpress.com... /#more-588
1
610 / 93 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
05.10.2010, 18:53  [ТС]
Спасибо, а как сохранять?
0
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
05.10.2010, 21:29
Что значит сохранять? Для меня нет разницы "сохранять в JPanel" и "загружать в JPanel"? Можно подробнее?
0
610 / 93 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
05.10.2010, 21:37  [ТС]
For Example:
Сохранить как...
в Пэинте
0
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
05.10.2010, 23:52
А... нужно в файл сохранить картинку? Как сохранять лбой файл смотрите здесь (тоже только даст имя для файла)
http://academicjava.com/JavaTu... ample.html
А как записать файл смотрите здесь (попросту 1 метод, можно и самому было догадаться :
Java
1
ImageIO.write(image, "jpg",new File("C:\\out.jpg"));
http://www.mkyong.com/java/how... e-imageio/
0
610 / 93 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
06.10.2010, 14:28  [ТС]
У меня почему-то этот код не работает:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
JFileChooser fileopen = new JFileChooser();
    int ret = fileopen.showDialog(null, "Открыть файл");
    if (ret == JFileChooser.APPROVE_OPTION) {
        File file = fileopen.getSelectedFile();
       try {
                  Image bi;
                  bi = ImageIO.read(file);
                 jPanel = bi;
            } catch (IOException ex) {
                System.err.println("Неудалось загрузить картинку!");
                ex.printStackTrace();
            }
    }
0
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
06.10.2010, 15:25
У меня почему-то этот код не работает.
Ух. Как Вы присваете ПАНЕЛИ КАРТИНКУ?? Это же разные классы!
Я Вас прошу,почитайте книгу o Java. Причем нужно выбрать книжку для начинающих. Я вижу, Вы вообще не знаете самых-самых главных правил программирования (не то,чтобы как создать панель и загрузить картинку!!) . Вы вообще когда-нибудь программировали на каком-либо объектно-ориентированном языке? Просто детские ошибки совершаете. Нужно сначала разобраться в языке, а потом уже начинать программировать и спрашивать что-л. Вам вообще зачем нужна данная программа? Вы собираетесь программировать на Java? Если да, то дело пойдет плохо, если так заниматься(точнее, оно вообще не пойдет). Если вам нужно написать лабораторную работу и забыть навсегда, то так и быть, помогу. Определитесь, что Вам нужно.
1
610 / 93 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
06.10.2010, 15:42  [ТС]
Я VCLый Сишник.
Раньше программировал только на C++ в C++Builder, там было все проще.
Java понравилась мне для ислледования "Кроссплатформенное программирование", чего в C++Builder делать нельзя, но есть конечно kylix, но под убунту с ядром 2.6 она не пойдет.
0
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
06.10.2010, 16:19
Поэтому сидите и изучайте. Вы понимаете хоть, что такое классы?Как Вы С++ изучали?

Вот цитата из школьного учебника.

///////////////////////////////////////////////////////////////////////////////////////////
Определение класса состоит из двух частей: заголовка, включающего ключевое слово class, за которым следует имя класса, и тела, заключенного в фигурные скобки. После такого определения должны стоять точка с запятой или список объявлений:
C++
1
2
class Screen { /* ... */ };
class Screen { /* ... */ } myScreen, yourScreen;
Внутри тела объявляются данные-члены и функции-члены и указываются уровни доступа к ним. Таким образом, тело класса определяет список его членов.
Каждое определение вводит новый тип данных. Даже если два класса имеют одинаковые списки членов, они все равно считаются разными типами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class First {
   int memi;
   double memd;
};
 
class Second {
   int memi;
   double memd;
};
 
class First obj1;
Second obj2 = obj1;   // ошибка: obj1 и obj2 имеют разные типы

///////////////////////////////////////////////////////////////////////////////////////////
Вот код программы на Java.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import javax.swing.*;
 
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
 
public class MyFrame extends JFrame {
    private JButton bLoad; 
    private PicturePanel panel;
 
    MyFrame () {
 
        super("Window");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
 
        Container pane = getContentPane();
        panel = new PicturePanel();
        bLoad = new JButton("Load image to panel");
 
        addWindowListener(new WindowAdapter() {
            public void windowClosing (WindowEvent event) {
                System.exit (0);
            }
        });
 
        bLoad.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent arg0) {
                
                JFileChooser fileChs = new JFileChooser();
                fileChs.setDialogTitle("Choose file for loading");
                fileChs.setFileSelectionMode(JFileChooser.FILES_ONLY);
                fileChs.setFileFilter(new TextFileFilter());
                int res = fileChs.showOpenDialog(MyFrame.this);
                if ( res == JFileChooser.APPROVE_OPTION ) {     
                    MyFrame.this.getPicturePanel().setImageFile(fileChs.getSelectedFile());
                    BufferedImage im = MyFrame.this.getPicturePanel().getImage();
                    MyFrame.this.setSize(im.getWidth(),im.getHeight());
 
                }
 
            }
        });
 
        pane.add(panel,BorderLayout.CENTER);
        pane.add(bLoad,BorderLayout.SOUTH);
        setSize(300, 300);
        setVisible(true);
        }
 
        PicturePanel getPicturePanel() {
            return panel;
        }
        
        public static void main (String args[]) {
            JFrame f;
            f = new MyFrame ();
        }
}

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
import javax.imageio.ImageIO;
 
public class PicturePanel extends javax.swing.JPanel {
        private static final long serialVersionUID = 1L;
    private BufferedImage originalImage = null;
    private Image image = null;
    public float suSize;
        
    public PicturePanel() {
        
        setLayout(null);
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                formComponentResized(evt);
            }
        });
 
    }
 
    private void formComponentResized(java.awt.event.ComponentEvent evt) {
        int w = this.getWidth();
        int h = this.getHeight();
        if ((originalImage != null) && (w > 0) && (h > 0)) {
            image = originalImage.getScaledInstance(w, h, Image.SCALE_DEFAULT);
            this.repaint();
        }
    }
 
    public void paint(Graphics g) {
 
        if (image != null) {
            g.drawImage(image, 0, 0, null);
        }      
        super.paintChildren(g);
        super.paintBorder(g);
    }
 
 
    public BufferedImage getImage() {
        return originalImage;
    }
 
    public void setImage(BufferedImage image) {
        this.originalImage = image;
        suSize = (float)(image.getWidth())/(float)(image.getHeight());
        formComponentResized(null);
    }
 
 
    public void setImageFile(File iF) {
        if(iF==null)originalImage=null;
        else{
            try {
                BufferedImage bi;
                bi = ImageIO.read(iF);                          
                originalImage = bi;
            } catch (IOException ex) {
                System.err.println("Couldn't load picture!");
                ex.printStackTrace();
            }
            formComponentResized(null);
            suSize = (float)(originalImage.getWidth())/(float)(originalImage.getHeight());
            repaint();
        }
    }
 
}

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import javax.swing.filechooser.FileFilter;
 
 
public class TextFileFilter extends FileFilter {
 
        public boolean accept(java.io.File file) {
 
            if ( file.isDirectory() ) return true;
 
            return ( file.getName().endsWith(".jpg") );
        }
 
        public String getDescription() {
            return "Pictures (*.jpg)";
            }
 
}
В данной программе есть главное окно и кнопка. При нажатии можно выбрать картинку для загрузки.
1
610 / 93 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
06.10.2010, 17:03  [ТС]
Цитата Сообщение от Ёрик Посмотреть сообщение
Поэтому сидите и изучайте. Вы понимаете хоть, что такое классы?Как Вы С++ изучали?
Знаю, но я думал, что jpanel совпадает с image, так же как TImage совпадает с Image в C++Builder.
P.S jPanel1 = new PicturePanel(); не работает, подчеркивает PicturePanel() .
cannot find symbol
symbol: class PicturePanel
0
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
06.10.2010, 17:11
но я думал
Вы не гадайте на кофейной гуще, а смотрите или в книгу (для чего нужны учебники?), или смотрите документацию в интернете (например,на oracle)

Пример рабочий, все компилируется.
Миниатюры
Загрузить или сохранить картинку в jpanel   Загрузить или сохранить картинку в jpanel  
0
610 / 93 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
06.10.2010, 17:25  [ТС]
Понял, java это не мое, бросаю его.
Возвращаюсь на винду и пишу в билдере.
0
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
06.10.2010, 17:41
Мне кажется, дело не в Java, а в том, как Вы изучаете язык.
Мо моему мнению, Java легче для изучения, чем С++. Очень мало того, в чем можно запутаться, меньше неопределенностей.
0
610 / 93 / 4
Регистрация: 08.07.2010
Сообщений: 1,893
06.10.2010, 18:51  [ТС]
Цитата Сообщение от Ёрик Посмотреть сообщение
Мне кажется, дело не в Java, а в том, как Вы изучаете язык.
Мо моему мнению, Java легче для изучения, чем С++. Очень мало того, в чем можно запутаться, меньше неопределенностей.
Для кого как... Кодить я вообще начинал на Visual Basic и ничего в нем и в программировании не понимал, хотя он считается самым простым языком программирования в мире, а когда попровал C++ мне стало все понятно, я начал писать не простые программы, решать олимпиадные задачи...
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
06.10.2010, 19:12
Цитата Сообщение от i.csproj Посмотреть сообщение
решать олимпиадные задачи...
О_о
А насчет простоты Java Ёрик абсолютно прав, синтаксис там значительно проще, чем в цпп.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2010, 19:12
Помогаю со студенческими работами здесь

Как при выполнении true функции сохранить страницу в html или как картинку или в pdf ?
Здравствуйте. Народ подскажите решение возникшего вопроса. Суть: страница на php, в ней есть область, состояшая из картинок и текста...

Blob из БД, сохранить картинку или вывести в теге Img(html)
сохранить картинку в текущую папку или вывести в теге по типу img <img src="(файл текущей страницы)?name=$row">, но данный вариант...

Не могу отрисовать картинку через JPanel
import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import...

Jpanel. Как масштабировать и обновлять картинку?
В центре JFrame есть JPanel c отрисованной картинкой. Она большая, я думаю привязать ее к наименьшему краю JFrame и через...

Как в Java Swing JPanel вывести полупрозрачную картинку?
Уже около месяца ищу ответ, но ответ выдавал тысячи ошибок, (как на этом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru