Нарисуйте линию внутри холста

Вы можете использовать плагин jquery.form.js для загрузки изображения через ajax на сервер.

http://malsup.com/jquery/form/

Вот пример сценария загрузки изображения jQuery ajax

(function() {
$('form').ajaxForm({
    beforeSubmit: function() {  
        //do validation here


    },

    beforeSend:function(){
       $('#loader').show();
       $('#image_upload').hide();
    },
    success: function(msg) {

        ///on success do some here
    }
}); })();  

Если у вас есть какие-либо сомнения, обратитесь к учебнику по загрузке изображений ajax здесь

http: / /www.smarttutorials.net/ajax-image-upload-using-jquery-php-mysql/

2
задан Andrew Thompson 16 January 2019 в 09:43
поделиться

1 ответ

Во-первых, вам нужно прочитать Рисование в AWT и Swing , чтобы лучше понять, как рисование работает в Swing и AWT.

Далее вам нужно прочитать JavaDocs для Canvas , чтобы лучше понять, какие функции вы можете переопределить.

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

Самая большая проблема с вашим кодом - public void paint(Graphics g, Drawing d) {. Ничто не собирается вызывать это, поскольку это не метод, который распознает система рисования. Также возник бы вопрос, почему вам нужно передать ссылку Drawing на экземпляр Drawing, не уверенный во всем этом.

Еще одна проблема, с которой вы столкнулись ...

Drawing dr = new Drawing(100, 100, 200, 200);
JFrame frame = new JFrame("My Drawing");
Canvas canvas = new Drawing();
canvas.setBackground(Color.white);

frame.add(dr);

frame.add(canvas);

Вы добавляете два экземпляра Drawing к JFrame, так как по умолчанию работает BorderLayout, только второй будет выложен, первый будет проигнорирован.

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

Что-то, что «работает», может выглядеть примерно так ...

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;

public class Drawing extends Canvas {

    int x1;
    int y1;
    int x2;
    int y2;

    public static void main(String[] args) {

        Drawing dr = new Drawing(100, 100, 200, 200);
        JFrame frame = new JFrame("My Drawing");
        frame.add(dr);
        frame.pack();
        frame.setVisible(true);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 400);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.drawLine(x1, y1, x2, y2);
    }

    Drawing(int x1, int y1, int x2, int y2) {
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
    }

    Drawing() {

    }
}

Вы, кажется, делаете фундаментальные ошибки при использовании API, и я настоятельно рекомендую вам потратить некоторое время на чтение Создание графического интерфейса с помощью JFC / Swing . Вы также обнаружите, что использование что-то вроде JPanel вместо Canvas даст вам лучшую производительность и результаты

0
ответ дан MadProgrammer 16 January 2019 в 09:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: