2016-07-12 5 views
-1

Не могу найти информацию о том, как поймать событие «resize» JInternalFrame, я действительно имею в виду внутренний рама.Java Internal Frame изменить размер прослушивателя событий?

Действительно, InternalFrameListener не улавливает события «resize».

Должен ли я сам написать его с помощью «JInternalFrame.addComponentListener(...)»?

ответ

0

Да, вы должны использовать addComponentListener(), чтобы добавить слушателя с изменением размера в JInternalFrame.

Самый компактный способ сделать это было бы использовать ComponentAdapter и только переопределить componentResized(final ComponentEvent e) метод:

jInternalFrame.addComponentListener(new ComponentAdapter() { 
    @Override 
    public void componentResized(final ComponentEvent e) { 
     super.componentResized(e); 
     System.out.println("Resizing"); 
    } 
}); 

Взгляните на этот простой, полный пример:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ComponentAdapter; 
import java.awt.event.ComponentEvent; 

public class Example { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(Example::createFrame); 
    } 

    private static void createFrame() { 

     JFrame jFrame = new JFrame(); 
     jFrame.setLocationRelativeTo(null); 

     JDesktopPane jDesktopPane = new JDesktopPane(); 
     jDesktopPane.setPreferredSize(new Dimension(600, 600)); 

     JInternalFrame jInternalFrame = new JInternalFrame(); 
     jInternalFrame.setBackground(Color.BLUE); 
     jInternalFrame.setResizable(true); 
     jInternalFrame.setSize(new Dimension(300, 300)); 
     jInternalFrame.setLocation(100, 100); 
     jInternalFrame.setVisible(true); 

     jInternalFrame.addComponentListener(new ComponentAdapter() { 
      @Override 
      public void componentResized(final ComponentEvent e) { 
       super.componentResized(e); 
       System.out.println("Resizing"); 
      } 
     }); 

     jDesktopPane.add(jInternalFrame); 

     jFrame.setContentPane(jDesktopPane); 
     jFrame.pack(); 
     jFrame.setVisible(true); 
    } 
} 
+0

Спасибо за пример. Но теперь я столкнулся с другой проблемой, так как мой класс уже расширяет другую, которая расширяет jInternalFrame. – Titi

+0

@ Тити, почему это проблема? – explv

+0

Спасибо за ваш hepl. Вы правы ... никаких проблем. Во-первых, я думал, что мне нужно расширить ComponentAdapter (чего я не могу, так как мой класс уже расширяет jInternalFrame. Я также обнаружил, что могу реализовать ComponentListener, что является другим способом его выполнения. – Titi