2012-06-08 6 views
0

У меня есть изображение в Jlabel, которое я хочу повернуть на 90 градусов прямо, когда пользователь нажимает кнопку. Я попытался это сделать сам, но с различными ошибками. Мне сказали, что лучший способ сделать это - использовать Graphics2D?Поворот JLabel 90 градусов Java

Главный класс:

private void SearchButtonActionPerformed(java.awt.event.ActionEvent evt) {   
BufferedImage image; 
     try { 
      image = ImageIO.read(file); 
      Image scaled = image.getScaledInstance(Jlabel1.getWidth(), Jlabel1.getHeight(), 5); 
      Jlabel1.setIcon(new ImageIcon(scaled)); 

Кнопка:

private void rotateButtonActionPerformed(java.awt.event.ActionEvent evt) { 
     Graphics2D userImage = (Graphics2D)JLabel1.getGraphics(); 
    userImage.rotate(Math.toRadians(90)); 
    userImage.drawImage(JLabel1, JLabel1.getHeight(), JLabel1.getWidth()); 
    } 
+2

* «не стоит даже проводки» * ведет к чувству "даже не стоит отвечать. –

+1

«arent even worth posting» означает, что они были в хорошем состоянии, что было необходимо ........ –

+1

Итак, вы в основном решили не публиковать ничего о соответствующем коде и спросить нас, как это сделать. Поэтому мне не хватает важной информации: куда мне нужно отправить свой счет? – Robin

ответ

2

Вы никогда не должны когда-либо использовать Component.getGraphics() для рисования на компоненте. Вместо этого вы всегда должны перезаписывать paintComponent и работать с объектом Graphics, который передается ему.

Component.getGraphics() просто не может работать. Java использует обратный вызов механизм для рисования графики. Вы не должны «нажимать» графическую информацию в компонент с помощью getGraphics(). Вместо этого вы должны ожидать, пока Java вызовет ваш метод paint()/paintComponent() . В этот момент вы должны предоставить Компоненту чертежи, которые вы хотели бы сделать.

Этот механизм необходим, поэтому Java может поддерживать графические системы, которые не запоминают содержимое окна, когда оно затенено (например, наложено еще одним окном). Когда окно становится видимым снова, такие графические системы должны попросить приложение восстановить содержимое окна. Следовательно, paint()/paintComponent() должна быть памятью компонента . getGraphics(), однако, не имеет никакого воспоминания об предыдущих операциях рисования. Поэтому, как только рисунок, выполненный с помощью getGraphics() , будет потерян, он не может быть восстановлен. Там нет ничего, что хранит старые данные чертежа, и в AWT/Swing ничего нет, сообщает getGraphics(), чтобы сделать повторный чертеж.

Кроме того, бывают ситуации, когда Component.getGraphics() просто возвращает null. Это определенное поведение метода. И, наконец, большинство пользователей getGraphics() забывают утилизировать объект Graphics после использования.

http://www.pscode.org/guifaq.html

Смежные вопросы