Как нарисовать линию в java
Перейти к содержимому

Как нарисовать линию в java

  • автор:

Как рисовать линии в JFrame?

Имеется автоматически сгенерированная форма JFrame в NetBeans с размещенной на ней с помощью графического редактора кнопкой. Как рисовать линии на форме? Я разместил на форме компонент JPanel и пытаюсь нарисовать на нем:

package graphic2; import javax.swing.*; import java.awt.*; class DrawingComponent extends JPanel < @Override protected void paintComponent(Graphics gh) < Graphics2D drp = (Graphics2D)gh; drp.drawLine(20, 340, 20, 20); drp.drawLine(20, 340, 460, 340); >> public class Frame extends javax.swing.JFrame < /** * Creates new form Frame */ public Frame() < super("График по точкам"); initComponents(); jPanel1.add(new DrawingComponent (), BorderLayout.CENTER); >/** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // private void initComponents() < jPanel1 = new javax.swing.JPanel(); jButton1 = new javax.swing.JButton(); canvas1 = new java.awt.Canvas(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 202, Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 156, Short.MAX_VALUE) ); jButton1.setText("jButton1"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(66, 66, 66) .addComponent(jButton1) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(175, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(canvas1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(57, 57, 57)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(65, 65, 65) .addComponent(jButton1) .addGap(9, 9, 9) .addComponent(canvas1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(39, 39, 39) .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(65, Short.MAX_VALUE)) ); pack(); >// /** * @param args the command line arguments */ public static void main(String args[]) < /* Set the Nimbus look and feel */ ///* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try < for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) < if ("Nimbus".equals(info.getName())) < javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; >> > catch (ClassNotFoundException ex) < java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); >catch (InstantiationException ex) < java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); >catch (IllegalAccessException ex) < java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); >catch (javax.swing.UnsupportedLookAndFeelException ex) < java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); >// /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() < public void run() < new Frame().setVisible(true); >>); > // Variables declaration - do not modify private java.awt.Canvas canvas1; private javax.swing.JButton jButton1; private javax.swing.JPanel jPanel1; // End of variables declaration 

> Но линии не выводятся. Подскажите как правильно выводить?

Как нарисовать линию в java

Главный интерес представляет аргумент этой функции. Класс Graphics является базовым для всех контекстов, которые разрешают рисовать по компоненте. С другой стороны данный класс содержит функции необходимые для рисования, например drawLine, drawString, drawImage и т.д. вместе с вспомогательными для установки текущих шрифта (setFont), цвета линий или текста (setColor) и др.

В сегодняшнем примере предлагаю вспомнить детство — попробуем построить график синусоиды, для вычисления значений которой воспользуемся соответствующим статическим методом класса Math. Рисовать будем по панели, для чего создадим свой класс — потомок JPanel и перегрузим соответствующий метод.

Создаем код

import java.awt.*; import javax.swing.*; public class PaintApp extends JFrame < public PaintApp(String title) < super(title); //создадим свою рисующую пенель GraphSinPanel grSnPn=new GraphSinPanel(); grSnPn.setPreferredSize(new Dimension(300,300)); //установим нашу панель как ContentPane окна приложения setContentPane(grSnPn); >public static void main(String args[]) < PaintApp OurApp = new PaintApp("Graph of sin(x)"); OurApp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); OurApp.pack(); OurApp.setVisible(true); >> class GraphSinPanel extends JPanel < private int Wth, Hig; private int PrevX, PrevY, CurX, CurY; private final double Pi=Math.PI; private Font curFont; private FontMetrics curFontMetrics; public GraphSinPanel() < super(); //задаем фон setBackground(Color.black); //получим текущий шрифт и его метрику //это понадобится для определения длины текста curFont=getFont(); curFontMetrics=getFontMetrics(curFont); >//две нижеследующие функции мне понадобились для преобразования //системы координат (стандартно начало отсчета находится в левом //верхнем углу, ось Х идет направо, ось У - вниз). Я выбрал систему //координат с началом в центре и такими диапазонами: -5Pi/2 < x < 5Pi/2, //-1.5< y private int Convert_Y(double x) < return (int)((Hig/2)-(x/(1.5))*(Hig/2)); >//функция - гвоздь программы public void paintComponent(Graphics g) < //вызовем соответствующий родительский метод для отрисовки фона super.paintComponent(g); //получим размеры области рисования Wth=getSize().width; Hig=getSize().height; //устанавливаем цвет g.setColor(Color.white); //рисуем оси, стрелки и т.д. g.drawLine(Convert_X(-5*Pi/2)+5, Convert_Y(0), Convert_X(5*Pi/2)-5, Convert_Y(0)); g.drawLine(Convert_X(0), Convert_Y(1.5)+5, Convert_X(0), Convert_Y(-1.5)-5); g.drawLine(Convert_X(5*Pi/2)-5, Convert_Y(0), Convert_X(5*Pi/2)-15, Convert_Y(0)+3); g.drawLine(Convert_X(5*Pi/2)-5, Convert_Y(0), Convert_X(5*Pi/2)-15, Convert_Y(0)-3); g.drawLine(Convert_X(0), Convert_Y(1.5)+5, Convert_X(0)-3, Convert_Y(1.5)+15); g.drawLine(Convert_X(0), Convert_Y(1.5)+5, Convert_X(0)+3, Convert_Y(1.5)+15); g.drawLine(Convert_X(-2*Pi), Convert_Y(-0.05), Convert_X(-2*Pi), Convert_Y(0.05)); g.drawLine(Convert_X(-Pi), Convert_Y(-0.05), Convert_X(-Pi), Convert_Y(0.05)); g.drawLine(Convert_X(Pi), Convert_Y(-0.05), Convert_X(Pi), Convert_Y(0.05)); g.drawLine(Convert_X(2*Pi), Convert_Y(-0.05), Convert_X(2*Pi), Convert_Y(0.05)); g.drawLine(Convert_X(-0.05), Convert_Y(1), Convert_X(0.05), Convert_Y(1)); g.drawLine(Convert_X(-0.05), Convert_Y(-1), Convert_X(0.05), Convert_Y(-1)); g.setColor(Color.green); PrevX=Convert_X(-2*Pi); PrevY=Convert_Y(Math.sin(-2*Pi)); //рисуем саму синусоиду. for (double delta=(-2*Pi); delta//подпишем оси, значения. g.setColor(Color.red); g.drawString("-2Pi",Convert_X(-2*Pi)-(int)(curFontMetrics.stringWidth("-2Pi")/2), Convert_Y(-0.06)+curFontMetrics.getHeight()); g.drawString("-Pi",Convert_X(-Pi)-(int)(curFontMetrics.stringWidth("-Pi")/2), Convert_Y(-0.06)+curFontMetrics.getHeight()); g.drawString("Pi",Convert_X(Pi)-(int)(curFontMetrics.stringWidth("Pi")/2), Convert_Y(-0.06)+curFontMetrics.getHeight()); g.drawString("2Pi",Convert_X(2*Pi)-(int)(curFontMetrics.stringWidth("2Pi")/2), Convert_Y(-0.06)+curFontMetrics.getHeight()); g.drawString("-1",Convert_X(0.1),Convert_Y(-1)+(int)(curFont.getSize()/2)); g.drawString("1",Convert_X(0.1),Convert_Y(1)+(int)(curFont.getSize()/2)); g.drawString("0",Convert_X(0.1),Convert_Y(0)+curFont.getSize()); g.setColor(Color.yellow); g.drawString("x",Convert_X(5*Pi/2)-15,Convert_Y(0)+curFont.getSize()+5); g.drawString("y",Convert_X(0)+5,Convert_Y(1.5)+curFont.getSize()); g.drawString("Y=SIN(X)",Convert_X(Pi)+5,Convert_Y(1.1)+curFont.getSize()); > >

Компилируем, запускаем, смотрим. У меня получилось что-то такое:

Как нарисовать линию со своим методом рисования точки?

У меня есть свой метод рисования точки, другой использовать нельзя. Мне надо нарисовать линию. Нужен какой-нибудь готовый метод рисования линий, который можно легко изменить.

  • Вопрос задан более трёх лет назад
  • 174 просмотра

Комментировать

Решения вопроса 0

Ответы на вопрос 3

Kuznetsov

Java-developer

Скорей всего, ваш метод принимает параметры координат X и Y. Следовательно вам нужно просто вызвать его в цикле меняя в каждой итерации одну из координат: X для горизонтальной линии, Y для вертикальной. Ну или обе — для диагональной)

Ответ написан более трёх лет назад

Графическое программирование на Java

Графическое программирование на Java

Сегодня мы собираемся изучить основы графического программирования на Java. Мы углубимся в основы рисования основных фигур, управления цветами и работы с перьями. Независимо от того, создаете ли вы графику как часть текущего проекта или как основу для собственной игры или приложения, давайте рассмотрим, как легко создавать красивые визуальные эффекты программным путем.

В этой статье рассматриваются следующие темы:

  1. Графическая библиотека Java
  2. Графическое программирование на Java
  3. Нарисовать кривые
  4. Многоугольники и прямоугольники
  5. Как рисовать линии
  6. Нарисовать пути
  7. Нарисовать область заливки

Графическая библиотека Java — скачать бесплатно#

Aspose.Drawing — одна из наиболее широко используемых библиотек векторной графики для 2D-программирования. Мы будем использовать API Aspose.Drawing for Java для графического программирования на Java. Программисты могут использовать эту кроссплатформенную библиотеку для рисования текста, фигур и изображений в своих 2D-приложениях. Он позволяет загружать, сохранять и манипулировать поддерживаемыми форматами файлов.

Пожалуйста, загрузите JAR API или добавьте следующую конфигурацию pom.xml в приложение Java на основе Maven.

  AsposeJavaAPI Aspose Java API https://repository.aspose.com/repo/   
  com.aspose aspose-drawing 24.1   

Графическое программирование на Java#

В Java мы можем легко рисовать различные типы фигур, такие как кривые, линии, прямоугольники, заполненные области, эллипсы и многоугольники. API предоставляет различные методы для рисования этих фигур. Мы можем программно создать множество различных векторных изображений, выполнив следующие действия:

  1. Создайте объект класса Bitmap.
  2. Инициализируйте объект класса Graphics из растрового изображения.
  3. Определите объект класса Pen или SolidBrush с нужными параметрами.
  4. Используйте методы класса Graphics, специфичные для фигуры, чтобы нарисовать желаемую фигуру.
  5. В конце сохраните изображение.

Теперь давайте посмотрим, как выполнить эти шаги в Java.

Рисовать кривые в Java#

Мы можем рисовать дуги, круги, эллипсы или замкнутые кривые, используя следующие методы:

  • Метод drawArc() для рисования дуги.
  • Метод drawEllipse() для рисования эллипса.
  • drawClosedCurve() для рисования замкнутой кривой.
  • Метод drawCurve() для рисования кривой.

Пожалуйста, следуйте инструкциям ниже, чтобы нарисовать изогнутые формы:

  1. Создайте экземпляр класса Bitmap.
  2. Создайте объект класса Graphics, используя метод fromImage() из вновь созданного объекта Bitmap.
  3. Определите объект класса Pen с указанным цветом и размером.
  4. После этого вызовите метод drawClosedCurve(), чтобы нарисовать замкнутую кривую.
  5. При необходимости повторите описанные выше шаги, чтобы добавить дугу и эллипс.
  6. Наконец, сохраните выходное изображение с помощью метода save().

В следующем примере кода показано, как рисовать изогнутые фигуры в Java.

// В этом примере кода показано, как нарисовать замкнутую кривую, дугу и круг. // Создать растровое изображение Bitmap bitmap = new Bitmap(1000, 800); // Инициализировать графику из растрового изображения Graphics graphics = Graphics.fromImage(bitmap); // Определите перо для рисования Pen penBlue = new Pen(Color.getBlue(), 4); // Нарисуйте кривую graphics.drawClosedCurve(penBlue, new Point[] < new Point(10, 700), new Point(250, 500), new Point(500, 10), new Point(750, 500), new Point(990, 700) >); // Нарисуйте дугу Pen penRed = new Pen(Color.getRed(), 2); graphics.drawArc(penRed, 0, 0, 700, 700, 0, 180); // Нарисуйте эллипс Pen penGreen = new Pen(Color.getGreen(), 2); graphics.drawEllipse(penGreen, 10, 10, 500, 500); // Сохраните растровое изображение в формате PNG. bitmap.save("D:\\Files\\Curves.png"); 

Кривые в графическом программировании с использованием Java

Рисуйте многоугольники и прямоугольники в Java#

Мы можем рисовать многоугольники и прямоугольники, выполнив шаги, упомянутые ранее. Однако на шаге 4 нам нужно использовать следующие методы:

  • Метод drawPolygon() для рисования многоугольника.
  • Метод drawRectangle() для рисования прямоугольника.

В следующем примере кода показано, как рисовать многоугольники и прямоугольники в Java.

// В этом примере кода показано, как нарисовать многоугольник и прямоугольник. // Создать растровое изображение Bitmap bitmap = new Bitmap(1000, 800); // Инициализировать графику из растрового изображения Graphics graphics = Graphics.fromImage(bitmap); // Определите перо для рисования Pen penBlue = new Pen(Color.getBlue(), 4); // Нарисовать многоугольник graphics.drawPolygon(penBlue, new Point[] < new Point(100, 100), new Point(500, 700), new Point(900, 100) >); // Нарисуйте прямоугольник Pen penRed = new Pen(Color.getRed(), 2); graphics.drawRectangle(penRed, 10, 10, 900, 700); // Сохраните растровое изображение в формате PNG. bitmap.save("D:\\Files\\Shapes.png"); 

Загрузка изображения в растровом изображении с использованием Java

Рисовать линии в Java#

Точно так же мы можем рисовать линии, выполнив шаги, упомянутые ранее. Однако нам нужно использовать метод drawLine() на шаге № 4, чтобы нарисовать линию.

В следующем примере кода показано, как рисовать линии в Java.

// В этом примере кода показано, как нарисовать линию. // Создать растровое изображение Bitmap bitmap = new Bitmap(1000, 800); // Инициализировать графику из растрового изображения Graphics graphics = Graphics.fromImage(bitmap); // Определите перо для рисования Pen pen = new Pen(Color.getBlue(), 4); // Рисовать линии graphics.drawLine(pen, 10, 700, 500, 10); graphics.drawLine(pen, 500, 10, 990, 700); // Сохраните растровое изображение в формате PNG. bitmap.save("D:\\Files\\Lines.png"); 

Линии в графическом программировании с использованием Java

Рисовать пути в Java#

Контуры в векторной графике представляют собой серию плавных прямых линий, определяемых начальной и конечной точкой, а также другими точками. Мы можем нарисовать путь, выполнив следующие действия:

  1. Создайте экземпляр класса Bitmap.
  2. Инициализируйте объект класса Graphics из вновь созданного объекта Bitmap, используя метод fromImage().
  3. Определите объект класса Pen с указанным цветом и размером.
  4. Создайте экземпляр класса GraphicsPath.
  5. Добавьте строки, используя метод addLine().
  6. После этого вызовите метод drawPath() с объектами Pen и GraphicsPath.
  7. Наконец, сохраните выходное изображение с помощью метода save().

В следующем примере кода показано, как нарисовать путь в Java.

// В этом примере кода показано, как нарисовать путь. // Создать растровое изображение Bitmap bitmap = new Bitmap(1000, 800); // Инициализировать графику из растрового изображения Graphics graphics = Graphics.fromImage(bitmap); // Определите перо для рисования Pen pen = new Pen(Color.getBlue(), 4); // Инициализировать графический путь GraphicsPath path = new GraphicsPath(); // Добавить строку 1 path.addLine(100, 100, 1000, 400); // Добавить строку 2 path.addLine(1000, 600, 300, 600); // Добавить прямоугольник path.addRectangle(new Rectangle(500, 350, 200, 400)); // Добавить эллипс path.addEllipse(10, 250, 450, 300); // Нарисовать путь graphics.drawPath(pen, path); // Сохраните растровое изображение в формате PNG. bitmap.save("D:\\Files\\Shapes.png"); 

Пути в графическом программировании с использованием Java

Нарисуйте область заливки в Java#

Мы можем нарисовать область заливки, выполнив следующие действия:

  1. Создайте экземпляр класса Bitmap.
  2. Инициализируйте объект класса Graphics из вновь созданного объекта Bitmap, используя метод fromImage().
  3. Создайте экземпляр класса GraphicsPath.
  4. Добавьте многоугольник, используя метод addPolygon().
  5. Создайте экземпляр класса Region.
  6. Добавьте еще один объект GraphicsPath и добавьте прямоугольник с помощью метода addRectangle().
  7. Вызовите метод исключения(), чтобы исключить внутренний путь из региона.
  8. Затем определите объект класса SolidBrush с указанным цветом.
  9. После этого вызовите метод fillRegion() с объектами SolidBrush и GraphicsPath.
  10. Наконец, сохраните выходное изображение с помощью метода save().

В следующем примере кода показано, как нарисовать заполненную область в Java.

// В этом примере кода показано, как нарисовать регион. // Создать растровое изображение Bitmap bitmap = new Bitmap(1000, 800); // Инициализировать графику из растрового изображения Graphics graphics = Graphics.fromImage(bitmap); // Добавить многоугольник GraphicsPath path = new GraphicsPath(); path.addPolygon(new Point[] < new Point(100, 400), new Point(500, 100), new Point(900, 400), new Point(500, 700) >); // Инициализировать регион Region region = new Region(path); // Внутренний графический путь GraphicsPath innerPath = new GraphicsPath(); // Добавить прямоугольник innerPath.addRectangle(new Rectangle(300, 300, 400, 200)); // Исключить внутренний путь region.exclude(innerPath); // Определите сплошную кисть Brush brush = new SolidBrush(Color.getBlue()); // Заполнить регион graphics.fillRegion(brush, region); // Сохраните растровое изображение в формате PNG. bitmap.save("D:\\Files\\FillRegion.png"); 

Заполнение области в графическом программировании с использованием Java

Получите бесплатную лицензию#

Вы можете получить бесплатную временную лицензию, чтобы попробовать Aspose.Drawing for Java без ограничений ознакомительной версии.

Графическое программирование на Java — бесплатные ресурсы#

Помимо рисования линий, контуров и прямоугольников, вы можете изучить различные другие функции библиотеки, используя приведенные ниже ресурсы:

  • Руководство разработчика
  • Бесплатные онлайн-приложения
  • Справочник по API
  • Практические руководства и статьи

Заключение#

В этой статье мы изучили основы графического программирования на Java с использованием Aspose.Drawing for Java. Мы увидели, как программно рисовать прямоугольники, эллипсы, линии и пути на Java. Мы также узнали, как создавать и сохранять растровое изображение в формате PNG. Следуя шагам, описанным в этой статье, и приведенным примерам кода, вы сможете создавать потрясающую векторную графику в своих приложениях Java. В случае возникновения каких-либо неясностей, пожалуйста, свяжитесь с нами на нашем форуме бесплатной поддержки.

Смотрите также#

  • Aspose.Drawing: лучшая альтернатива System.Drawing
  • Добавить текст в PNG-изображение
  • Бесплатная онлайн-линейка — цифровое решение для точных измерений
  • Как добавить текст в JPEG/JPG — онлайн и бесплатно
  • Aspose.Drawing Product Family
  • graphic interface java
  • gui interface in java
  • graphic java
  • graphics programming in java
  • graphic class java
  • graphic library java
  • java drawing
  • java graphics example
  • working with graphics in java
  • graphic design in java
  • graphics class in java example
  • graphics programming in java example
  • introduction to graphics programming in java
  • java drawing program
  • java graphics example program
  • simple java graphics program
  • java graphics
  • graphics java program
  • java 2d graphics

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *