【问题标题】:Firefox option pane UX design in Java Swing?Java Swing中的Firefox选项窗格UX设计?
【发布时间】:2013-04-08 08:39:20
【问题描述】:

我需要使用 Java Swing 设计一个类似于Firefox > tools > options(如下所示)的窗口。我必须创建两个顶部标题。单击每个我必须打开选项卡窗格(与Firefox > tools > options > advanced 相同。我对 Swing 非常陌生。

感谢您的快速回复。我已尝试实施相同的操作。 基本窗口是 JDialog。我在其中创建了顶部面板。工具栏(在 topPanel 的 BorderLayout-North 处)和内容面板(在 topPanel 的 BorderLayout-Center 处)被添加到这个顶部面板中。 创建了两个工具栏按钮——“通用”和“高级”,它们是我在上一篇文章中谈到的标题。“contentPanel”是占位符面板。 每当单击工具栏按钮时,我想在其中动态添加选项卡式面板。默认值是通用的。

当单击高级工具栏按钮时,我想删除 _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;

  }

【问题讨论】:

标签: java swing jtabbedpane tabpanel


【解决方案1】:

我在BorderLayout.NORTH 中看到JToolBar,在BorderLayout.CENTER 中看到JTabbedPane,在BorderLayout.SOUTH 中看到JPanel 使用FlowLayout.RIGHTBorderFactory 可以提供标题边框。

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

如果您需要两个顶部标题,您可以将JToolBar 的两个实例添加到具有GridLayout(0, 1)JPanel,然后将该面板添加到BorderLayout.NORTH。另请参阅此嵌套面板 example。使用Action 封装您的工具栏行为,用于example

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

可以使用CardLayout(显示为here)来完成此操作。更好的方法可能是让每个选项卡的抽象父级实现suitable interface method,例如setAdvanced()。默认值什么都不做,但一些具体的实现可以做出相应的响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2012-01-02
    • 2011-10-21
    相关资源
    最近更新 更多