Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855

Рисование в Java форме

30.11.2013, 21:37. Показов 3842. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

Есть 2 файла:
JMyPanel.java
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
import java.awt.*;
import java.awt.geom.Ellipse2D;
import javax.swing.JPanel;
 
@SuppressWarnings("serial")
public class JMyPanel extends JPanel{ // наш класс является наследником класса JPanel
    //создаем перечисление используемых параметров
    public static enum Figure {LINE,OVAL,RECT,ROUNDRECT,CLEAR};
    private Figure vibor=Figure.CLEAR; //объявляем переменную типа созданного перечисления
    //и присваиваем ей значение CLEAR
    public JMyPanel() { } //конструктор нашего класса
    public void ris(String s) {//метод, вызов которого приводит к перерисовке панели
        //параметр s принимает значение во время вызова данного метода (см. MyGraph.java)
        vibor=Figure.valueOf(s); //устанавливаем, что нужно нарисовать
        repaint(); //перерисовываем нашу панель, т.е. вызываем метод paintComponent
    }
    public void paintComponent(Graphics gr){
        super.paintComponent(gr);
        Graphics2D g = (Graphics2D)gr;
        BasicStroke pen;//создаем перо, параметры которого будут определять стиль линий
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        switch (vibor){
            case LINE:
            //определяем перо толщиной 20 точек, с закругленными концами линий и закругленными стыками линий
            pen=new BasicStroke(20,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);
            g.setStroke(pen);//делаем текущим пером созданное нами
            g.setColor(Color.blue);//задаем цвет пера
            g.drawLine(20, 20, 100, 100); break;
            case OVAL:
            //задаем массив, определяющий вид линии
            // элементы массива с четными индексами задают длину штриха в пикселах, элементы с нечетными //индексами — длину промежутка; массив перебирается циклически;
            float[] dash = {10, 30};
            //определяем перо толщиной 10 точек, с квадратными концами линий, закругленными стыками линий,
            //расстоянием в 10 точек, с которого начинает действовать закругление, массив, определяющий вид //линии, и с какого элемента массива начинать узор
            pen=new BasicStroke(10,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_ROUND,10, dash,0 );
            g.setStroke(pen);
            g.setColor(Color.red);
            //устанавливаем стиль заливки, в качестве параметра задаем градиент от красного к зеленому,
            //30, 30 – начальная точка первого цвета, 50, 50 – начальная точка второго цвета, true –
            //цикличность градиента
            g.setPaint(new GradientPaint(30, 30, Color.red, 50, 50, Color.green, true));
            //g.fill – создание объекта с заливкой, в качестве параметра задается объект из пакета Graphics2D,
            //в нашем случае – эллипс
            g.fill(new Ellipse2D.Double(20, 20, 100, 100)); break;
            case RECT:
            float[] dash2 = {20, 20};
            pen=new BasicStroke(5,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_BEVEL,1, dash2,0 );
            g.setStroke(pen);
            g.setColor(Color.magenta);
            g.drawRect(20, 20, 100, 100); break;
            case ROUNDRECT:
            float[] dash3 = {20, 20,2,20,2,20};
            pen=new BasicStroke(10,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL,1, dash3,0 );
            g.setStroke(pen);
            g.setColor(Color.yellow);
            g.drawRoundRect(20, 20, 100, 100,60,60); break;
            case CLEAR: g.clearRect(0, 0, getSize().width, getSize().height);break;
        }
    }
}
И MyGraph.java
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
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
@SuppressWarnings("serial")
public class MyGraph extends JFrame implements ActionListener{
    private JMyPanel myPanel=new JMyPanel();//объявляем и создаем нашу панель для рисования
    public static void main(String[] args) {
        new MyGraph("Окно с графикой");//создаем окно
    }
    public MyGraph(String s){ //конструктор с параметром для заголовка окна
        super(s);//вызываем конструктор суперкласса и передаем ему параметр
        
        JMenuBar myMenuBar=new JMenuBar();
        JMenu[] menu = new JMenu[5];
        for (int i=0;i<5;i++){
            menu[i] = new JMenu(JMyPanel.Figure.values()[i].toString());
            menu[i].addActionListener(this);
            myMenuBar.add(menu[i]);
        }
        add(myMenuBar,BorderLayout.NORTH);
        add(myPanel,BorderLayout.CENTER);
        Dimension size=getSize();//записываем в переменную size текущий размер окна
        size.setSize(size.width, size.height+200);//устанавливаем новый размер окна, увеличивая //текущий по высоте на 200
        setMinimumSize(size);
        pack();
        setVisible(true);
    }
    public void actionPerformed(ActionEvent e) { //при нажатии на одну из кнопок
        myPanel.ris(e.getActionCommand());//вызываем метод ris нашей панели (см. JMyPanel.java)
    } //и передаем в качестве параметра название нажатой кнопки (e.getActionCommand())
}
При нажатии на пункт меню в верху формы появляющейся после компиляции, должны рисоваться соответствующие фигуры, но их нет.
Как решить данную проблему?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.11.2013, 21:37
Ответы с готовыми решениями:

Рисование в Java
Если нарисовать линию с помощью graphics2D.drawLine(oldX, oldX, oldX, oldX); Как ею можно манипулировать?

Рисование в Java
Здравствуйте подкажите пожалуйста как написать в одном проекте чтоб в одном окне отобразить и 2 квадрата и кнопку, а то у меня получается...

Рисование в java
Учусь прогать в Java, хочу нарисовать квадрат в окне GUI, но как-то не очень рисуется, не могли бы вы указать на ошибки? Спасибо. /* ...

2
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
02.12.2013, 21:43  [ТС]
Есть знатоки?
0
 Аватар для SuLLeN
23 / 23 / 12
Регистрация: 27.12.2011
Сообщений: 855
05.12.2013, 12:33  [ТС]
Ладно знатоки, раз никто ничего об этом не знает я для вас проясню.
Тут просто была допущена ошибка в вызове нужного класса.
Вот исправление:
Java
1
2
3
4
5
6
7
8
9
JMenuBar myMenuBar=new JMenuBar();
        JMenu Menu = new JMenu("Фигуры");
        myMenuBar.add(Menu);
        JMenuItem[] figs=new JMenuItem[6];
        for (int i=0;i<6;i++){
            figs[i]=new JMenuItem(JMyPanel.Figure.values()[i].toString());
            figs[i].addActionListener(this);
            Menu.add(figs[i]);
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.12.2013, 12:33
Помогаю со студенческими работами здесь

Перемещение объекта и его рисование на форме
Доброго времени суток, форумчане. Как можно реализовать перемещение объектов Obj в моей программе ? Подкиньте идей, пожалуйста. Вот...

Рисование графиков java
Здравствуйте, уважаемые друзья! Вопрос вот в чем. Имеется следующий код для построения графиков функции: import javax.swing.*; ...

Рисование в форме
На форме TextBox1,TextBox2,TextBox3, кнопка, и поле для рисования... По введенным коэффициента уравнения Ax^2+Bx+C=0 (Где ABC -...

Рисование на форме
Есть форма в Pascal ABC.NEt создана(Файл-Новый Проект-Windows Forms) там у меня куча кнопок,процедуры и так далее. Мне нужно в...

рисование в форме
У меня такое задание... при нажатии на кнопку на форме должны появляться круги в произвольном месте, произвольного радиуса. только не...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Контроль корректности заполнения дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru