Вы можете использовать плагин 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/
Во-первых, вам нужно прочитать Рисование в 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
даст вам лучшую производительность и результаты