Как нарисовать линию на панели после вызова pack ()? - PullRequest
0 голосов
/ 28 января 2019

Я пишу небольшой графический интерфейс на Java, используя компоненты Swing.Моя программа использует несколько перекрывающихся панелей, размеры которых определяются в тот момент, когда вызывается «pack ()».

Моя проблема заключается в следующем.Мне нужно знать размеры конкретного JPanel до pack(), так как мне нужно нарисовать линию вертикально вниз по нему.Однако я не могу получить это измерение высоты, пока не будет вызван пакет.

Я вставил вызов System.out.println(myPanel.getSize()) перед командой пакета, и он возвращает (0, 0).При вставке после он возвращает фактические размеры панели ... как и следовало ожидать.

Итак, как нарисовать линию на панели по всей ее длине, либо не зная ее длины, чтобы начатьс или как-то так после вызова пакета?

1 Ответ

0 голосов
/ 28 января 2019

Этого можно добиться, добавив ComponentListener на панель.Его событие componentResized() запускается при каждом изменении размера панели.А внутри метода componentResized() вы всегда получите фактический размер панели.Попробуйте приведенный ниже пример и убедитесь сами.

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

public class PanelResize
{
  public static void main(String[] args)
  {
    CustomPanel panel = new CustomPanel();
    panel.addComponentListener(new ComponentAdapter()
    {
      @Override
      public void componentResized(ComponentEvent e)
      {
        System.out.println(panel.getSize());
        panel.repaint();
      }
    });

    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(panel);
    f.setBounds(300, 200, 400, 300);
    f.setVisible(true);
  }
}

class CustomPanel extends JPanel
{
  @Override
  protected void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    g.setColor(Color.blue);
    g.drawLine(getWidth()/2, 0, getWidth()/2, getHeight());
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...