Olá pessoal, sou novo aqui. Talvez minha dúvida seja simples, porém como estou começando em java tenho muito que aprender.
Estou criando um “sistema” onde quando o usuário clicar em qualquer função, as janelas se abrem em abas, uma ao lado da outra sem fechar nenhuma. Como fazer esse procedimento? E também para cada aba ao lado do nome dela aparecer o X de fechar, para o Usuário fechar individualmente cada aba. A lembrando estou utilizando o NetBeans IDE 8.2
Exemplo:
| Aba Produto [X] | Aba Clientes [X] |
Caso tenham alguma dúvida é só perguntar.
Desde já agradeço a todos!
Uma coisa que eu nunca entendi a respeito de dúvidas desta natureza foi: de onde pessoas “iniciantes” tiram ideias como esta para implementar?
Pois, até onde eu sei (e, sim, eu sei pois já passei por isso), iniciante é o cara que está lá, estudando como a linguagem funciona, desvio condicional, loops, sintaxe da linguagem, palavras reservadas, comportamento OO e etc.
Entendo, também,que o JSE (especificamente desenvolvimento com Java Swing/AWT ou JavaFX) é algo intermediário (requer um certo conhecimento sobre o comportamento da linguagem, sintaxe, OO) e, da mesma maneira, se você é um iniciante, estará aprendendo como funciona o mecanismo de construção de um sistema com/para GUI, os possíveis inputs, formas de validação, os layouts e suas aplicações, componentes e comportamentos diversos.
Com base nisso tudo, posso afirmar que: ou você está pulando etapas ou está mal orientado ou ambos.
Quais as consequências disso?
- Até pode conseguir fazer o que deseja, mas, terá dificuldades em evoluir, terá dúvidas básicas durante o processo de desenvolvimento que tornarão o mesmo lento, dificultoso e suscetível a falhas elementares.
- Frustração: você se sentirá exausto, tentará e tentará e terá resultados ruins ou longe do que desejado. E, se chegar ao resultado desejado, verá que teve que trilhar um caminho muito, mas muito maior que o normal.
- Além disso tudo, terá a tendência de encarar o Java como sendo uma linguagem ruim, difícil de aprender e com um milhão de defeitos, quando, na verdade, o problema é você, que não aprendeu direito, seja por qual razão for.
Com esta pequena introdução, te digo: o projeto não é tão simples (ao menos para quem não desenvolve em java swing/javaFX costumeiramente).
Se estou bem lembrado (eu sou dev java backend, poucas vezes mexi com swing), os JPannel (que se inseridos em um JTabbedPane formam as tais abas que quer) não possuem aquele “X” disponível para fechar (talvez algum projeto que enriqueça o swing tenha, como o Towel, do fantástico Mark Vasconcelos).
Desta maneira, precisamos que você detalhe mais o que quer, como pretende fazer e, se possível, qual o teu real conhecimento em Java Swing/JavaFX para isso.
1 curtida
Olá darlan_machado. Primeiro queria agradecer a sua resposta, e sim sou iniciante, porém estou querendo desenvolver um sistema simples (somente cadastro de clientes) para meu aprendizado mesmo. Conexão com BD PostgreSql já sei fazer. Trabalhar com JDesktopPane, JInternalFrame essas coisas também já sei com funciona. Já consegui por exemplo fazer abrir 1 unica janela na aba (como vc mesmo disse não sei se é a forma correta) Porém não estou conseguindo fazer dessa aba que se abriu, clicar por exemplo em um botão, e essa tela se abrir um uma nova aba (ao lado da que já estava aberta) se a questão de colocar um [X] ao lado no nome na aba é mais complexa, não tem problema me viro com botão fechar mesmo. Se querer tenho um Sistema aqui que é feito em Java e funciona dessa maneira, posso fazer um pequeno vídeo e enviar para ter uma melhor noção.
Se você é iniciante, não perde tempo tentando fazer “janelas em abas com botão fechar” tipo browser, quase ninguém trabalha assim com essa tecnologia que está usando. Faz da forma normal e foque seu aprendizado no que é mais importante. No máximo use JTabbedPane como o @darlan_machado falou.
@javaflex e @darlan_machado , talvez eu não tenha definido bem o que quero. Segue algumas imagens. @javaflex eu não entendi a parte de perder tempo em fazer “abas”, pois acho muito útil no dia a dia do usuário. mas enfim esse não é o foco.
Basicamente é isto que preciso. Quero primeiro fazer a parte Gráfica, depois as linhas de comandos. assim posso ir testando, acho mais fácil o aprendizado.
@lricardomello, o que o @javaflex se refere quando diz isso é que se você é iniciante, partir para algo tão complexo é, sim, perda de tempo.
Ele complementou o que eu disse, afinal, as dificuldades (e são muitas) de fazer algo assim te farão pensar que não foi uma boa ideia.
Pelos prints, sim, é um projeto complexo, grande e que demanda muito tempo e, mais do que isso, conhecimento sobre o desenvolvimento java swing (não apenas lógica e java básico).
Mas, como tudo na vida, há meios de se fazer. Já cogitou estudar java web? Pergunto pois isso pode facilitar (e muito) a implementação de coisas como você quer. Não pela parte java em si (o backend), mas pelas inúmeras tecnologias de frontend que podem ser muito mais simples de se trabalhar (e achar coisas prontas) que o Swing/AWT.
Se já está atendendo usuário, então não entendi ser iniciante. Se for, deveria se preocupar em aprender primeiro o que tem disponível na caixa de ferramentas, antes de chegar nessa parte de componentes customizados. Tem muita coisa importante no caminho antes de chegar nisso. Ou já aprendeu a criar pelo menos um componente simples? O ideal para quem inicia é seguir o direcionamento de livros, apostilas ou no mínimo tutoriais, senão perde tempo com coisas que imagina ser comum através da tecnologia usada.
Nao sei qual seu objetivo com isso, mas ir longe com Swing não vale a pena, além de ser uma tecnologia defasada, desenvolvimento de sistemas de informações para desktop está em baixa.
Veja esse exemplo de implementação, vai ajudar: https://ateraimemo.com/Swing/TabWithCloseButton.html, ou esse https://ateraimemo.com/Swing/RevalidateTabComponent.html.
Indico estudar também o JavaFx, ele te dará mais possibilidades de customização. O componente de abas do FX já tem o botão fechar incluso. Como pode ser visto Aqui
Assim você está desenvolvendo de trás para a frente.
Você está tentando pintar a casa mas ainda não fez o fundamento, nem levantou as paredes nem pôs o telhado.
Dessa forma você vai se “viciar” em más práticas de programação.
2 curtidas
oi @darlan_machado. Cara, gostei muito do seu primeiro comentário. Eu sou curso ADS numa Fatec muito boa, mas é frustrante chegar aqui e perceber que tudo que se ensinam são introduções. Não tem aprofundamento de nada, porém, o que eu mais curti e tento focar é no Java. Porém, é aquela história. Tudo que tenho idéia de fazer, faço trocentas consultas no google. Tenho certeza que meus códigos são pesados e demoro muito pra fazer pouco. Talvez seja normal para estudantes, mas é até meio frustrante.
Olha cara, não quero abusar, espero que vc ainda ande por aqui. Mas pra onde partir para melhorar como dev java?
Na faculdade, o que aprendi foi o POO, basico (mas avancei por conta) do JOptionPane. Por conta, ja mexo razoavelmente (quando digo razoavelmente, quero dizer que sou melhor que meus colegas de sala (quando digo melhor, é que tenho as melhores notas, não que seja melhor que eles)) no WindowBuilder. Nesse momento, estou tentando aprender a conectar em BD, inacreditavelmente, isso foi tópico de 2 aulas e to apanhando um pouco. Sera que poderia listar uns tópicos que um dev tem que dominar?
Poxa, serei muito grato mesmo. Abraços mano.
Não vejo dificuldade nenhuma em fazer isso, mesmo para iniciante.
Mas a pergunta é, você sabe programar ?
Se souber, poderá fazer isso em JavaFX de boa.
usa TabPane
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TabPane;
import javafx.scene.control.Tab;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TabPaneExample extends Application {
public static void main(String[] args) {
launch(args);
}
public void start(Stage primaryStage) {
TabPane tabPane = new TabPane();
Tab tab1 = new Tab("Planes", new Label("Show all planes available"));
Tab tab2 = new Tab("Cars" , new Label("Show all cars available"));
Tab tab3 = new Tab("Boats" , new Label("Show all boats available"));
tabPane.getTabs().add(tab1);
tabPane.getTabs().add(tab2);
tabPane.getTabs().add(tab3);
VBox vBox = new VBox(tabPane);
Scene scene = new Scene(vBox);
primaryStage.setScene(scene);
primaryStage.setTitle("JavaFX App");
primaryStage.show();
}
}
Se quiser fazer com que o (X) de fechar fica sempre visível, isso tambem é bem simples.
Pode usar css e pinta e borda
Se sabe programar e entende os conceitos de OO e deseja aventurar no Java, sem problemas, dá uma olhada na sintaxe, no universo Java e mãos na massa.