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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работает repaint() и revalidate(); не перерисовывает графики при добавлении 
:(
    Опции темы
Kremlin
Дата 23.11.2011, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В общем и целом, есть две кнопки, при нажатии должно перерисовываться, а в идеале появляться полоса прокрутки. Но перерисовывается только при изменении размера, в вебе такое не сработает, так что незнаю что придумать.
Подскажите пожалуйста, где ошибка. 
Вот весь код т.к не знаю что нужно, что нет.
это мейн
Код

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;

import java.awt.event.MouseEvent;

import java.applet.Applet;

import java.awt.Container;
import java.awt.Font;
import java.awt.TextArea;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class NewJApplet extends Applet {
    TextArea text_area;
    int start = 0;
    int stop = 0;
    int click = 0;
    int keytyped = 0;
    PaintGraph pg,pg1=null;
    StringBuffer buffer; 
    Font font = new Font("Verdana", Font.PLAIN, 25);
    private static List<PaintGraph> graphs = new ArrayList<PaintGraph>();
    public void init() {
         setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));

         //понель кнопок
         JPanel butPan=new JPanel();
         butPan.setLayout(new BoxLayout(butPan, BoxLayout.X_AXIS));
         JButton addButton = new JButton("+");
         addButton.setFont(font);
         addButton.setFocusable(false);
         butPan.add(addButton);
  
         JButton remButton = new JButton("-");
         remButton.setFont(font);
         remButton.setFocusable(false);
         butPan.add(remButton);
         
         add(butPan);
         // понель графиков
         final JPanel graphPanel = new JPanel();
            final JScrollPane scrollPane = new JScrollPane(graphPanel);
            graphPanel.setLayout(new BoxLayout(graphPanel, BoxLayout.Y_AXIS));
            add(graphPanel);
            
            // кнопки
         addButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                   PaintGraph pg=new PaintGraph(getArray(600),0);
                  graphs.add(pg);
                 graphPanel.add(pg);
                 //repaint();
                 scrollPane.revalidate();
             }            
         });
         
         remButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                 if(graphs.size() > 0) {
                     int index = graphs.size() - 1;
                     PaintGraph pg = graphs.remove(index);
                     graphPanel.remove(pg);
                     repaint();
                     scrollPane.revalidate();                    
                 }                
             }            
         });
}
    
    public int[] getArray(int kol){
        Random random = new Random();
        int[] array = new int[kol];
        for (int i=0;i<kol;i++){
            array[i]=100-Math.abs(random.nextInt(100));
            }
        return array;
    }
    



сам PaintGraph
Код

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.*;

public class PaintGraph extends JPanel
{
 /**
     * 
     */
    private static final long serialVersionUID = 6090550533945953271L;
    private int[] array;
    private int shy;

 public PaintGraph(int[] array,int shy)
 {
     setArray(array);
     setShy(shy);
  /*
   * ny = 10;// цена деления  по шкалам
   * ky = (float)1.0; // коэф шкалы по у
   * kx = (float)0.0; // коэф шкалы по x
   * oyn = 50; // начальный отступ по y
   * oxn = 50 ; //начальный отступ по х
   * ly = 100; // длина оси у
   * lx = 600; // длина оси х
   * sh=0;//сещение граффика
   */
 }


public void paint(Graphics g) {
    super.paint(g);
    drawGr(g, 10,(float)1.0, 0, shy, 50, 100, 600,array);
 }


 // Метод рисующий массив
    void drawGr(Graphics g,int ny, float ky, float kx, int oyn, int oxn, int ly, int lx, int[] arr){
    //Разбиваем каждую ось на две части для удобства переноса центра координат
      // Ось Y
      g.drawLine( (int)(lx*kx+oxn),oyn,
    (int)(lx*kx+oxn),ly+oyn);
      // Стрелки
      g.drawLine((int)(lx*kx+oxn),oyn,
                  (int)(lx*kx+oxn)-3,oyn+10);
      g.drawLine((int)(lx*kx+oxn),oyn,
                  (int)(lx*kx+oxn)+3,oyn+10);
      // Надпись
      g.drawString("Y",(int)(lx*kx+oxn)-10,oyn+10);
      g.drawString("0",(int)(lx*kx+oxn)-10,(int)(ly*ky+oyn)+10);
      //Деления
      int l1 = (int)(ly*ky);
      int l2 = ly - l1;
      int k1 = (int)l1/ny;
      int k2 = (int)l2/ny;
      for (int i=1;i<k1+1;i++)
      {
       g.drawLine((int)(lx*kx-2+oxn),l1-ny+oyn,
                  (int)(lx*kx+2+oxn),l1-ny+oyn);
       l1=l1-ny;
      }
      l1=ly-l2;
      for(int i=1;i<k2+1;i++)
      {
       g.drawLine((int)(lx*kx-2+oxn),l1+ny+oyn,
                   (int)(lx*kx+2+oxn),l1+ny+oyn);
       l1=l1+ny;
      }
      // Ось Х
      g.drawLine(oxn,(int)(ly*ky+oyn),lx+oxn,(int)(ly*ky+oyn));
      g.drawLine(lx+oxn,(int)(ly*ky+oyn),lx+oxn-10,
                            (int)(ly*ky+oyn)-3);
      g.drawLine(lx+oxn,(int)(ly*ky+oyn),lx+oxn-10,
                            (int)(ly*ky+oyn)+3);
      // Надпись
      g.drawString("Х",lx+40,(int)(ly*ky+oyn)-10);
      // Деления
      l1 = (int)(lx*kx);
      l2 = lx - l1;
      k1 = (int)l1/ny;
      k2 = (int)l2/ny;
      for (int i=1;i<k1+1;i++)
      {
       g.drawLine(l1-ny+oxn,(int)(ly*ky-2+oyn),
                   l1-ny+oxn,(int)(ly*ky+2+oyn));
       l1=l1-ny;
      }
      l1=lx-l2;
      for(int i=1;i<k2+1;i++)
     {
       g.drawLine(l1+ny+oxn,(int)(ly*ky-2+oyn),
       l1+ny+oxn,(int)(ly*ky+2+oyn));
       l1=l1+ny;
      }
      // Выбор метода для рисования функции
       int x1=oxn,y1=ly+oyn,y2;
       for (;x1<lx;){
           y2=arr[x1-50]+oyn;
           x1++;
           g.drawLine(x1,y1,x1+1,y2);
           y1=y2;
           }
 }
 
 
    public int getShy() {
    return shy;
}

    public void setShy(int shy) {
    this.shy = shy;
}

    public int[] getArray() {
    return array;
}

    public void setArray(int[] array) {
    this.array = array;
}
}

repaint() в коментариях, так как и без него должно работать, но пробовал и с ним - ничего

Это сообщение отредактировал(а) Kremlin - 23.11.2011, 22:21
PM MAIL   Вверх
LSD
Дата 24.11.2011, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



1. Вызывай revalidate() у всего апплета. И замени Applet на JApplet.
2. У PaintGraph нет prefered size, может так получится что layout manager установит ему нулевые размеры.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Kremlin
Дата 24.11.2011, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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