Получение координат компонента в Java - PullRequest
2 голосов
/ 24 ноября 2010

У меня есть JLayeredPane, а внутри JLayeredPane есть JInternalFrame.Что мне нужно, так это границы (позиция x, позиция y, ширина, высота) панели содержимого в JInternalFrame.Границы должны быть связаны с JLayeredPane.Моя проблема - границы, строка заголовка, и я не уверен, что еще из JInternalFrame мешает моим вычислениям.Это несколько пикселей.

Вот как я пытаюсь рассчитать.Этот код находится в JInternalFrame:


Rectangle area = new Rectangle(
                getX() + 2,  //The x coordinate of the JInternalFrame + 2 for the border
                getY() + ((javax.swing.plaf.basic.BasicInternalFrameUI) getUI()).getNorthPane().getHeight(), //The Y position of the JinternalFrame + theheight of the title bar of the JInternalFrame
                getContentPane().getWidth() - 2, //The width of the Jinternals content pane - the border of the frame
                getContentPane().getHeight() //the height of the JinternalFrames content pane
                );

Мне нужно получить расположение области содержимого внутреннего фрейма.alt text

Ответы [ 2 ]

6 голосов
/ 24 ноября 2010

Координаты относительно чего? Экран? Окно?

Вызов getLocation() даст вам координаты относительно родительского компонента в иерархии окон.

SwingUtilities имеет несколько методов для преобразования координат из одной системы отсчета в другую. Итак, чтобы компенсировать заголовок и рамку, вы можете сделать это:

JInternalFrame iframe = ...
Container c = iframe.getContentPane();
Rectangle r = c.getBounds();
r = SwingUtilities.convertRectangle(c.getParent(), r, iframe.getParent());
2 голосов
/ 24 ноября 2010

Метод getBounds () класса JInternalFrame возвращает прямоугольник с нужными вам координатами. Почему бы просто не сделать следующее:

{
      ...
      JInternalFrame iframe = ...;
      Rectangle r = new Rectangle(iframe.getBounds());
}

Таким образом, вам не нужно вручную вычислять границы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...