UX-дизайн панели параметров Firefox в Java Swing?

Мне нужно создать окно, подобное Firefox > tools > options (показано ниже), используя Java Swing. Мне нужно создать два верхних заголовка. При нажатии каждой из них мне приходится открывать вкладки (то же, что и Firefox > tools > options > advanced. Я новичок в Swing.

введите здесь описание изображения

Спасибо за быстрый ответ. Я попытался реализовать то же самое. Базовым окном является JDialog. На которой я создал верхнюю панель. Панель инструментов (в BorderLayout-North of topPanel) и панель контента (в BorderLayout-Center topPanel) добавляются в эту верхнюю панель. Создаются две кнопки панели инструментов — «общая» и «расширенная», которые являются заголовками, о которых я говорил в своем последнем посте. «Панель контента» — это панель-заполнитель. где я хочу динамически добавлять панели с вкладками всякий раз, когда нажимаются кнопки панели инструментов. И значение по умолчанию является общим.

При нажатии кнопки расширенной панели инструментов я хочу удалить _generalTabbedPane и показать _advanceTabbedPane и наоборот.

Но это не происходит должным образом. Добавление и удаление/скрытие панелей при нажатии кнопки панели инструментов - это то, что мне нужно исправить. Я прикрепил код ниже.

Пожалуйста, помогите.

 @Override
   public JComponent createContentPanel()
  {        
   topPanel  = new JPanel();
   topPanel.setLayout(new BorderLayout());     
   JToolBar toolBar = new JToolBar();
   toolBar.add(new tabButton("general",GENERAL));
   toolBar.add(new tabButton("advanced",ADVANCED));

   contentPanel = new JPanel();       
   contentPanel.add(getGeneralTabs());

   topPanel.add(toolBar, BorderLayout.NORTH);
   topPanel.add(contentPanel, BorderLayout.CENTER);        
   return topPanel;


}  
private  final class JCenterLabel extends JLabel
{       
    public JCenterLabel(final String s)
    {
        super(s);
        setAlignmentX(Component.CENTER_ALIGNMENT);
    }

    public JCenterLabel(final Icon i)
    {
        super(i);
        setAlignmentX(Component.CENTER_ALIGNMENT);
    }
}

private  class tabButton extends JButton
{   
    public tabButton (  String tabId,String actionCommand)
    {
        super();
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));      
        add(new JCenterLabel(UIManager.getIcon("OptionPane.informationIcon"))); 
        add(new JCenterLabel(tabId)); 
        this.setActionCommand(actionCommand);
        this.setName(tabId);
        this.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) { 
            String cmd = e.getActionCommand();
            if (GENERAL.equals(cmd)) { 
                if(contentPanel != null){
                contentPanel.remove(_advanceTabbedPane);     
                contentPanel.add(getGeneralTabs());
                contentPanel.revalidate();
                contentPanel.repaint();


                }

            } else if (ADVANCED.equals(cmd)) { 
                if(contentPanel != null){
                contentPanel.remove(_generalTabbedPane);               
                contentPanel.add(getAdvancedTabs());
                contentPanel.revalidate();
                contentPanel.repaint();


                }
            } 

        }
        });
}
}

  private JideTabbedPane  getGeneralTabs(){
    _generalTabbedPane = new JideTabbedPane();
    _generalTabbedPane.setModel(new TabbedPaneWithValidationModel());
    //adding the tabs to the _generalTabbedPane
    //-----
    //---

    return _generalTabbedPane;


}
  private   JideTabbedPane getAdvancedTabs(){
      _advanceTabbedPane = new JideTabbedPane();
      _advanceTabbedPane.setModel(new TabbedPaneWithValidationModel());
      //adding the tabs to the _advanceTabbedPane
    //-----
    //---
      return _advanceTabbedPane;

  }

person user1071096    schedule 16.04.2013    source источник
comment
См. раздел Как создавать скриншоты? (советы по созданию отличных скриншотов). (Обрезать пустое пространство вокруг изображения!)   -  person Andrew Thompson    schedule 16.04.2013


Ответы (1)


Я вижу JToolBar в BorderLayout.NORTH, JTabbedPane в BorderLayout.CENTER и JPanel с использованием FlowLayout.RIGHT в BorderLayout.SOUTH. BorderFactory может указать границу заголовка.

Приложение: Мне нужно создать два верхних заголовка.

Если вам нужны два верхних заголовка, вы можете добавить два экземпляра JToolBar к JPanel с GridLayout(0, 1), а затем добавить эту панель к BorderLayout.NORTH. См. также этот пример вложенной панели. Используйте Action, чтобы инкапсулировать поведение панели инструментов для пример.

Приложение: При каждом нажатии кнопки расширенной панели инструментов я хочу удалить generalTabbedPane и показать advanceTabbedPane и наоборот.

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

person trashgod    schedule 16.04.2013