JXTipOfTheDay é a implementação de uma técnica bastante comum para ajudar novos usuários a conhecer um aplicativo. Consiste num painel ou caixa de diálogo com dicas (tips) para ajudar os usuários a descobrir recursos interessantes, aumentar sua produtividade e tirar o melhor proveito desse aplicativo.
Geralmente, conta com a opção de mostrar ou não a dica do dia - do inglês tip of the day - a cada inicialização do software.
Os tips podem ser definidos direto no código-fonte do software (hard-code), ou através de um arquivo de propriedade.
JXTipOfTheDay in Action (1)
A classe JXTipOfTheDayTest mostra uma caixa de diálogo com as dicas definidas diretamente no código-fonte.
public class JXTipOfTheDayTest {
.....private static JXTipOfTheDay tipOfTheDay;
.....private JXTipOfTheDayTest() {
..........super();
..........tipOfTheDay = new JXTipOfTheDay(loadModel());
.....}
.....private TipOfTheDayModel loadModel() {
..........final List tips = Arrays.asList(
.........................new DefaultTip("Tip1", "Alguma dica aqui!"),
.........................new DefaultTip("Tip2", "Outra dica..."),
.........................new DefaultTip("Tip3", "Última... acho que já é o suficiente."));
..........return new DefaultTipOfTheDayModel(tips);
.....}
.....public static void main(String args[]) {
..........java.awt.EventQueue.invokeLater(new Runnable() {
...............public void run() {
....................new JXTipOfTheDayTest();
....................tipOfTheDay.showDialog(null);
...............}
..........});
.....}
}
JXTipOfTheDay in Action (2)
A melhor opção pode ser definir tips num arquivo de propriedade.
A classe TipOfTheDay abaixo procura pelas dicas no arquivo tip.properties, armazena a escolha do usuário para mostrar ou não o diálogo na próxima inicialização do aplicativo em Preferences e mostra o diálogo Tip of the Day.
/**
* Creates the Tip of the Day dialog.
* @author Rafael Fiume
*/
public final class TipOfTheDay {
.....private static JXTipOfTheDay tipOfTheDay;
.....private TipOfTheDay() {
..........super();
.....}
.....public static void show(final Component parentComponent) {
..........final Preferences userPreferences = Preferences.userRoot().node("ModelMat");
..........create().showDialog(parentComponent, userPreferences);
.....}
.....public static void show(final Component parentComponent, final boolean force) {
..........final JXTipOfTheDay tip = create();
..........final Preferences userPreferences = Preferences.userRoot().node("ModelMat");
..........if (force) {
...............tip.forceShowOnStartup(userPreferences);
..........}
..........tip.showDialog(parentComponent, userPreferences, force);
.....}
.....private static JXTipOfTheDay create() {
..........if (tipOfTheDay == null) {
...............final Properties prop = new Properties();
...............final InputStream input = TipOfTheDay.class.
..............................getResourceAsStream("/org/modelmat/gui/helper/tip.properties");
...............try {
....................prop.load(input);
...............} catch (IOException ex) {
....................ex.printStackTrace();
....................return null;
...............}
...............final TipOfTheDayModel model = TipLoader.load(prop);
...............tipOfTheDay = new JXTipOfTheDay(model);
...............return tipOfTheDay;
..........}
..........return tipOfTheDay;
.....}
}
Os tips escritos no aquivo de propriedades devem seguir o padrão abaixo:
# Pode-se usar tags html no texto da descrição.
tip.1.description=You can modify the columns names. To do that, select Sheet -> Edit Column Name.
tip.2.description=Currently, ModelMat can do only the simplest linear and non-linear regression.
tip.3.name=Tip's Name - Opcional
tip.3.description=This project is subdivided in two parts: the core system and the graphical user interface.
Finalmente, o método main na classe principal chama show, em TipOfTheDayFactory, para mostrar as dicas ao usuário.
/**
* Classe principal em Main.java.
*/
public static void main(final String args[]) {
.....java.awt.EventQueue.invokeLater(new Runnable() {
..........public void run() {
...............try {
....................UIManager.setLookAndFeel(new Plastic3DLookAndFeel());
...............} catch (UnsupportedLookAndFeelException ex) {
....................ex.printStackTrace();
...............}
...............final ModelMat mm = new ModelMat();
...............mm.setVisible(true);
...............TipOfTheDay.show(mm);
..........}
.....});
}
Veja outros componentes SwingX em:
Referências:
Quarta-feira, Fevereiro 07, 2007
SwingX - JXTipOfTheDay
Assinar:
Postar comentários (Atom)

2 comentários:
Tá bom, tá bom... já estou convencido de que esses componentes do SwingX são massa! :D
Que bom, Daneil!
Pode esperar que vem mais por aí.
Postar um comentário