Java Swing中的Firefox选项窗格UX设计?
我需要使用JavaSwing设计一个类似于Firefox > tools > options
(如下所示)的窗口。我必须创建两个顶部标题。点击每一个按钮,我就必须打开选项卡窗格(与Firefox > tools > options > advanced
相同)。我对Swing几乎是新手
谢谢你的快速回复。我也尝试过实现同样的功能。 基本窗口是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 楼答案
我在{a2}中看到一个{a1},在{}中看到一个{a3},在{}中看到一个{}使用{}^{} 可以提供有标题的边框
附录:我必须创建两个顶部标题
如果需要两个顶部标题,可以将两个} 封装工具栏行为,例如example
JToolBar
实例添加到一个JPanel
具有GridLayout(0, 1)
,然后将该面板添加到BorderLayout.NORTH
。另请参见此嵌套面板example。使用^{附录:每当点击高级工具栏按钮时,我想删除
generalTabbedPane
并显示advanceTabbedPane
,反之亦然你可以使用^{} ,如图所示here来实现这一点。更好的方法可能是让每个选项卡的抽象父级实现一个suitable interface method,例如
setAdvanced()
。默认设置不会起任何作用,但一些具体的实现可以相应地做出响应