1

Firefox > tools > optionsJava Swing を使用して (以下に示す)に似たウィンドウを設計する必要があります。トップヘッダーを 2 つ作成する必要があります。それぞれをクリックすると、タブ付きペインを開く必要があります(と同じFirefox > tools > options > advancedです。私はSwingにほとんど慣れていません。

ここに画像の説明を入力

迅速な返信ありがとうございます。私は同じことを実装しようとしました。ベース ウィンドウは JDialog です。ツールバー (topPanel の BorderLayout-North にある) とコンテンツ パネル (topPanel の BorderLayout-Center にある) がこのトップ パネルに追加されます。「一般」と「詳細」の 2 つのツールバー ボタンが作成されます。これは、前回の投稿で説明したヘッダーです。「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;

  }
4

1 に答える 1

5

JToolBarin 、in BorderLayout.NORTH、using in が表示 されます。タイトル付きボーダーを提供できます。JTabbedPaneBorderLayout.CENTERJPanelFlowLayout.RIGHTBorderLayout.SOUTHBorderFactory

補遺:トップ ヘッダーを 2 つ作成する必要があります。

トップ ヘッダーが2 つ必要な場合は、 のインスタンスを 2 つ追加JToolBarJPanelGridLayout(0, 1)、そのパネルを に追加しBorderLayout.NORTHます。このネストされたパネルのも参照してください。たとえばAction、ツールバーの動作をカプセル化するために使用します。

補遺:高度なツールバー ボタンがクリックされるたびに、 を削除して generalTabbedPane を表示したい、 advanceTabbedPane またはその逆を行いたい。

これを行うには、ここに示すを使用できます。より良いアプローチは、各タブの抽象的な親に適切なインターフェイス メソッドを実装させることです。デフォルトは何もしませんが、いくつかの具体的な実装はそれに応じて応答できます。CardLayoutsetAdvanced()

于 2013-04-16T04:12:10.067 に答える