Получить содержимое Java Swing Component - PullRequest
1 голос
/ 22 июня 2011

Мне нужно получить содержимое компонента JPanel (одна из вкладок), который входит в состав JTabbedPane.Из класса, в котором определен JTabbedPane, есть прослушиватель событий, который получает текущую выбранную вкладку (при изменении состояния).

Вот пример кода:

...
Component tab = jTabbedPane1.getSelectedComponent();
...

Мне нужно получить все компоненты в этомвкладка.Например:

Component[] comps = tab.getComponents(); // obviously it didn't work

Мне это нужно, потому что я должен отключить / включить некоторые кнопки в зависимости от прав пользователя.

Ответы [ 2 ]

3 голосов
/ 22 июня 2011

Лучше использовать свой собственный класс с кнопками в качестве полей, а затем иметь возможность напрямую получать ссылки на кнопки, удерживаемые компонентами, или, что еще лучше, иметь возможность взаимодействовать с общедоступными методами-мутаторами, которые могут изменять состояние кнопок для вас (вы хотите предоставить как можно меньше информации внешнему миру - чтобы инкапсулировать вашу информацию), что-то вроде:

// assuming the JButtons are in an array
public void setButtonEnabled(int buttonIndex, boolean enabled) {
   buttonArray[buttonIndex].setEnabled(enabled);
}

Или тот же пример, если кнопки находятся в HashMap, в которой в качестве ключа используется текст кнопки String:

// assuming the JButtons are in an hashmap
public void setButtonEnabled(String buttonMapKey, boolean enabled) {
   JButton button = buttonMap.get(buttonMapKey);
   if (button != null) {
      button.setEnabled(enabled);
   }

}

Кроме того, ваш код предполагает, что вы используете NetBeans для создания кода Swing. Я предлагаю вам избегать этого до тех пор, пока вы полностью не поймете Swing, вместо этого вы будете использовать учебные пособия, которые помогут вам научиться создавать Swing вручную, поскольку это даст вам гораздо лучшее понимание основ Swing. Позже, когда вы хорошо это поймете, конечно, используйте программное обеспечение для генерации кода, чтобы ускорить время разработки, только теперь вы будете знать, что он делает под поверхностью, и вы сможете лучше его контролировать.

Удача!

1 голос
/ 22 июня 2011

Я бы инкапсулировал эту логику в панель.

Как насчет расширения JPanel для создания RoleAwareButtonPanel, который содержит ваши кнопки.Затем вы могли бы передать какой-то объект Role и иметь соответствующие кнопки включения / выключения на панели.

class Role {
  private boolean canCreate;
  private boolean canEdit;
  //etc...

  //getters and setters
}

class RoleAwareButtonPanel extends JPanel {

  private JButton createButton;
  private JButton editButton;

  //other stuff you need for your panel

  public void enableButtonsForRole(Role role) {
    createButton.setEnabled(role.canCreate());
    editButton.setEnabled(role.canEdit());
  }

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