Java Swing中的Firefox选项窗格UX设计?

use*_*096 1 java swing tabpanel jtabbedpane

我需要Firefox > tools > options使用Java Swing 设计一个类似于(如下所示)的窗口.我必须创建两个顶部标题.点击每个我必须打开tabbedpanes(相同Firefox > tools > options > advanced.我对Swing来说几乎是新手.

在此输入图像描述

感谢您的快速回复.我尝试过这样做.基本窗口是JDialog.我创建了顶部面板的Whithin.工具栏(在topPanel的BorderLayout-North)和内容面板(在topPanel的BorderLayout-Center)添加到此顶部面板中.创建了两个工具栏按钮 - "general"和"advanced",它们是我在上一篇文章中讨论过的标题."contentPanel"是占位符面板.我想在每次点击工具栏按钮时动态添加选项卡式面板.默认为通用.

Whenevr点击了高级工具栏按钮,我想删除_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;

  }
Run Code Online (Sandbox Code Playgroud)

tra*_*god 5

我看到JToolBarBorderLayout.NORTH,一个JTabbedPaneBorderLayout.CENTERJPanel使用FlowLayout.RIGHTBorderLayout.SOUTH.BorderFactory可以提供标题边框.

附录:我必须创建两个顶部标题.

如果您需要2个顶部集,你可以添加的两个实例JToolBarJPanelGridLayout(0, 1),然后添加面板BorderLayout.NORTH.另请参见此嵌套面板示例.使用Action封装工具栏的行为,为例子.

附录:每当单击高级工具栏按钮时,我想删除 generalTabbedPane 并显示 advanceTabbedPane ,反之亦然.

可以使用此处CardLayout显示的方法来完成此操作.更好的方法可能是让每个标签的抽象父类实现一个合适的接口方法,例如.默认设置不执行任何操作,但某些具体实现可以相应地做出响应setAdvanced()