<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Melhor maneira de estruturar a GUI"]]></title>
		<link>http://www.guj.com.br/posts/list/12.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Melhor maneira de estruturar a GUI"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Melhor maneira de estruturar a GUI</title>
				<description><![CDATA[ Olá pessoal,<br /> bem, estou construindo uma aplicação relativamente simples para desktop, sem nada de Web ou BD.<br /> Minha duvida é sobre a estrutura que fiz a interface grafica onde tenho JPanel com uma JToolBar uma JTree e um JScrollPane.<br /> Dentro do JScroolPane tenho algumas JTables.<br /> O caso é que a JToolBar tem botoes para adicionar componentes nas celulas da JTable que estiver com o foco, fiz algo assim:<br /> <br /> [botao da JToolBar pressionado] &gt;&gt; [JToolBar chama o metodo addComponent() do JPanel] &gt;&gt; [JPanel chama o metodo addComponent() do ScroolPane] &gt;&gt; [ScroolPane chama o metodo addComponent da JTable atual, a que estiver focada, se nenhuma estiver nao faz nada]<br /> <br /> A idéia com todas essas delegações é diminuir acoplamento e facilitar os teste unitarios (e realmente facilitou), mas gostaria de opinioes dos mais experientes, nao sei se essa arquitetura pode causar problemas no futuro (o sistema ainda vai crescer muito).<br /> <br /> PS. Todas as classes sao implementacoes de interface. DefaultIDETable é implementacao da interface IDETable, isso facilita para fazer os testes com JUnit, pois posso criar outras implementacoes da tabela. Nao sei se vem ao caso.<br /> <br /> --- update<br /> <br /> Deixa eu mostrar um pouco de codigo pra facilitar... :)<br /> <br /> [code]<br /> <br /> // Dentro de cada pacote tem varias classes e interfaces, vou colocar apenas as relativas a pergunta para nao poluir<br /> <br /> ---<br /> <br /> package app.project;<br /> <br /> public interface Project {<br /> <br />   public void addComponent(); // chamado pela toolBar, ou pelo atalho de teclado<br /> <br />   // outros metodos<br /> <br /> }<br /> <br /> class DefaultProject extends JPanel implements Project {<br /> <br />   private final MyTooBar toolBar = new MyToolBar(this);<br />   private TablePane tablePane;<br /> <br />   public void addComponent() {<br />     tablePane.addComponent();<br />   }<br /> <br />   // varios outros metodos e atributos<br /> <br /> }<br /> <br /> // outras classes e interfaces deste pacote<br /> <br /> ---<br /> <br /> package app.project.tablesPane<br /> <br /> public interface TablePane {<br /> <br />   addComponent();<br /> <br />   // outros metodos<br /> <br /> }<br /> <br /> class DefaultTablePane extends JScrollPane implements TablePane {<br /> <br />   private Project parentProject;<br /> <br />   private Vector&lt;MyTable&gt; myTables;<br /> <br />   // inside button's actionPerformed...<br />    parentProject.addComponent();<br /> <br />  // outros metodos e atributos<br /> <br /> }<br /> <br /> // outras classes e interfaces deste pacote<br /> <br /> ---<br /> <br /> package app.project.tablesPane.table;<br /> <br /> public interface MyTable {<br /> <br />  addComponent();<br /> <br />   // outros metodos<br /> <br /> }<br /> <br /> class DefaultMyTable extends JTable implements MyTable {<br /> <br />   // adiciona o componente<br /> <br /> }<br /> <br /> // outras classes e interfaces deste pacote<br /> <br /> ---<br /> <br /> [/code]<br /> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/114556/619370.java</guid>
				<link>http://www.guj.com.br/posts/preList/114556/619370.java</link>
				<pubDate><![CDATA[Fri, 9 Jan 2009 12:00:06]]> GMT</pubDate>
				<author><![CDATA[ wellington7]]></author>
			</item>
			<item>
				<title>Re:Melhor maneira de estruturar a GUI</title>
				<description><![CDATA[  Olhá, achei meio estranho as várias classes terem que "repassar" a mensagem. Para Guis, para esses casos em que elas devem responder a comandos, o padrão Observer é o mais indicado. Basicamente vc cria um Evento que contém as informações que suas UI necessitam, e deixa que cada uma implemente sua própria forma de se atualizar. Assim vc pode implementar várias UI's que encapsulam a responsabilidade de se atualizar.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/114556/619741.java</guid>
				<link>http://www.guj.com.br/posts/preList/114556/619741.java</link>
				<pubDate><![CDATA[Fri, 9 Jan 2009 19:52:12]]> GMT</pubDate>
				<author><![CDATA[ renzonuccitelli]]></author>
			</item>
			<item>
				<title>Melhor maneira de estruturar a GUI</title>
				<description><![CDATA[ Entendo. O padrão observer é criar os listeners, certo? Eu estava fazendo com listeners antes, mas como cada classe tinha apenas 1 objeto como listener eu achei que seria mais interessante passar a classe como "parent" - pai - (alguns vão preferir dizer "owner" - dono) da classe que vem abaixo.. Por exemplo, o Project (JFrame) é o pai do Panel.<br /> Ainda assim, acha que seria melhor usar o Observer?<br /> E, caso sim, concorda que ficaria muito acoplado, já que a JTable precisaria ouvir os eventos da JToolBar que esta 3 níveis acima na hierarquia? JToolBar está em JFrame que contém JPanel que contém (entre outros componentes) JScrollPane e que contem (entre outros componentes) a JTable.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/114556/619819.java</guid>
				<link>http://www.guj.com.br/posts/preList/114556/619819.java</link>
				<pubDate><![CDATA[Sat, 10 Jan 2009 07:21:28]]> GMT</pubDate>
				<author><![CDATA[ wellington7]]></author>
			</item>
			<item>
				<title>Melhor maneira de estruturar a GUI</title>
				<description><![CDATA[ Na verdade... (me veio essa luz agora) Se eu usar essa arquitetura com "parents", eu estou aumentando o acoplamento, e dificultando meus testes unitarios.. Se eu tiver um sistema com listeners, mesmo que cada objeto vá ter apenas 1 listener, eu diminuiria o acoplamento e me livraria de algumas classes extras que precisei criar para os testes..<br /> Entretanto, para o evento da toolBar, a melhor arquitetura (menos acoplada) ainda seria passar um comando addComponent() para o JFrame, e dele descendo para o JPanel, depois o tablesScrollBar e para o JTable que estiver em foco. Concordam?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/114556/619836.java</guid>
				<link>http://www.guj.com.br/posts/preList/114556/619836.java</link>
				<pubDate><![CDATA[Sat, 10 Jan 2009 09:02:21]]> GMT</pubDate>
				<author><![CDATA[ wellington7]]></author>
			</item>
	</channel>
</rss>