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

Изображение пропадает при resize

14.06.2014, 11:55. Показов 1562. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Столкнулся с проблемой, при выводе графики на JComponent.
У меня задача стоит так - вывести график созданный по функции, аппроксимированной методом Ньютона.
Ну в общем график я вывожу, но когда я меняю размер окна то он исчезает.
Рисую я в классе GrafPaint, нажатие кнопки и передача данный идет в GrafConntroler, ну и само окно в класе GrafView
GrafPaint:
Кликните здесь для просмотра всего текста

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
import java.awt.*;
import javax.swing.*;
 
public class GrafPaint extends JComponent {
 
          double[] x=null, y=null;
          
      
           public void paintComponent(Graphics g){
                     double[] xscale=x, yscale=y;
                     int[] xint, yint;
                     xint=new int[401];
                     yint=new int[401];
                     int width=getWidth();
                     int height=getHeight();
                     Long xl, yl;
                    super.paintComponent(g);
                    g.setColor(new Color(255,110,255));
                    int centerx=width/2, centery=height/2, scale=centerx/50;
                    
                    for(int i=0; i<401; i++){
                        xscale[i]=Math.round(x[i]*scale+centerx);
                        yscale[i]=Math.round(centery-(y[i]/500)*scale);}
                        for (int j=0; j<401; ++j) {
  
                         xint[j] = (int) xscale[j];
                         yint[j] = (int) yscale[j];
 
                         
                       
                    }
                    
                    
                    
                    draw(g, xint, yint, centerx, centery, width, height);
                    }
           public void draw(Graphics g, int[] x, int[] y, int centerx,int centery, int width, int height) {
                            
                       g.setColor(new Color(0,0,0));
                      if(x!=null){
                       
                      System.out.println("NEW"+getWidth());
                      g.drawLine(0, centery, width, centery);
                        for (int i=1; i<=10; ++i){
                       g.drawLine(i*getWidth()/10, centery-5, i*getWidth()/10, centery+5); 
   
                      }
                      g.drawLine(centerx, 0, centerx, height);
                       for (int i=1; i<=10; ++i){
                       g.drawLine(centerx-5, i*height/10, centerx+5, i*height/10); 
 
                        }
                        
                    
                    g.setColor(new Color(255,130,0));
                    for(int i=0; i<x.length-1; i++){
 
                        
                         g.drawLine(x[i], y[i], x[i+1], y[i+1]);
                    }
                    }
                    else{}
                        }
}

GrafController
Кликните здесь для просмотра всего текста

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
77
78
79
80
81
import java.awt.event.*;
 
 
public class GrafController{
private GrafView theView;
private GrafModel theModel;
static boolean  build=false;
 
GrafModel aprox = new GrafModel();
GrafPaint draw = new GrafPaint();
double h=0.25;
int max=401;
static boolean drawAll=false;
 
    double[] xap=new double[max], yap=new double[max];
    double[][] xyap=new double[101][101];     
    
    public GrafController(GrafView theView, GrafModel theModel) {
    this.theView=theView;
    this.theModel = theModel;
    this.theView.b3.addActionListener(new click3());
    this.theView.b2.addActionListener(new click2());
    this.draw.addComponentListener(new comp());
    }
 
    class click3 implements ActionListener{
 
        public void actionPerformed(ActionEvent e) {
 
            build=true;
            double[] x=Main.x;
            double[] y=Main.y;
            for (int i=0; i<Main.x.length; ++i){
            xyap[i][1]=Main.x[i];
            xyap[i][2]=Main.y[i];        
            }
            for (int i=0; i<max/2; ++i){
            //System.out.print(i+":  ");
            xap[i]=i*0.25-50;
            yap[i]=aprox.newtonforw(x, y, 2, xap[i]);
            System.out.println(yap[i]);
             }
            for (int i=max/2; i<max; ++i){
            //System.out.print(i+":  ");
             xap[i]=i*0.25-50;
             yap[i]=aprox.newtonback(x, y, 20, xap[i]);
             System.out.println(yap[i]);
                }
            
            draw.x=xap;
            draw.y=yap;
            draw.repaint();
            GrafView grWin = new GrafView();
            grWin.setVisible(true);
           // grWin.add(theModel);
            grWin.add(draw);
            
            
        }
    }
 
    class click2 implements ActionListener{
        
        public void actionPerformed(ActionEvent e) {
            System.out.println("UKRa2222adad");
        }
    }
        class comp implements ComponentListener{
    @Override
    public void componentResized(ComponentEvent e)
    {
 
        draw.repaint();
    }
        public void componentMoved(ComponentEvent e) {}
        public void componentShown(ComponentEvent e) {}
        public void componentHidden(ComponentEvent e) {}
    
    }
 
}

GrafView
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.awt.*;
import javax.swing.*;
 
public class GrafView extends JFrame {
    public GrafView(){
        //System.out.println(build);
        if (GrafController.build==true){
            newWindow();
        }}
public void newWindow(){
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    this.setSize(600, 400);
    //this.setLocationRelativeTo(null);
    this.setLayout(new BorderLayout(5, 5));
    
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.06.2014, 11:55
Ответы с готовыми решениями:

Canvas: пропадает изображение
Собственно, имеется следующая программа: Вводятся параметры(пока они вводятся принудительно) и по нажатию кнопки Start запускается...

При входе в игру пропадает изображение потом появляется и пропадает
Купил новый монитор, сначала подключил через переходник HDMI&gt;&gt;VGA. Всё работало хорошо, пошёл за кабелем HDMI, купил, подключил, всё...

Пропадает изображение при загрузке
всем привет следующая проблема при загрузки виндовс хп на мониторе пропадает изображение, как pci видеокарте так и на встроенной ...

3
185 / 160 / 49
Регистрация: 30.07.2013
Сообщений: 508
17.06.2014, 10:37
лучше выложи рабочий проект, будет проще посмотреть.
0
Форумчанин
5959 / 4193 / 406
Регистрация: 28.12.2013
Сообщений: 24,134
17.06.2014, 17:12
скорее всего для окна с графиком надо назначить слушатель и при изменении окна вызывать метод репейнт для графика.
0
0 / 0 / 1
Регистрация: 26.03.2013
Сообщений: 37
17.06.2014, 20:28  [ТС]
Спасибо, но я уже разобрался методом тыка =)
Проблема была в GrafPaint, я там массивы xscale, yscale обявил и сразу же инициализировал присвоив ему значения другого массива. Хотя я и не понимаю почему при исполнении repaint(), те массивы получали какието странные значения. но в общем проблему я решил заменой:
Java
1
double[] xscale=x, yscale=y;
на:
Java
1
                     double[] xscale=new double[x.length], yscale=new double[y.length];
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2014, 20:28
Помогаю со студенческими работами здесь

Пропадает изображение при увеличении масштаба
При увеличении масштаба сцены пропадает часть сцены, в opengl новичок, возможно что-то с глубиной. Инициализация: void...

При загрузке windows пропадает изображение
Windows 7 64 Материнка asrock g41m-vs3 Видеокарта Gigabyte GeForce GTX 260 OC Блок питания 550вт При включении пк перед...

При установке Windows XP пропадает изображение
при установке windows xp после копирования файлов когда компьютер 1 раз перегружается что бы потом продолжить процесс установки монитор...

При загрузке windows 7 пропадает изображение
Windows 7 64 Материнка asrock g41m-vs3 Видеокарта Gigabyte GeForce GTX 260 OC Блок питания 550вт При включении пк перед...

Пропадает изображение при установке дополнительной карты
В общем угораздило меня собрать ферму из железа, которое было на руках. Давайте пропустим эту тему, я не майнер, это был просто интерес. Но...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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