FXX Posted August 16, 2012 at 08:57 AM Report Share #472414 Posted August 16, 2012 at 08:57 AM Bom dia, Tenho uma dúvida que ainda não consegui esclarecer após várias pesquisas. É a primeira vez que estou a desenvolver uma aplicação Java com GUI. Para já tenho uma JFrame com uma JMenuBar com diversas opções que mostraram opções de configuração da aplicação em si. A minha dúvida é se após clicar numa opção da barra de menus deva mostrar os controlos (labels, caixas de texto e botões) num JPanel ou noutro JFrame. Agradeço se me poderem ajudar. Link to comment Share on other sites More sharing options...
AJBM Posted August 16, 2012 at 09:29 AM Report Share #472417 Posted August 16, 2012 at 09:29 AM (edited) Boas! Num JPanel Edited August 16, 2012 at 09:29 AM by AJBM Link to comment Share on other sites More sharing options...
Guest skinie18 Posted August 16, 2012 at 10:06 AM Report Share #472424 Posted August 16, 2012 at 10:06 AM (edited) Na interface gráfico o que te permive fazer X quando se clica em Y chama-se eventos. Exemplo que eu fiz: import java.awt.BorderLayout; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class AprenderEventos extends JFrame{ private JButton bt1, bt2; private JPanel panel_a, panel_b; public AprenderEventos(){ // -- criar os butoes -- bt1 = new JButton("BT 1"); bt2 = new JButton("BT 2"); // -- adicionalos ao painel -- panel_a = new JPanel(); panel_b = new JPanel(); panel_a.add(bt1); panel_a.add(bt2); // -- Defenir quem vai tratar os eventos dos botoes -- Eventos ev = new Eventos(); bt1.addActionListener(ev); bt2.addActionListener(ev); // -- adicionar ao painel um componente a sorte -- panel_b.add(new JLabel("Teste aparece")); // -- o painel b vai estar desactivado no inicio do programa -- panel_b.setVisible(false); // -- Adicionar os paineis a janela um no centro outro no fundo -- add(BorderLayout.CENTER, panel_a); add(BorderLayout.SOUTH, panel_b); // -- tornar a janela visivel e com tamanho 200,100 -- setVisible(true); setSize(200,100); } private class Eventos implements ActionListener{ Object obj; @Override public void actionPerformed(ActionEvent ae) { // -- ae devolve o objecto que foi clicado e eu guardo-o em obj -- obj = ae.getSource(); // -- se eo objecto que foi clicado foi o bt1 -- if(obj == bt1){ panel_b.setVisible(true); }else{ // -- se for outro componenete qualquer -- panel_b.setVisible(false); } } } public static void main(String[] args) { new AprenderEventos(); } } Edited August 16, 2012 at 12:28 PM by skinie18 Link to comment Share on other sites More sharing options...
FXX Posted August 16, 2012 at 11:09 AM Author Report Share #472432 Posted August 16, 2012 at 11:09 AM Antes demais agradeço as duas respostas. Então no caso de eu ter por exemplo 5 painéis, cada vez que quero mostrar um painel passo-o para visível (setVisivel(true)) e os outros 4 para "invisíveis" (setVisible(false)), uma vez que não sei qual dos painéis estava visível. É assim? Link to comment Share on other sites More sharing options...
Guest skinie18 Posted August 16, 2012 at 12:27 PM Report Share #472433 Posted August 16, 2012 at 12:27 PM Antes demais agradeço as duas respostas. Então no caso de eu ter por exemplo 5 painéis, cada vez que quero mostrar um painel passo-o para visível (setVisivel(true)) e os outros 4 para "invisíveis" (setVisible(false)), uma vez que não sei qual dos painéis estava visível. É assim? Exacto! Link to comment Share on other sites More sharing options...
jpedro20 Posted August 16, 2012 at 01:08 PM Report Share #472438 Posted August 16, 2012 at 01:08 PM Antes demais agradeço as duas respostas. Então no caso de eu ter por exemplo 5 painéis, cada vez que quero mostrar um painel passo-o para visível (setVisivel(true)) e os outros 4 para "invisíveis" (setVisible(false)), uma vez que não sei qual dos painéis estava visível. É assim? O método que penso que seja mais apropriado é o uso de CardLayout. http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html Link to comment Share on other sites More sharing options...
AJBM Posted August 16, 2012 at 01:48 PM Report Share #472448 Posted August 16, 2012 at 01:48 PM Boas! FXX nao devias estar já a pensar em fazer com varios Jpanel,como é a tua primeira aplicação gráfica faz apenas uma calculadora, é simples de fazer e já ficas com uma ideia de como se programa orientado a eventos. Link to comment Share on other sites More sharing options...
Guest skinie18 Posted August 16, 2012 at 02:06 PM Report Share #472451 Posted August 16, 2012 at 02:06 PM (edited) O método que penso que seja mais apropriado é o uso de CardLayout. http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html Sim por acaso nao tinha pensado nisso mas sim, esse é o método mais apropriado no entanto para quem esta a aprender interface gráfica agora é capaz de ficar meio confuso com o CardLayout. FXX nao sei se sabes mas cada Panel ou Frame tem um layout, acho que por defeito o dos paines é FlowLayout e o dos Frames é BorderLayout. Cada layout tem as suas propriedades. O que o jpedro20 esta a propor é criares um Painel com o CardLayout, o card layout permite-te guardar vários cartoes (varios paineis) dentro de um só e podes fazer o switch entre os paineis a qualquer altura do codigo. SIMPLIFICANDO. é como que adicionares os teus 5 painéis dentro de um livro e quando queres mostrar um deles dizes a pagina que queres que o livro abra e ele abre essa pagina, e podes a qualquer momento mudar para outra pagina. O código que te mandei a pouco mas aplicando a filosofia do CardLayout: import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class AprenderEventos extends JFrame { private JButton bt1, bt2, bt3; private JPanel panel_buttons, panel_main, panel_1, panel_2, panel_3; private CardLayout cl; public AprenderEventos() { // -- criar os butoes -- bt1 = new JButton("BT 1"); bt2 = new JButton("BT 2"); bt3 = new JButton("BT 3"); // -- inicializar paineis -- cl = new CardLayout(); panel_buttons = new JPanel(); panel_main = new JPanel(cl); panel_1 = new JPanel(); panel_2 = new JPanel(); panel_3 = new JPanel(); // -- Adicionar componentes -- panel_buttons.add(bt1); panel_buttons.add(bt2); panel_buttons.add(bt3); panel_1.add(new JLabel("Painel 1")); panel_2.add(new JLabel("Painel 2")); panel_3.add(new JLabel("Painel 3")); panel_main.add(panel_1, "pp"); panel_main.add(panel_2, "ss"); panel_main.add(panel_3, "tt"); // -- Defenir quem vai tratar os eventos dos botoes -- Eventos ev = new Eventos(); bt1.addActionListener(ev); bt2.addActionListener(ev); bt3.addActionListener(ev); // -- o painel main vai estar desactivado no inicio do programa -- panel_main.setVisible(false); // -- Adicionar os paineis a janela um no centro outro no fundo -- add(BorderLayout.CENTER, panel_buttons); add(BorderLayout.SOUTH, panel_main); // -- tornar a janela visivel e com tamanho 300,100 -- setVisible(true); setSize(300, 100); } private class Eventos implements ActionListener { Object obj; @Override public void actionPerformed(ActionEvent ae) { // -- ae devolve o objecto que foi clicado e eu guardo-o em obj -- obj = ae.getSource(); // -- Caso seja carregado em algum dos botoes os paineis ficam visiveis -- panel_main.setVisible(true); // -- se eo objecto que foi clicado foi o bt1 -- if (obj == bt1) { cl.show(panel_main, "pp"); } else if (obj == bt2) { cl.show(panel_main, "ss"); } else { cl.show(panel_main, "tt"); } } } public static void main(String[] args) { new AprenderEventos(); } } Edited August 16, 2012 at 02:09 PM by skinie18 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now