У меня есть JPanel, окруженный JScrollPane. Эта панель JPanel используется для отображения изображения. Мне нужно предоставить такие функции, как zoomIn, zoomOut, clockwiseRotate и antiClockwiseRotate. Все эти функции работают нормально по отдельности. Для увеличения я называю масштаб графического объекта. Это происходит сверху слева направо снизу. Для вращения я сбрасываю масштаб и перемещаю, вращаю и перемещаю обратно графический объект. Но когда я комбинирую масштабирование с поворотом, он ведет себя иначе. Например, я поворачиваю по часовой стрелке, и изображение поворачивается на 1,57079633 радиан (примерно на 90 градусов). Теперь, когда я нажимаю кнопку масштабирования, изображение увеличивается, но масштабирование происходит на основе верхнего правого и нижнего левого базиса, а не верхнего левого и нижнего правого базиса. Если я снова поверну изображение по часовой стрелке, я сбрасываю масштаб, то есть масштабирую изображение до его исходного размера и вызываю translate, rotate и translate обратно для графического объекта. Теперь, если я снова нажму кнопку масштабирования, масштаб будет увеличиваться в зависимости от нижнего правого и верхнего левого угла.
Следовательно, проблема в том, что координаты изображения не меняются при изменении координат панелей. Может кто-нибудь помочь мне изменить координаты изображения?
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
g2d.translate((tempWidth/2), (tempHeight/2));
g2d.rotate(m_rotate);
g2d.translate(-(tempWidth/2), -(tempHeight/2));
g2d.scale(m_zoom, m_zoom);
if(this.image != null && this.image.getHeight(null) > 0)
{
g2d.drawImage(this.image, 0, 0,302,312,this);
}
else
{
g2d.drawString("View Image Here!. ", 20, 20);
}
}
paintComponent()
вJPanel
, а неpaint()
3)this.image.getHeight(null)
должно бытьthis.image.getHeight(this)
- person Andrew Thompson   schedule 09.04.2012