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

Как работать с Graphics

07.08.2017, 03:24. Показов 563. Ответов 1
Метки нет (Все метки)

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

Пишу графический редактор, но мне все непонятно, как работает Graphics, куда, например, в моем коде его впихивать и тд
Пробовал написать, например,
Java
1
2
Graphics g;
g.drowChars(...);
Или
Java
1
this.setBackGround(Colour.WHITE)
Но ничего не менялось, да и понятно, что тут явно неправильно


Кликните здесь для просмотра всего текста
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
108
109
110
111
112
113
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.ImageObserver;
import java.io.File;
import java.text.AttributedCharacterIterator;
import java.util.LinkedHashMap;
 
 
public class GraphicsEditor extends JFrame {
    File file; // Our selected file
    Graphics graphics;
 
    private ActionListener open = new ActionListener() { // Opens a file
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter(
                    "JPG & GIF Images", "jpg", "gif", "png");
            chooser.setFileFilter(filter);
            if(JFileChooser.APPROVE_OPTION ==
                    (chooser.showDialog(null, "Open"))) {
 
                file = chooser.getSelectedFile();
            }
        }
    };
 
    private ActionListener save = new ActionListener() { // Saves a file
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            JFileChooser chooser = new JFileChooser();
            File file = null;
            int r = chooser.showSaveDialog(null);
           /* if(JFileChooser.APPROVE_OPTION ==
                    (chooser.showSaveDialog(null)))*/
 
 
        }
    };
 
   /* Remove the full paths to the icons sometime*/
 
   ImageIcon whiteIcon = new ImageIcon("D:\\java\\ideaprojects\\graphics editor\\Icons\\white.png");
   ImageIcon blackIcon = new ImageIcon("D:\\java\\ideaprojects\\graphics editor\\Icons\\black.png");
   ImageIcon redIcon = new ImageIcon("D:\\java\\ideaprojects\\graphics editor\\Icons\\red.png");
   ImageIcon greenIcon = new ImageIcon("D:\\java\\ideaprojects\\graphics editor\\Icons\\green.png");
   ImageIcon yellowIcon = new ImageIcon("D:\\java\\ideaprojects\\graphics editor\\Icons\\yellow.png");
   ImageIcon blueIcon = new ImageIcon("D:\\java\\ideaprojects\\graphics editor\\Icons\\blue.png");
 
 
 
   JButton white = new JButton(whiteIcon);
   JButton black = new JButton(blackIcon);
   JButton red = new JButton(redIcon);
   JButton green = new JButton(greenIcon);
   JButton yellow = new JButton(yellowIcon);
   JButton blue = new JButton(blueIcon);
 
 
 
    private JMenu[] menus = {
            new JMenu("File")/*, new JMenu("Tools"),
            new JMenu("Size")*/
    };
 
    private JMenuItem[] items = {
            new JMenuItem("Open"), new JMenuItem("Save"),
            new JMenuItem("Save as")/*, new JMenuItem("Pencil"),
            new JMenuItem("Eraser"), new JMenuItem("Text"),
            new JMenuItem("1"), new JMenuItem("2"),
            new JMenuItem("2")*/
    };
 
    public GraphicsEditor() {
        for(int i = 0; i < items.length; i++)
            menus[i/3].add(items[i]);
 
        JMenuBar mb = new JMenuBar();
        for(JMenu jm : menus)
            mb.add(jm);
        setJMenuBar(mb);
 
        Dimension colours = new Dimension(15, 15);
        white.setPreferredSize(colours);
        black.setPreferredSize(colours);
        red.setPreferredSize(colours);
        green.setPreferredSize(colours);
        yellow.setPreferredSize(colours);
        blue.setPreferredSize(colours);
 
        add(white);
        add(black);
        add(red);
        add(green);
        add(yellow);
        add(blue);
 
        
 
        items[0].addActionListener(open);  // open a file
        items[1].addActionListener(save); // save the file
 
        setLayout(new FlowLayout());
 
    }
 
    public static void main(String[] args) {
        Swing.go(new GraphicsEditor(), 750, 550);
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2017, 03:24
Ответы с готовыми решениями:

Graphics g и как им управлять
Имеется примерно такой код: package gui; public class CanvasMain extends JPanel { BufferedImage buffer; private void...

Как пользоваться java.awt.Graphics?
Подскажите, как нарисовать простую линию? ... import java.awt.Graphics; class Program { main(){ Graphics g = new...

Pelles C, отказывается работать graphics.h
Отказывается работать graphics.h подскажите где можно скачать его.

1
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
11.08.2017, 09:17
class GraphicsPanel
class PointXY
Кликните здесь для просмотра всего текста
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
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
 
public class GraphicsPanel extends JPanel {
    private GraphicsEditor parent;
    private ImageIcon image;
    private Color penColor;
    private boolean isPressed;
    private int radius;
    private List<PointXY> points;
 
    private static class PointXY extends Point {
        private Color color;
 
        public PointXY(int x, int y, Color color) {
            super(x, y);
            this.color = color;
        }
 
        public Color getColor() {
            return color;
        }
    }
 
 
    public GraphicsPanel(GraphicsEditor parent) {
        this.parent = parent;
        penColor = Color.BLACK;
        isPressed = false;
        radius = 10;
        points = new ArrayList<>();
    }
 
 
    public void setImage(ImageIcon image) {
        this.image = image;
    }
 
    public BufferedImage getImage() {
        BufferedImage bImage = new BufferedImage(getWidth(),getHeight(),BufferedImage.TYPE_3BYTE_BGR);
        Graphics g2D = bImage.createGraphics();
        g2D.setColor(Color.WHITE);
        g2D.fillRect(0,0,getWidth(),getHeight());
 
        if (image != null && image.getIconHeight() > 0 && image.getIconWidth() > 0) {
            g2D.drawImage(image.getImage(), 0, 0, this);
        }
 
        for (PointXY point : points) {
            g2D.setColor(point.getColor());
            g2D.fillOval(point.x - radius, point.y - radius, radius * 2, radius * 2);
        }
 
        return bImage;  // return Buffered Image to write
    }
 
 
    public void setPenColor(Color penColor) {
        this.penColor = penColor;
        if (penColor == Color.WHITE) {
            points.clear();
            repaint();
        }
    }
 
    public void add(int x, int y) {
        PointXY point = new PointXY(x, y, penColor);
        points.add(point);
 
 
    }
 
    public void setPressed(boolean pressed) {
        isPressed = pressed;
 
    }
 
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (image != null && image.getIconHeight() > 0 && image.getIconWidth() > 0) {
            g.drawImage(image.getImage(), 0, 0, this);
        }
//        if (isPressed) {
        Color gColor = g.getColor();
        for (PointXY point : points) {
            g.setColor(point.getColor());
            g.fillOval(point.x - radius, point.y - radius, radius * 2, radius * 2);
        }
        g.setColor(gColor);     // restore color
//        }
 
 
    }
}

Class GraphicsEditor
Кликните здесь для просмотра всего текста
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
 
public class GraphicsEditor extends JFrame {
    private final String[] IMAGE_NAMES = "white black yellow green red blue".split(" ");
    private final Color[] IMAGE_COLORS = { Color.WHITE, Color.BLACK, Color.YELLOW, Color.GREEN, Color.RED,
                                           Color.BLUE};
 
    private final String IMAGE_PATH = "D:/java/ideaprojects/graphics editor/Icons/";
 
    File file; // Our selected file
    private GraphicsPanel jp = new GraphicsPanel(this);
 
    private JButton[] jButtons;
 
 
    private ActionListener open = new ActionListener() { // Opens a file
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            JFileChooser chooser = new JFileChooser();
            FileNameExtensionFilter filter = new FileNameExtensionFilter(
                    "JPG & GIF Images", "jpg", "gif", "png");
            chooser.setFileFilter(filter);
            if (JFileChooser.APPROVE_OPTION ==
                    (chooser.showDialog(null, "Open"))) {
 
                file = chooser.getSelectedFile();
            }
 
            ImageIcon image = new ImageIcon(chooser.getSelectedFile().getPath());
            jp.setImage(image);
            repaint();
 
        }
    };
 
    private ActionListener save = new ActionListener() { // Saves a file
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            JFileChooser chooser = new JFileChooser();
            File file = null;
            int r = chooser.showSaveDialog(null);
           /* if(JFileChooser.APPROVE_OPTION ==
                    (chooser.showSaveDialog(null)))*/
            BufferedImage image = jp.getImage();
            try {
                ImageIO.write(image, "jpg", chooser.getSelectedFile());
            } catch (IOException e) {
                e.printStackTrace();
            }
 
        }
    };
 
    private ActionListener bListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            JButton jButton = (JButton) e.getSource();
            for (int i = 0; i < jButtons.length; i++) {     // порядок цветов такой же как имен картинок
                if (jButton == jButtons[i]) {               // порядок кнопок такой же как имен картинок
                    jp.setPenColor(IMAGE_COLORS[i]);    // задаем цвет карандаша по кнопке
                    return;
                }
            }
        }
    };
 
 
    private MouseMotionListener mMListener = new MouseMotionListener() {
        @Override
        public void mouseDragged(MouseEvent e) {
            jp.add(e.getX(),e.getY());
            repaint();
 
        }
 
        @Override
        public void mouseMoved(MouseEvent e) {
 
        }
    };
 
    private MouseListener mListener = new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            jp.setPressed(true);
        }
 
        @Override
        public void mouseReleased(MouseEvent e) {
            jp.setPressed(false);
 
        }
 
    };
 
    /* Remove the full paths to the icons sometime*/
    private JMenu[] menus = {
            new JMenu("File")/*, new JMenu("Tools"),
            new JMenu("Size")*/
    };
 
    private JMenuItem[] items = {
            new JMenuItem("Open"), new JMenuItem("Save"),
            new JMenuItem("Save as")/*, new JMenuItem("Pencil"),
            new JMenuItem("Eraser"), new JMenuItem("Text"),
            new JMenuItem("1"), new JMenuItem("2"),
            new JMenuItem("2")*/
    };
 
    public GraphicsEditor() {
        JPanel jpColors = new JPanel();//new GridLayout(1, 6));
        jpColors.setPreferredSize(new Dimension(90, 20));
 
        Dimension bSize = new Dimension(15, 15);
        jButtons = new JButton[IMAGE_NAMES.length]; // сколько имен столько и кнопок
        for (int i = 0; i < jButtons.length; i++) {
            ImageIcon image = new ImageIcon(IMAGE_PATH + IMAGE_NAMES[i] + ".png");
            JButton b = new JButton(image);
            b.setPreferredSize(bSize);
            b.addActionListener(bListener);
            jpColors.add(b);
            jButtons[i] = b; // сохраняем если понадобится необязательно
 
        }
 
 
        for (int i = 0; i < items.length; i++)
            menus[i / 3].add(items[i]);
 
        JMenuBar mb = new JMenuBar();
        for (JMenu jm : menus)
            mb.add(jm);
        setJMenuBar(mb);
 
 
        add(jpColors, BorderLayout.NORTH);
        jp.setBackground(Color.WHITE);
        jp.addMouseListener(mListener);
        jp.addMouseMotionListener(mMListener);
 
        add(jp);
        items[0].addActionListener(open);  // open a file
        items[1].addActionListener(save); // save the file
 
 
    }
 
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                GraphicsEditor ge = new GraphicsEditor();
 
                ge.setSize(750, 550);
                ge.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                ge.setLocationRelativeTo(null);
                ge.setVisible(true);
            }
        });
    }
}

Смотрите код. Теперь это микро редактор, можно загрузить картинку и порисовать на ней карандашом.
Цвет выбирается кнопками, белый цвет работает еще и как ластик.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.08.2017, 09:17
Помогаю со студенческими работами здесь

Intel HD Graphics 3000 и программа IQ Option. Она не хочет работать, просит обновить драйвер
Понадобилось поставить на ноутбук DELL Latitude E6320 программу IQ Option. Но при её установке выскакивает окно с текстом: Please...

Graphics.SetClip Method (GraphicsPath) и Graphics.Clear Method vs Graphics.FillPath Method (System.Drawing)
У нас два способа залить форму: 1. Graphics.SetClip Method (GraphicsPath) and Graphics.Clear 2. Graphics.FillPath Method...

Видеокарта NVIDIA GeForce GT 430 Graphics Accelerator после переустановки windows стала работать в половину своей мощности
У меня стоит видеокарта NVIDIA GeForce GT 430 Graphics Accelerator, после переустановки windows она стала работать в половину своей...

Где скачать Borland С++ с поддержкой graphics.h. Уроки по библеотеке graphics.h
Подскажите, нужен Borland С++ с поддержкой graphics.h. Я видел только 1 борланд и выглядело все там не так как мне нужно. Есть новый...

VPU Recover has reset your graphics accelerator as it was no longer responding to graphics driver commands
При запуске даже простых офисных игр комп виснет,монитор гаснет и иногда вылезает сообщение:VPU Recover has reset your graphics accelerator...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru