Sou iniciante em java, porém quaz tudo que vejo é novo pra mim, e com isso muitas duvidas surgem.
Estou desenvolvendo uma aplicação desktop e de “inicio” fiz um frame principal que possui um jMenu com dois jMenuItem, um para cadastro de cliente e o outro de cadastro de Funcionarios.
Minha duvida é o seguinte, para cada jMenuItem, tenho que criar um novo JFrame? criando um Jframe posso separar uma classe para Cadastro de clientes e outra para cadastro de Funcionarios?, mas se eu criar mais jMenuItem ficaria com muitas janelas e se eu abrir a tela de cadastro de clientes e de cadastro de funcionarios não ficará dentro da frame principal como um jDesktopPane certo? pois se eu minimizar o frame principal as telas abertas náo minimizar correto?
E se eu fizer com jTabbedPane, tipo quando clicar em um jMenuItem ele habilitar um novo jTabbedPane, praticamente todo o codigo fonte ficaria no frame principal correto?
tem como eu criar um novo jTabbedPane para cada tela? por exemplo: uma para cadastro de clientes e uma para cadastro de funcionarios, senão teria que adicionar varios jTabbedPane no frame principa o codigo ficaria todo no frame principal, ou seja ficaria gigante demais.
O que vocês sugerem? como vocês usaria? e se tiver melhora o entedimento.
só um detalhe…cada tela é um novo jframe…(mais vc poderia colocar tudo na mesma janela e ir trocando os elementos, “seria a pior forma possivel”)
como eu disse tudo é possivel, o que vai fazer o sistema funcionar de uma maneira ou de outra é a sua lógica,
pode ser que você siga um padrão existe e sua app nao faça sucesso…
o lance de todo o codigo ficar no frame principal, é uma má pratica…, o correto é que exista classes para tratar as informações, e o Jframe apenas chama os métodos dessas classes…
de uma estudada sobre classes, objetos, DAOs… vai te dar uma clareada…
uma lida na FJ-11 da caelum também é uma boa idéia…
Só se você for trabalhar somente com JFrame. Você pode trabalhar com o JInternalFrame. Mas para trabalhar com JInternalFrame, você precisa trabalhar com o JDesktopPane.
Oi. Sua dúvida é do fórum de interface gráfica. Movi o tópico, mas por favor, leia com atenção a descrição dos fóruns quando for postar.
Se for trabalhar com o JTabbedPane, você cria um JPanel separado para cada tela.
Normalmente, o menu é algo particular de cada tela, e criamos menuItems tela por tela. Até porque, mesmo as opções de menu sejam iguais, teremos comportamentos diferentes em cada tela.
aonde trabalho tem uma seria de telas que usam JInternalFrame ( cadastros, consultas e relatórios), em alguma situações é interessante abrir um JInternalFrame desses com um coportamento de JDialog, dai bolei uma estrutura genérica.
é desenvolvido tudo em cima do JPanel e com umas mandigas de Design Patterns, injeto um comportamento de um JInternalFrame ou de JDialog …
isto pode ser implementado futuramente para JTabbedPane… dai vai da imaginação de cada um
estou implantando isto agora e da dando um trabalha grande para refatorar, mais o resultado vai ser bom
Obrigado ViniGodoy, entendi sobre como separar as telas.
Agora em relação ao que vc havia dito sobre usar um filho de JFrame para configurar o comportamento da janela principal.
Seria dessa forma:
package br.com.neveline.frame;
import javax.swing.JButton;
import javax.swing.JFrame;
import org.dyno.visual.swing.layouts.Constraints;
import org.dyno.visual.swing.layouts.GroupLayout;
import org.dyno.visual.swing.layouts.Leading;
public class FrameComponentes extends JFrame {
private static final long serialVersionUID = 1L;
private JButton jButton0;
public FrameComponentes() {
initComponents();
}
private void initComponents() {
setLayout(new GroupLayout());
add(getJButton0(), new Constraints(new Leading(19, 10, 10), new Leading(33, 10, 10)));
setSize(682, 417);
}
private JButton getJButton0() {
if (jButton0 == null) {
jButton0 = new JButton();
jButton0.setText("jButton0");
}
return jButton0;
}
}
package br.com.neveline.frame;
import javax.swing.SwingUtilities;
import org.dyno.visual.swing.layouts.GroupLayout;
public class Principal extends FrameComponentes {
private static final long serialVersionUID = 1L;
public Principal() {
initComponents();
}
private void initComponents() {
setLayout(new GroupLayout());
setSize(592, 401);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FrameComponentes frame = new FrameComponentes();
frame.setDefaultCloseOperation(Principal.EXIT_ON_CLOSE);
frame.setTitle("Principal");
frame.getContentPane().setPreferredSize(frame.getSize());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Você até pode colocar o método main na mesma classe da tela principal, mas geralmente, o corpo do main fica só com esse setVisible aí.
Seria somente:
public class Principal {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new FrameComponentes().setVisible(true);
}
});
}
}