Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
9 / 9 / 7
Регистрация: 16.03.2015
Сообщений: 46

Стирается изображение в jPanel

16.03.2015, 18:48. Показов 1201. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Уже долгое время не получается оставить изображение на jPanel после его свертывания или перекрытия его другими окнами. Отрывки из кода:
Класс, обрабатывающий события мыши
Java
1
2
3
4
gfx = (Graphics2D) jPanel1.getGraphics();
       ImageTest it = new ImageTest(); 
       it.paintComponent(gfx);
       jPanel1.validate();
и класс, рисующий изображение
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ImageTest extends JPanel {
 
     @Override
    public void paintComponent(Graphics g) {
        
         super.paintComponent(g);
         Image image = null;
      try {
          image = ImageIO.read(new File("picture.png"));
      } catch (IOException ex) {}
BufferedImage buffered = (BufferedImage) image;
    g.drawImage(buffered, 0, 0, this);
    
    }
    
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2015, 18:48
Ответы с готовыми решениями:

Вывести изображение BufferedImage на JPanel
Здравствуйте! Подскажите, пожалуйста, как вывести изображение из BufferedImage на JPanel. Написал вот такую прогу чтобы разобраться, но,...

Вывести bmp изображение в JPanel
Приведите, пожалуйста, пример кода, как выводить bmp изображение на JPanel и потом на JFrame.

Как привести изображение созданное на JPanel через Graphics2D к BufferedImage
Второй день ломаю голову и похоже что то упускаю: На JFrame создана JPanel(сanvasPanel), на панели через Graphics2D мышкой рисую линии ...

6
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
16.03.2015, 19:23
1. не нужно сюда public void paintComponent(Graphics g) ничего передавать
2. какой смысл каждый раз при перерисовке читать картинку из файла?
один раз ее считал при создании окна и запомнил
0
9 / 9 / 7
Регистрация: 16.03.2015
Сообщений: 46
16.03.2015, 19:28  [ТС]
Понял вас
поставил при вызове null вместо gfx. Получил исключение NullPointerException
Еще заметил, что картинка сбивается jColorChooser. Если просто открывать другие окна из-под винды - изображение остается.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
16.03.2015, 19:50
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
public class JPanelBackImage extends JFrame {
 
    JPanelBackImage() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        JPanel panel = new MyPanel();
        add(panel);
        setSize(200, 200);
        setLocationRelativeTo(null);
        setVisible(true);
    }
 
    public static void main(String[] args) {
        JPanelBackImage tv = new JPanelBackImage();
    }
}
 
class MyPanel extends JPanel {
 
    private Image img;
 
    MyPanel() {
        URL res = getClass().getResource("image.jpg");
        try {
            img = ImageIO.read(res);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, 0, 0, this);
    }
}
0
9 / 9 / 7
Регистрация: 16.03.2015
Сообщений: 46
16.03.2015, 20:14  [ТС]
Паблито , спасибо за ответ, но в моем случае уже половина кода написано в IDE и единственное что осталось сделать - по щелчку на кнопку добавить картинку. Переписать код без дизайнера не позволяет время
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
16.03.2015, 20:58
если всмотреться в код, то можно заметить что в метод painComponent() ничего передавать не нужно, и уж тем более null
0
9 / 9 / 7
Регистрация: 16.03.2015
Сообщений: 46
17.03.2015, 20:23  [ТС]
Все же переписал код без конструктора. Изображение теперь никуда не уходит, но графика все ранво стирается при сворачивании или скролле. Склоняюсь к тому, что я рисую не через paint или paintcomponent. Пожалуйста подскажите что следует изменить. Вот класс
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
class paintImage extends JPanel{
    public static Image image1;
    static int lastX;
static int lastY;
static int x;
static int y;
 
paintImage(String path) throws IOException {
setOpaque(true);
    image1 = ImageIO.read(new File(path));
    addMouseMotionListener(new MouseAdapter()
    {
        @Override
            public void mouseDragged(MouseEvent evt)
            {
                x = evt.getX();
                y = evt.getY();
                customPaint();
               
                lastX = x;
                lastY = y;
 
               
            }});
    
    
    addMouseListener(new MouseAdapter() { 
          public void mousePressed(MouseEvent me)
          { 
            lastX = me.getX();
            lastY = me.getY();
            
          }}); 
    
 }
   
 
  
public void customPaint(){
Graphics2D g2 = (Graphics2D) this.getGraphics(); 
   g2.drawLine(lastX, lastY, x, y);
g2.dispose();
validate();
}
 
public Dimension getPreferredSize() {
 
        return image1 == null ? super.getPreferredSize() : new Dimension(image1.getWidth(this), image1.getHeight(this));
    
    }
    
@Override
  public void paintComponent(Graphics g){ 
        super.paintComponent(g);
        System.out.println(x);
        if (image1 != null) {
            g.drawImage(image1,0,0,this);
        }   
}
 }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2015, 20:23
Помогаю со студенческими работами здесь

Добавление JPanel на JPanel, не отображаются те, которые добавлены сверху
Здравствуйте. У меня есть панель fon на которой у меня картинка с фоном и 15 панелей на которых нарисованы шарики,пытаюсь добавить панели с...

Как правильно задать размер JPanel чтобы JFrame при pack() сжимался до размеров JPanel
Подскажите как правильно задать размер JPanel чтобы JFrame при pack() сжимался до размеров JPanel, задание размеров при помощи setSize...

Удаление JPanel кнопкой на этом же JPanel
Есть JPanel объекты, которые представляют собой панельки с какой - то информацией, на них есть кнопка. Как сделать так, чтобы при нажатии...

Замена JPanel на JPanel в JFrame
У меня есть 3 класса. Первый класс Main наследуется от JFrame и в конструкторе установка размера и добавление JPanel второго класса....

JPanel panel_south=new JPanel(); JTextArea textArea=new JTextArea(); Где ошибка?
JPanel panel_south=new JPanel(); JTextArea textArea=new JTextArea(); Label label=new JLabel(' '); ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru