не рисуется линия в Swing!

172
27 декабря 2017, 20:35

Только на чал изучать Swing. Написал простенький код, чтобы в окне рисовать двумерные фигуры (в моем случае это линия). Но не могу понять, почему она не строится. Подскажите, где ошибка?

import javax.swing.*;
import java.awt.*;
public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setTitle("figures");
        frame.setSize(new Dimension(600,400));
        frame.setLocationRelativeTo(null);
        frame.setLayout(new GridBagLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GraphicsPanel graphicsPanel = new GraphicsPanel();
        frame.add(graphicsPanel, new GridBagConstraints(0,0,1,1,1,1,
                GridBagConstraints.NORTH, GridBagConstraints.BOTH,
                new Insets(2,2,2,2),0,0));
        frame.setVisible(true);
    }
}



  import java.awt.geom.Line2D;
    import java.awt.geom.Point2D;
    import java.awt.geom.Rectangle2D;
        public class Line extends Line2D{
            private Point p1;
            private Point p2;
            public Line()
            {
                p1 = new Point();
                p2 = new Point();
            }
            public Line(double x1, double y1, double x2, double y2) {
                p1 = new Point (x1, y1);
                p2 = new Point (x2, y2);
            }
            @Override
            public double getX1() {
                return p1.getX();
            }
            @Override
            public double getX2() {
                return p2.getX();
            }
            @Override
            public double getY1() {
                return p1.getY();
            }
            @Override
            public double getY2() {
                return p2.getY();
            }
            @Override
            public Point2D getP2() {
                return p1;
            }
            @Override
            public Point2D getP1() {
                return p2;
            }
            @Override
            public void setLine(double x1, double y1, double x2, double y2) {
                p1.setLocation(x1,y1);
                p2.setLocation(x2,y2);
            }
            @Override
            public Rectangle2D getBounds2D() {
                return null;
            }
        }

import javax.swing.*;
import java.awt.*;
public class GraphicsPanel extends JPanel{
    private Line line;
    public GraphicsPanel()
    {
        line = new Line(10,20,300,400);
    }
    @Override
    public void paintComponents(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;
        g2.draw(line);
    }
}

вот результат работы программы так же еще есть класс определением точки, унаследованный от класса Point2D. Там переопределены все методы, думаю, что ошибок в нем нет.

READ ALSO
Задать начальное состояние

Задать начальное состояние

но как это в коде сделать

223
Какой язык выбрать [требует правки]

Какой язык выбрать [требует правки]

Пришло время дальше изучать програмированияЗнание в веб разработки у меня ограничеваются пхп и сопутствующие ему технологии не знаю что...

287
Оперативные данные в Android приложении

Оперативные данные в Android приложении

Есть массив показаний датчиков в оперативной памяти устройстваЕсть сервис в приложении, который обновляет эти данные и несколько Activity, которые...

183
Как отобразить один DialogFragment поверх другого?

Как отобразить один DialogFragment поверх другого?

У меня есть диалог сохранения файла, где нужно выбрать имя и путь для сохраненияОн сделан с помощью DialogFragment

146