Здравствуйте, Honest, Вы писали:
H>Подскажите пожалуйста как реализовать:
H>На форме имеется изображение размером 50х50(допустим). При нажатии на изображение требуется чтобы оно плавно увеличилось , как бы приблизилось. Приближенное изображение находится на другой форме.
Java2D FAQ
И вот ещё может оказатся полезным:
http://rsdn.ru/Forum/Message.aspx?mid=2277188Автор: n0name2
Дата: 22.12.06
Здравствуйте, Blazkowicz, Вы писали:
B>Java2D FAQ
B>И вот ещё может оказатся полезным:
B>http://rsdn.ru/Forum/Message.aspx?mid=2277188Автор: n0name2
Дата: 22.12.06
Спасибо за ссылки. В какой-то мере они оказались полезными. Но проблема вот в чем, приближение изображение должно быть плавным. У меня же получилось так, что окно с изображение увеличивается, но изображение в окне появляется не сразу. Вот код:
dialog.addComponentListener(new ComponentAdapter() {
private void init(final ComponentEvent e) {
// Create the image
Thread t = new Thread(new Runnable() {
public void run() {
int tw = e.getComponent().getWidth();
int th = e.getComponent().getHeight();
// Create the graphics
Graphics2D graphics = (Graphics2D) panel.getGraphics();
try {
// Set rendering hints
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
// Open the source image
BufferedImage source = im;
// Get width & geight
int w = source.getWidth(), h = source.getHeight();
// Calculate the scale
double scale = Math.min((double) tw / (double) w, (double) th / (double) h);
// Calculate the coordinates
int x = (int) (((double) tw - (double) w * scale) / 2.0d), y = (int) (((double) th - (double) h * scale) / 2.0d);
// Get the scaled instance
Image scaled = source.getScaledInstance((int) (w * scale), (int) (h * scale), Image.SCALE_FAST);
// Set the color
// graphics.setColor(Color.WHITE);
// Paint the white rectangle
// graphics.fillRect(0, 0, tw, th);
// Draw the image
graphics.drawImage(scaled, x, y, null);
} finally {
// Always dispose the graphics
graphics.dispose();
}
}
});
t.setPriority(Thread.NORM_PRIORITY);
t.start();
}
public void componentResized(ComponentEvent e) {
super.componentResized(e);
init(e);
}
public void componentMoved(ComponentEvent e) {
super.componentMoved(e);
init(e);
}
});
И вот так я меняю размеры окна, чотбы был эффект раскрытия:
int i = 60;
while (i < 900) {
dialog.setSize(i, i);
i = i + 20;
}
Интересно реализовано ли это в вебе? и можно ли это использовать?
Здравствуйте, Honest, Вы писали:
H>Здравствуйте, Blazkowicz, Вы писали:
B>>Java2D FAQ
B>>И вот ещё может оказатся полезным:
B>>http://rsdn.ru/Forum/Message.aspx?mid=2277188Автор: n0name2
Дата: 22.12.06
H>Спасибо за ссылки. В какой-то мере они оказались полезными. Но проблема вот в чем, приближение изображение должно быть плавным. У меня же получилось так, что окно с изображение увеличивается, но изображение в окне появляется не сразу. Вот код:
Вообще, не рекомендуется рисовать что-то на компоненте в потоке, отличном от EventDispatcherThread. Большая вероятность, что именно из-за этого не работает как надо.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.