Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему программа не рисует? Swing / 4 сообщений из 4, страница 1 из 1
05.09.2013, 22:57:05
    #38388519
Kaprizka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему программа не рисует? Swing
Ожидается: программа нарисует зелёную рамку и чёрную гистограмму в ней, а по каждому нажатию пункта "New" другую, но похожую.
Наблюдается: программа вообще ничего не рисует.
Вопрос: в чём дело?
И как следует расположить методы paint() и repaint(), чтоб гистограмма всё-таки рисовалась?
И должно ли что-то измениться, если вместо awt и Panel использовать Swing и JPanel?
Прошу к стилю оформления не придираться, если только он не влияет на работу программы.
Код: 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.
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.
//Rrrrrr.java
import java.util.Random.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;

class Rrrrrr extends Frame{
  private java.util.Random ran = new java.util.Random();
  private double gist[] = new double[201];
  private double rn;

  //меню из одного пункта
  MenuBar mb;
  Menu me1;
  MenuItem mi1;

  //панель для рисования гистограммы
  private Panel1 p1;

  //конструктор
  private Rrrrrr(String s){
    super(s);

    mb = new MenuBar();
    setMenuBar(mb);
    me1 = new Menu("Diagram");
    mb.add(me1);
    mi1 = new MenuItem("New");
    me1.add(mi1);
    mi1.addActionListener(new Mi1Action());

    //заполнение массива случайными числами
    zapolnGist();

    setLayout(null);
    p1=new Panel1();
    p1.setLayout(null);
    p1.setBounds(4,40,420,250);
    p1.setVisible(true);

    setSize(440,250);
    setVisible(true);
  }

  //здесь надо что-то рисовать, но я не знаю как.
  public void paint(Graphics g){

  }

  //программа всё время в этом цикле
  private void go(){
    try {
      while (true){
        repaint();
        p1.repaint();
        Thread.sleep(10);
      }
    }
    catch (InterruptedException ie){}
  }

  public static void main(String[] args){
    Rrrrrr f = new Rrrrrr("Randoms, v0.00");
    f.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent ev){
        System.exit(0);
      }
    });
    f.go();
  }

  //класс для обработки пункта меню "New"
  class Mi1Action implements ActionListener{
    public void actionPerformed(ActionEvent ae){
      repaint();
    }
  }

  void zapolnGist(){
    //заполнение массива случайными числами
    for (int j=0; j<=200; j++) {
      gist[j] = 0;
    }
    for (int i=0; i<=4000; i++){
      rn = ran.nextGaussian();
      if (rn<-10) gist[0]++; else
      if (rn>10) gist[200]++; else {
        int j= (int) Math.round(rn*10)+100;
        gist[j]++;
      }
    }
  }

  class Panel1 extends Panel{
    public void paint(Graphics g){
      //рисование рамки
      g.setColor(Color.GREEN);
      g.drawRect(2,2,402,200);
      g.setColor(Color.BLACK);
      //показ гистограммы на экран
      for (int i=0; i<=200; i++) {
        int h = (int) Math.round(gist[i]);
        g.fillRect(2+i*2,199-h,1,h);
      }
    }
  }
}

...
Рейтинг: 0 / 0
05.09.2013, 23:07:13
    #38388527
Kaprizka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему программа не рисует? Swing
Код: java
1.
2.
3.
4.
5.
6.
 //класс для обработки пункта меню "New"
  class Mi1Action implements ActionListener{
    public void actionPerformed(ActionEvent ae){
      repaint();
    }
  }



Заменил на
Код: java
1.
2.
3.
4.
5.
6.
7.
 //класс для обработки пункта меню "New"
  class Mi1Action implements ActionListener{
    public void actionPerformed(ActionEvent ae){
      zapolnGist();
      p1.repaint();
    }
  }


Всё равно ничего не рисует.
...
Рейтинг: 0 / 0
06.09.2013, 09:03:24
    #38388661
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему программа не рисует? Swing
Kaprizka,

А кто будет делать
add(p1)?!

;-)

Она и не рисует, т.к. вы компонент во фрейм не добавили.
Создать, создали, а добавить забыли :-)
...
Рейтинг: 0 / 0
06.09.2013, 09:13:27
    #38388670
Kaprizka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему программа не рисует? Swing
mad_nazgulА кто будет делать
add(p1)?!
Добавил. Теперь рисует ровно то, что ожидалось.
Не ожидал, что причина окажется настолько простой.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему программа не рисует? Swing / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]