Реализация графики в JPanel - PullRequest
       19

Реализация графики в JPanel

2 голосов
/ 20 октября 2011

Я пытался реализовать графику в приложении с графическим интерфейсом, которое я сделал в Netbeans. Я сделал макет (кнопки, текстовые поля и т. Д.) С помощью графического редактора, и пока все работает нормально. По сути, я хочу сгенерировать некоторую графику (линии и тому подобное) в нижней половине моего JFrame и оставить флажки, кнопки и тому подобное в верхней части моего JFrame.

Из примеров, которые я видел, общий подход заключается в создании класса, который расширяет JPanel и содержит графический код для создания линий и других различных форм. Я смог реализовать это независимо от графического редактора, но приложение состоит исключительно из JPanel, который занимает весь JFrame. Различные подходы, которые я использовал для этого в редакторе GUI, либо генерировали графику, но блокировали все остальное в моем JFrame (даже для крошечной строки), либо вообще ничего не делали.

В идеале я хотел бы иметь возможность разместить JPanel произвольного размера в произвольном месте на моем JFrame и создать графику, которая содержится на панели. Я также хотел бы, чтобы координаты создаваемой мною графики ссылались на JPanel, а не на JFrame (поэтому координата 0,0 - это верхний левый угол моей JPanel независимо от того, где я решил разместить ее.)

Есть ли прямое средство сделать это?

(пример кода будет с благодарностью)

Ответы [ 2 ]

3 голосов
/ 20 октября 2011

Сначала вам нужно будет предоставить класс, расширяющий JPanel, а затем переопределить метод paintComponent, чтобы обеспечить пользовательское рисование графики.

Затем в JFrame вам нужно использовать соответствующий Layout Manager для размещения нескольких компонентов в JFrame. Например, вы можете использовать GridLayout, чтобы разделить Jframe на две равные половины. Один сверху может содержать обычный JPanel с вашими кнопками и элементами управления, а под ним будет ваш собственный JPanel с пользовательской графикой.

Координаты, которые вы используете в paintComponent, будут ссылаться только на JPanel внизу.

Конечно, вы можете использовать более продвинутые менеджеры макетов, чем GridLayout, если вам нужны более конкретные параметры макета.

  • это также можно сделать в netbeans ide, щелкнув правой кнопкой мыши компонент и выбрав «вертикальный» и / или «горизонтальный» в параметре автоматического изменения размера.
0 голосов
/ 20 октября 2011

Ну, вы можете пойти в старую школу, просто и эффективно:

  1. Установить менеджер макета как ноль

    contentPane.setLayout (null);

  2. Реализация открытого метода void doLayout () в вашем классе

например

   public void doLayout () {
      Dimension size      = getSize() ;
      int       x         = wizardImage.getImage().getWidth(this)+10 ;
      int       y         = 5 ;
      int       rowHeight = 18;
      super.doLayout() ;
      st_IMAGE.setBounds ( 5,((size.height-40)/2)-(wizardImage.getImage().getHeight(this)/2), wizardImage.getImage().getWidth(this), wizardImage.getImage().getHeight(this)) ;
      st_EXPORTTYPE.setBounds ( x, y, size.width-(x)-10, rowHeight ) ;
      y+=rowHeight ;
      rb_TAB_DELIM.setBounds ( x, y, size.width-(x)-10-100, rowHeight ) ;
      y+=rowHeight ;
      rb_COMMA_SEPARATED.setBounds ( x, y, size.width-(x)-10-100, rowHeight ) ;
      y+=rowHeight ;
      rb_FLAT_TEXT.setBounds ( x, y, size.width-(x)-10-100, rowHeight ) ;
      y+=rowHeight+10 ;
      pb_EXPORT.setLocation ( x, size.height-75 ) ;
      pb_CANCEL.setLocation ( x+pb_EXPORT.getMinimumSize().width+5, size.height-75 ) ;

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