вывод изображения на экран в java
есть код, который должен выводить изображение на экран. Первоначально я попробовал вывести просто линию, и все сработало успешно. но картинка с компьютера выводиться наглухо отказалась что бы я не делал. пожалуйста помогите. вот код:
import java.awt.Color; import java.awt.Graphics; import java.awt.Image; import java.io.File; import java.awt.image.BufferedImage; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class Main extends JPanel < Image img = new ImageIcon("3.png").getImage();//записываем изображение в переменную public static void main(String[] args)< //создаем окно JFrame fr = new JFrame(); fr.setSize(1900, 1000); fr.setVisible(true); fr.add(new Main()); fr.setResizable(false); >public void paint(Graphics g) < g.drawImage(img, 0, 0, null);//выводим линию g.drawLine(20, 20, 200, 200);//выводим изображение >>
Отслеживать
задан 23 апр 2020 в 15:57
1 1 1 серебряный знак 3 3 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Перенесите создание переменной img в метод paint() . Или сделайте ее static )
Отслеживать
ответ дан 25 апр 2020 в 13:21
user224616 user224616
Изображение где лежит? В корневой папке или в src? Если в src то надо путь указывать Image img = new ImageIcon(«src/3.png»).getImage();
Отслеживать
ответ дан 14 июл 2022 в 7:24
Сочиняй-Хан Сочиняй-Хан
11 2 2 бронзовых знака
- java
- img
- jpanel
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Отображение картинки в окне в помощью Java Swing
Доброго времени суток! В данном пример я покажу как можно отобразить картинку в графическом интерфейсе программы, написанной с использованием библиотеки Java Swing. Программа создана в бесплатной среде разработки IntelliJ IDEA Community Edition.
public class ShowImageJavaFrame extends JFrame
public ShowImageJavaFrame(String title)
super(title);
>
public static void main(String[] args)
// получаем текущую рабочую папку откуда запущена программа
var cwd = System.getProperty(«user.dir»);
var frame = new ShowImageJavaFrame(«Показываем картинку»);
// относительно текущей папки загружаем изображение
// папка с изображением должна находиться в текущей папке программы
var icon = new ImageIcon(cwd + «/images/laravel-cover.png»);
// создаем панель, в панель добавляем заголовок с картинкой
var panel = new JPanel();
panel.add(new JLabel(icon));
// добавляем панель в главный фрейм (окно)
frame.add(panel);
// устанавливаем размер окна
frame.setSize(700, 500);
// при закрытии окна — выходим из приложения (важно всегда правильно закрывать окна)
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
// помещаем окно в центре экрана
frame.setLocationRelativeTo(null);
// делаем окно видимым
frame.setVisible(true);
>
>
Таким образом, как видите ничего сложного в этом нет, главное, чтобы изображения лежали в папке доступной для чтения программой.
![]()
Создано 01.09.2022 08:33:17
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 0 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.
Работа с изображениями
Одним из наиболее распространенных источников ресурсов являются файлы изображений. Android поддерживает следующие форматы файлов: .png (предпочтителен), .jpg (приемлем), .gif (нежелателен). Для графических файлов в проекте уже по умолчанию создана папка res/drawable . По умолчанию она уже содержит ряд файлов — пару файлов иконок:

При добавлении графических файлов в эту папку для каждого из них Android создает ресурс Drawable . После этого мы можем обратиться к ресурсу следующим образом в коде Java:
R.drawable.имя_файла
@[имя_пакета:]drawable/имя_файла
Например, добавим в проект в папку res/drawable какой-нибудь файл изображения. Для этого скопируем на жестком диске какой-нибудь файл с расширением png или jpg и вставим его в папку res/drawable (для копирования в проект используется простой Copy-Paste)
Далее нам будет предложено выбрать папку — drawable или drawable-24 . Для добавления обычных файлов изображений выберем drawable :

Здесь сразу стоит учесть, что файл изображения будет добавляться в приложение, тем самым увеличивая его размер. Кроме того, большие изображения отрицательно влияют на производительность. Поэтому лучше использовать небольшие и оптимизрованные (сжатые) графические файлы. Хотя, также стоит отметить, что все файлы изображений, которые добавляются в эту папку, могут автоматически оптимизироваться с помощью утилиты aapt во время построения проекта. Это позволяет уменьшить размер файла без потери качества.
При копировании файла нам будет предложено установить для него новое имя.

Можно изменить название файла, а можно оставить так как есть. В моем случае файл называется dubi2.png . И затем нажмем на кнопку Refactor. И после этого в папку drawable будет добавлен выбранный нами файл изображения.

Для работы с изображениями в Android можно использовать различные элементы, но непосредственно для вывода изображений предназначен ImageView . Поэтому изменим файл activity_main.xml следующим образом:
В данном случае для отображения файла в ImageView у элемента устанавливается атрибут android:src . В его значении указывается имя графического ресурса, которое совпадает с именем файла без расширения. И после этого уже в Preview или в режиме дизайнере в Android Studio можно будет увидеть применение изображения, либо при запуске приложения:

Если бы мы создавали ImageView в коде java и из кода применяли бы ресурс, то activity могла бы выглядеть так:
package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); ConstraintLayout constraintLayout = new ConstraintLayout(this); ImageView imageView = new ImageView(this); // применяем ресурс imageView.setImageResource(R.drawable.dubi2); ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams (ConstraintLayout.LayoutParams.WRAP_CONTENT , ConstraintLayout.LayoutParams.WRAP_CONTENT); layoutParams.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; layoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; imageView.setLayoutParams(layoutParams); constraintLayout.addView(imageView); setContentView(constraintLayout); >>
В данном случае ресурс drawable напрямую передается в метод imageView.setImageResource() , и таким образом устанавливается изображение. В результате мы получим тот же результат.
imageView.setImageResource(R.drawable.dubi2);
Однако может возникнуть необходимость как-то обработать ресурс перед использованием или использовать его в других сценариях. В этом случае мы можем сначала получить его как объект Drawable и затем использовать для наших задач:
package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.res.ResourcesCompat; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.ImageView; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); ConstraintLayout constraintLayout = new ConstraintLayout(this); ImageView imageView = new ImageView(this); Resources res = getResources(); Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.dubi2, null); // применяем ресурс imageView.setImageDrawable(drawable); ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams (ConstraintLayout.LayoutParams.WRAP_CONTENT , ConstraintLayout.LayoutParams.WRAP_CONTENT); layoutParams.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; layoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; imageView.setLayoutParams(layoutParams); constraintLayout.addView(imageView); setContentView(constraintLayout); >>
Для получения ресурса применяется метод ResourcesCompat.getDrawable() , в который передается объект Resources, идентификатор ресурса и тема. В данном случае тема нам не важна, поэтому для нее передаем значение null. Возвращается ресурс в виде объекта Drawable :
Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.dubi2, null);
Затем, например, можно также передать ресурс объекту ImageView через его метод setImageDrawable()
imageView.setImageDrawable(drawable);
Вывод изображения на JFrame
Здравствуйте!
Помогите разобраться! у меня есть окошко JFrame, в это окошко я хочу вставить картинку. Все хорошо вставляется, отображается, но! когда мне нужно поменять картинку на другую, у меня показывает прежнюю. Пробовала делать через jlabel, jpanel, но там надо, чтобы изображение находилось в папке, где сами классы, а у меня картинка находится в корневой папке программы.
Возможен такой вариант, сохранять мой файл с картинкой в папку, где все классы мои описаны, тогда можно уже делать через jlabel, но я туплю и не знаю как сделать правильно сохранение)))
Суть программы: рисует гистограмму по данным значениям, если значения добавляются, гистограмма строиться опять новая и должна выводится уже новое изображение, а выводит старое=(
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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
package CurrentProgramm; import java.awt.Graphics; import java.io.File; import java.io.IOException; import javax.swing.ImageIcon; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.statistics.HistogramDataset; import org.jfree.data.statistics.HistogramType; public class HistogramBox extends javax.swing.JFrame { /** Creates new form HistogramBox */ public HistogramBox() { setTitle("Гистограмма"); //setResizable(false); initComponents(); //по данным через библиотеку JFreeChart рисует гистограмму MainWindow t = new MainWindow(); double[] value = new double[t.list.size()]; int size = t.list.size(); for (int i=0; i t.list.size(); i++) { value[i] = t.list.get(i); double number = 1 + 3.322*Math.log10(size); int n = (int)number +1; HistogramDataset dataset = new HistogramDataset(); dataset.setType(HistogramType.RELATIVE_FREQUENCY); dataset.addSeries("Гистограмма" ,value,n); String plotTitle = "Гистограмма выборки объёмом "+size; String xaxis = "Классы"; String yaxis = "Вероятность попадания в класс"; PlotOrientation orientation = PlotOrientation.VERTICAL; boolean show = false; boolean toolTips = false; boolean urls = false; JFreeChart chart = ChartFactory.createHistogram( plotTitle, xaxis, yaxis, dataset, orientation, show, toolTips, urls); int width = 500; int height = 300; try { //рисование гистограммы закончили //создается файлик изображения с гистограммой ChartUtilities.saveChartAsPNG(new File("histogram.PNG"), chart, width, height); } catch (IOException e) {} } } //вывод гистограммы @Override public void paint (Graphics g){ java.awt.Image img = new ImageIcon("histogram.PNG ").getImage(); g.drawImage(img,0 ,30 ,500,300,this ); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 489, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 300, Short.MAX_VALUE) ); pack(); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); java.awt.Dimension dialogSize = getSize(); setLocation((screenSize.width-dialogSize.width)/2,(screenSize.height-dialogSize.height)/2); }// public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { HistogramBox dialog = new HistogramBox(); dialog.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); dialog.setVisible(true); } }); } }
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Вывод треугольника в JFrame
Всем доброго времени суток. Программирую на яве почти месяц и решил создать маленькую программу.
Вывод информации на JFrame
Здравствуйте! 🙂 Стоит задача написать программу, которая работает с bmp файлами (выводит размер.
Проходил ли кто-то видео-курс techpro? Как у них получилось JFrame в JFrame добавить
Проходил ли кто-то видео-курс techpro? Как у них получилось JFrame в JFrame добавить? .
Как закрыть один JFrame и открыть новый JFrame?
привет подскажите как реализовать. есть отдельный класс с выпадающим меню(там три пункта). есть.
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
в методе paint пробельчик
java.awt.Image img = new ImageIcon("histogram.PNG ").getImage();
java.awt.Image img = new ImageIcon("histogram.PNG").getImage();
встречные 2 вопроса:
зачем через файлик на винте?
и зачем всё это делать в конструкторе?
Регистрация: 08.10.2009
Сообщений: 45
Сообщение от mutagen 
в методе paint пробельчик
java.awt.Image img = new ImageIcon("histogram.PNG ").getImage();
java.awt.Image img = new ImageIcon("histogram.PNG").getImage();
встречные 2 вопроса:
зачем через файлик на винте?
и зачем всё это делать в конструкторе?
пробельчик не исправил ситуации)
1-первый вопрос не очень поняла))
2-а чего делаю в конструкторе, сама не знаю) но гистограммы делает правильно, просто вот не хочет обновлять картинку =(
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
Сообщение от pelele 
просто вот не хочет обновлять картинку
конструктор вызывается для класса всего один раз, откуда возьмутся новые гистограммы?
надо сделать метод который будет создавать BufferedImage и на нём рисовать гистограмму, а уже потом просто на панельке перерисовывать этот Image
Регистрация: 08.10.2009
Сообщений: 45
Сообщение от mutagen 
конструктор вызывается для класса всего один раз, откуда возьмутся новые гистограммы?
надо сделать метод который будет создавать BufferedImage и на нём рисовать гистограмму, а уже потом просто на панельке перерисовывать этот Image
но гистограммы новые пересчитывает, файлик новый создает) а выводить новую картинку не хочет))
посмотрю что с BufferedImage можно сделать) спасибо)
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
код не образец красоты, но основная идея в нём есть
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 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.util.Random; import javax.swing.JButton; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.statistics.HistogramDataset; import org.jfree.data.statistics.HistogramType; public class ChartFrame extends javax.swing.JFrame { private Dimension dialogSize; private JPanel buttonPanel; private ImagePanel imagePanel; private JButton bNewHistogram; private MouseListener ml = new MouseListener() { @Override public void mouseClicked(MouseEvent e) { new Thread(new Runnable() { @Override public void run() { double[] d = getDoubleArray(); BufferedImage img = getHistogram(d, null); imagePanel.setBi(img); imagePanel.repaint(); } }).start(); } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } }; private Random random = new Random(); public ChartFrame() { initComponents(); } private void initComponents() { imagePanel = new ImagePanel(getHistogram(getDoubleArray(), null)); buttonPanel = new javax.swing.JPanel(); bNewHistogram = new JButton("New Histogram"); bNewHistogram.addMouseListener(ml); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); javax.swing.GroupLayout imagePanelLayout = new javax.swing.GroupLayout(imagePanel); imagePanel.setLayout(imagePanelLayout); imagePanelLayout.setHorizontalGroup(imagePanelLayout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 376, Short.MAX_VALUE)); imagePanelLayout.setVerticalGroup(imagePanelLayout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 219, Short.MAX_VALUE)); javax.swing.GroupLayout buttonPanelLayout = new javax.swing.GroupLayout(buttonPanel); buttonPanel.setLayout(buttonPanelLayout); buttonPanelLayout.setHorizontalGroup(buttonPanelLayout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING).addGroup( javax.swing.GroupLayout.Alignment.TRAILING, buttonPanelLayout.createSequentialGroup().addContainerGap() .addComponent(bNewHistogram, javax.swing.GroupLayout.DEFAULT_SIZE, 352, Short.MAX_VALUE) .addContainerGap())); buttonPanelLayout.setVerticalGroup(buttonPanelLayout.createParallelGroup( javax.swing.GroupLayout.Alignment.LEADING).addGroup( buttonPanelLayout.createSequentialGroup().addGap(37, 37, 37) .addComponent(bNewHistogram, javax.swing.GroupLayout.DEFAULT_SIZE, 51, Short.MAX_VALUE) .addContainerGap())); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(buttonPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(imagePanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap())); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup( layout.createSequentialGroup() .addContainerGap() .addComponent(imagePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(buttonPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))); pack(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); dialogSize = getSize(); setLocation((screenSize.width - dialogSize.width) / 2, (screenSize.height - dialogSize.height) / 2); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new ChartFrame().setVisible(true); } }); } private BufferedImage getHistogram(double[] value, Rectangle rect) { BufferedImage bi = null; for (int i = 0; i value.length; i++) { double number = 1 + 3.322 * Math.log10(value.length); int n = (int) number + 1; HistogramDataset dataset = new HistogramDataset(); dataset.setType(HistogramType.RELATIVE_FREQUENCY); dataset.addSeries("Гистограмма", value, n); String plotTitle = "Гистограмма выборки объёмом " + value.length; String xaxis = "Классы"; String yaxis = "Вероятность попадания в класс"; PlotOrientation orientation = PlotOrientation.VERTICAL; boolean show = false; boolean toolTips = false; boolean urls = false; JFreeChart chart = ChartFactory.createHistogram(plotTitle, xaxis, yaxis, dataset, orientation, show, toolTips, urls); if (rect == null) rect = new Rectangle(380, 240); bi = new BufferedImage((int) rect.getWidth(), (int) rect.getHeight(), BufferedImage.TYPE_INT_RGB); chart.draw((Graphics2D) bi.getGraphics(), rect); } return bi; } private double[] getDoubleArray() { double[] d = new double[random.nextInt(20)]; for (int i = 0; i d.length; i++) { d[i] = random.nextDouble() * 10; } return d; } static class ImagePanel extends JPanel { BufferedImage bi; public ImagePanel(BufferedImage bi) { this.bi = bi; } public BufferedImage getBi() { return bi; } public void setBi(BufferedImage bi) { this.bi = bi; } @Override public void paint(Graphics g) { super.paint(g); if (bi != null) { g.drawImage(bi, 0, 0, this); } } } }
