Как нарисовать отрезок изогнутой линии, используя QuadCurve2D.Double?

Вот строка кода, где я объявляю кривую:

QuadCurve2D.Double curve = new QuadCurve2D.Double(50,100,100,170,150,100);

Теперь какой код я могу использовать, чтобы нарисовать эту кривую? Я попробовал что-то вроде:

g.draw(curve);

но очевидно, что это не сработало. Какие-либо предложения?

 ignis29 окт. 2012 г., 01:50
Как указывает Тигр, вы не рисуете его на графике, вместо этого вы рисуете его на Graphics2D. PaintComponent (Graphics g) ---> Swing на самом деле представляет собой Graphics2D.

Ответы на вопрос(2)

public class PaintQuad {

    public static void main(String[] args) {
        new PaintQuad();
    }

    public PaintQuad() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new PaintMyQuad());
                frame.setSize(200, 200);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class PaintMyQuad extends JPanel {

        @Override
        protected void paintComponent(Graphics g) {

            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g.create();

            QuadCurve2D.Double curve = new QuadCurve2D.Double(50,100,100,170,150,100);

            g2d.setColor(Color.RED);
            g2d.draw(curve);

        }

    }

}

На ум приходят две вещи.

Убедитесь, что вы установили цвет графики, по умолчанию используется задний фон панелиУбедитесь, что размер вашего контейнера достаточно большой (и правильно расположен) для отображения графики.
Решение Вопроса

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

import java.awt.geom.*;
import java.awt.*;
import javax.swing.*;

public class CurveDraw extends JFrame {
        public static void main(String[] args) {
                CurveDraw frame = new CurveDraw();
                frame.setVisible(true);
        }
        public CurveDraw() {
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setSize(400,400);
        }
        public void paint(Graphics g) {
                QuadCurve2D.Double curve = new QuadCurve2D.Double(50,100,100,170,150,100);
                ((Graphics2D)g).draw(curve);
        }
}
 ignis29 окт. 2012 г., 01:48
+1.Смотри документацию, QuadCurve2D реализует Shape.
 MadProgrammer29 окт. 2012 г., 01:49
ПОЖАЛУЙСТА, не рисуйте непосредственно в контейнеры верхнего уровня И, пожалуйста, вызовsuper.paint(g), Хотя я ценю, что это всего лишь контрольный пример, это плохой пример правильной практики кодирования, и из-за них мы имеем дело с более чем достаточным количеством проблем (извините, я не придирчив, но это может принести вам отрицательный голос)

Ваш ответ на вопрос