powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему программа не рисует? Swing
4 сообщений из 4, страница 1 из 1
Почему программа не рисует? Swing
    #38388519
Kaprizka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ожидается: программа нарисует зелёную рамку и чёрную гистограмму в ней, а по каждому нажатию пункта "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
Почему программа не рисует? Swing
    #38388527
Kaprizka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Почему программа не рисует? Swing
    #38388661
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kaprizka,

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

;-)

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


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