有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我需要使用JavaSwing设计一个类似于Firefox > tools > options(如下所示)的窗口。我必须创建两个顶部标题。点击每一个按钮,我就必须打开选项卡窗格(与Firefox > tools > options > advanced相同)。我对Swing几乎是新手

enter image description here

谢谢你的快速回复。我也尝试过实现同样的功能。 基本窗口是JDialog。我创造了顶部的面板。工具栏(位于topPanel以北的BorderLayout)和内容面板(位于topPanel的BorderLayout中心)将添加到此顶部面板中。 创建了两个工具栏按钮——“general”和“advanced”,这是我在上一篇文章中提到的标题。“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;

  }

共 (1) 个答案

  1. # 1 楼答案

    我在{a2}中看到一个{a1},在{}中看到一个{a3},在{}中看到一个{}使用{}^{}可以提供有标题的边框

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

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

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

    你可以使用^{},如图所示here来实现这一点。更好的方法可能是让每个选项卡的抽象父级实现一个suitable interface method,例如setAdvanced()。默认设置不会起任何作用,但一些具体的实现可以相应地做出响应