Testando o OpenSwing
Um amigo meu me falou de um framework que ele ouviu falar muito bem para aplicações desktops chamando OpenSwing. Fiquei curioso e resolvi testar. Segundo o site, o OpenSwing é um conjunto de componentes gráficos avançados de código aberto baseados no Swing. Além disso, é um framework com suporte a binding entre o modelo de dados e componentes baseado em MVC. Parece promissor.
Baixei o Netbeans 6.8 completo (as versões 6.9.x e 7.0 estão com problemas ao editar a parte gráfica) e o framework. Instalei o Netbeans e descompactei o OpenSwing. Apesar da versão no site ser recente, a documentação está bastante desatualizada. O Netbeans utilizado na documentação é o 4.1… muito antigo. Pela especificação, os componentes seguem os padrões JavaBeans, portanto creio que não deva ser um problema para todas as versões do Netbeans e outras IDEs. Vamos aos passos para configuração.
Inicie o Netbeans, crie um novo projeto: clique em File, New Project, Java Application, Next. Eu não selecionei o Java Desktop Application porque ele utiliza o Swing Application Framework JSR-296 (não é o Swing!). Esse framework está inativo pela JCP. Em Project Name, coloque um nome, no meu caso coloquei: TestOpenSwing. Desmarque a opção de criar uma classe Main (Create Main Class). Clique em Finish.
Selecione Tools, Libraries, New Library. Coloque um nome, como OpenSwing e pressione OK. Clique em Add JAR/Folder. Selecione todos os jars da pasta build do OpenSwing e pressione OK.
Biblioteca configurada! Agora vamos adicionar os componentes à palheta. Selecione Tools, Palette, Swing/AWT Components. Clique em New Category e nomeie: OpenSwing. Selecione a categoria criada e clique Add from Library. Selecione OpenSwing, Next, marque todos, Next, selecione OpenSwing, Finish e Close.
Outra configuração recomendada é alterar o comportamento do designer do Netbeans ao trabalhar com grid control. Para isso, selecione Tools, Options, Miscellaneous, GUI Builder, Altere o Layout Generation Style para Standard Java 6 Code e pressione OK. Configurações na IDE feitas, vamos à configuração do Projeto e criação de uma aplicação exemplo. Clique com o botão direito no seu projeto, Properties, Libraries, Add Library, OpenSwing, Add Library, Ok.
Vamos criar um frame MDI. Para isso é necessário criar uma classe que implemente a interface MDIController e pronto. Segue o código e o screenshot abaixo:
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import org.openswing.swing.internationalization.java.BrazilianPortugueseOnlyResourceFactory;
import org.openswing.swing.internationalization.java.Language;
import org.openswing.swing.mdi.client.ClientFacade;
import org.openswing.swing.mdi.client.MDIController;
import org.openswing.swing.mdi.client.MDIFrame;
import org.openswing.swing.mdi.java.ApplicationFunction;
import org.openswing.swing.tree.java.OpenSwingTreeNode;
import org.openswing.swing.util.client.ClientSettings;
/**
* Sample App
* @author Thiago Galbiatti Vespa
*/
public class MainApplicationMDI implements MDIController {
public MainApplicationMDI() {
try {
Properties props = System.getProperties();
ClientSettings clientSettings = new ClientSettings(new BrazilianPortugueseOnlyResourceFactory(props, false), new Hashtable());
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
MDIFrame mdi = new MDIFrame(this);
} catch (ClassNotFoundException ex) {
Logger.getLogger(MainApplicationMDI.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(MainApplicationMDI.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(MainApplicationMDI.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(MainApplicationMDI.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void afterMDIcreation(MDIFrame frame) {
}
public String getAboutImage() {
return null;
}
public String getAboutText() {
return "Esse software foi feito por Thiago Galbiatti Vespa\n"
+ "para demonstrar o uso do Open Swing";
}
public DefaultTreeModel getApplicationFunctions() {
DefaultMutableTreeNode root = new OpenSwingTreeNode();
DefaultTreeModel model = new DefaultTreeModel(root);
ApplicationFunction node1 = new ApplicationFunction("Primeira função", "primeira", "men.gif", null, "Esse botão executa a primeira função");
ApplicationFunction node2 = new ApplicationFunction("Segunda função", "segunda", "appicon.gif", null, "Esse botão executa a segunda função");
ApplicationFunction node2_1 = new ApplicationFunction("Função interna", "interna", "men.gif", null, "Esse botão executa a função interna");
node2.add(node2_1);
root.add(node1);
root.add(node2);
return model;
}
public ClientFacade getClientFacade() {
throw new UnsupportedOperationException("Not supported yet.");
}
public int getExtendedState() {
return JFrame.MAXIMIZED_BOTH;
}
public ArrayList getLanguages() {
ArrayList list = new ArrayList();
list.add(new Language("PT_BR", "Português do Brasil"));
return list;
}
public String getMDIFrameTitle() {
return "Aplicação Exemplo do Open Swing";
}
public void stopApplication() {
System.exit(0);
}
public boolean viewChangeLanguageInMenuBar() {
return true;
}
public boolean viewFileMenu() {
return true;
}
public boolean viewFunctionsInMenuBar() {
return true;
}
public boolean viewFunctionsInTreePanel() {
return true;
}
public JDialog viewLoginDialog(JFrame parentFrame) {
return null;
}
public boolean viewLoginInMenuBar() {
return false;
}
public boolean viewOpenedWindowIcons() {
return true;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MainApplicationMDI();
}
});
}
}
Esse é um exemplo simples, para exemplos completos, consulte a pasta srcdemo do OpenSwing.













