Terça-feira, Fevereiro 13, 2007

SwingX - JXTaskPane

Use JXTaskPane para agrupar um conjunto de componentes visuais relacionados com uma mesma tarefa. JXTaskPane fornece controle para expandir e retrair o painel de conteúdo.


Geralmente são agrupados num JXTaskPaneContainer. Consulte SwingX - JXTaskPaneContainer (A Container for Task Panels) para entender quais os benefícios de agrupar JXTaskPane's num JXTaskPaneContainer.

JXTaskPane criará automaticamente hyperlinks através do método add(javax.swing.Action action).

JXTaskPane in Action

Segue a porção de código relevante para criar os três JTaskPane's agrupados num JXTaskPaneContainer, como na figura ao lado.

JXTaskPaneContainer taskPaneContainer = new JXTaskPaneContainer();
JXTaskPane tpPrincipal = new JXTaskPane();
JXTaskPane tpCalendario = new JXTaskPane();
JXMonthView monthView = new JXMonthView();
JXTaskPane tpSearchUrl = new JXTaskPane();
JLabel labelURL = new JLabel();
JTextField tfURL = new JTextField();
JButton bGo = new JButton();

// DropShadowBorder faz parte da biblioteca SwingX.
taskPaneContainer.setBorder(new DropShadowBorder());

// Define o título.
tpPrincipal.setTitle("Principal");
// Define o ícone.
tpPrincipal.setIcon(newImageIcon(
...............getClass().getResource("/folder_home.png")));
// Adiciona JXHyperlink's através de subclasses de javax.swing.Action.
tpPrincipal.add(new IrParaHome());
tpPrincipal.add(new IrParaCadastroPedido());
tpPrincipal.add(new IrParaCadastroCompra());
// Coloca tpPrincipal em taskPaneContainer.
taskPaneContainer.add(tpPrincipal);


tpCalendario.setTitle("Calendário");
// Faz com que o JXTaskPane esteja retraído.
tpCalendario.setExpanded(false);
// Adiona JXMonthView, também parte do conjunto de componentes SwingX.
tpCalendario.add(monthView);
taskPaneContainer.add(tpCalendario);

// Apenas um indicador para o UI plugável pintar diferente a área de título do JXTaskPane.
tpSearchUrl.setTitle("Pesquisar na Web");
tpSearchUrl.setSpecial(true);
/*
* Componentes labelURL, tfURL e bGo adicionados através da Matisse do NetBeans.
*
* Isso mostra que ainda é possível trabalhar bem com a Matisse
* mesmo com componentes de terceiros.
*/
taskPaneContainer.add(tpSearchUrl);

Action

Action's são interessantes quando mais de um componentes gráfico executa a mesma função, como pode acontecer com um item de menu e um botão da barra de ferramentas.

Encapsulam num mesmo lugar informações como o texto do menu, ícone pequeno para o menu, ícone grande para a barra de ferramenta, tool tip text e o estado do componente (ativado/desativado).

A classe IrParaHome extende AbstracAction - a implementação padrão da interface Action. Dessa forma, é preciso apenas definir o método actionPerformed() em IrParaHome.

Segue a classe IrParaHome, utilizada no código acima.

public class IrParaHome extends AbstractAction {
.....// Texto que aparece no menu e no hyperlink.
.....private static final String NAME = "Home";
.....private static final String ACTION = "go_home";
.....// Tool tip text.
.....private static final String SHORT_DESCRIPTION = "Mostra a tela principal";
.....private static final Icon SMALL_ICON;

.....static {
..........SMALL_ICON = new ImageIcon(IrParaCadastroPedido.class.getResource(
........................."/simpletest/taskpane/home.png"));
.....}

.....public IrParaHome() {
..........super();
..........putValue(Action.NAME, NAME);
..........putValue(Action.SHORT_DESCRIPTION, SHORT_DESCRIPTION);
..........putValue(Action.ACTION_COMMAND_KEY, ACTION);
..........putValue(Action.SMALL_ICON, SMALL_ICON);
.....}

.....public void actionPerformed(ActionEvent e) {
..........// Lógica de navegação aqui.
.....}
}

Veja também:

Veja outros componentes SwingX em:
Referências:

0 comentários: