LuisMendes330 Posted June 5, 2013 at 10:47 AM Report #511105 Posted June 5, 2013 at 10:47 AM Bom dia pessoal Tou com dúvidas em como preencher um campo do tipo TextField. Eu tenho um método que retorna um inteiro: public int nFatSetor(String set){ //13.1. Número total de facturas registadas por sector de actividade/ int contador=0; for(int i=0;arrayFaturas.size()>0;i++){ if(arrayFaturas.get(i).equals(set)){ contador++; } } return contador; } e quero colocar o resultado aqui: private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) { } Alguém me consegue ajudar? Obrigado!
Knitter Posted June 5, 2013 at 11:03 AM Report #511108 Posted June 5, 2013 at 11:03 AM Boas, O método actionPerformed é executado quando alguém carrega na tecla Enter dentro do campo de texto, é mesmo nesse caso que queres alterar o valor do campo? De qualquer modo, fazer a alteração não é mais que invocar o método setText com o valor que pretendes, convertido para String. private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) { jTextField1.setText(<valor a colocar, pode vir da chamada ao outro método ou de uma variável qualquer>); }
LuisMendes330 Posted June 5, 2013 at 11:11 AM Author Report #511111 Posted June 5, 2013 at 11:11 AM Boas Knitter, obrigado pela ajuda. Mas o que eu quero é que o resultado seja apenas apresentado sem qualquer ação do utilizador... Já tentei invocar o método fazendo [(Nome da classe).(método a usar)], mas apenas aparecem os métodos do tipo ArrayList e booleanos. Não aparece este nFatSet que retorna um inteiro...
Knitter Posted June 5, 2013 at 11:19 AM Report #511114 Posted June 5, 2013 at 11:19 AM <Nome da Class>.<nome do método> só funciona para métodos estáticos, coisa que esse método não é, sendo esse um método de instância precisas de ter uma instância. Não percebi a parte de "sem qualquer ação do utilizador", alguém, algures, tem de executar alguma coisa que faça esse método ser invocado. Podes explicar melhor o que pretendes?
LuisMendes330 Posted June 5, 2013 at 11:33 AM Author Report #511119 Posted June 5, 2013 at 11:33 AM Como posso saber se o método deve ser estático ou não?Eu tou a guardar faturas numa arraylist e depois quero consultar essas faturas através deste método. Clicando num Button o programa abre outra Frame onde deverá ter estatísticas dentro do campo de texto...
Knitter Posted June 5, 2013 at 11:45 AM Report #511122 Posted June 5, 2013 at 11:45 AM Tipicamente um método não deve ser estático, apenas métodos que façam sentido no contexto da classe e não das suas instâncias é que são estáticos. Dado que não sei como tens o código posso estar a induzir em erro, mas assumo que essa lista onde tens as facturas está numa frame (chamemos-lhe principal), e que queres passar esses dados para uma segunda frame, nesse caso na construção da segunda frame passas uma referência para a frame principal. Na frame principal colocas os métodos necessários para aceder aos dados (neste caso à lista de facturas). A sequência será algo como: Utilizador pressiona o botão, a segunda frame é criada e recebe a referência para a frame principal Durante a construção a segunda frame invoca o método da frame principal que lhe devolva os dados necessários (facturas) A segunda frame fica com uma cópia desses dados e usa os dados para preencher os componentes (caixas de texto, listagens, etc) Mas a melhor resposta que te posso dar, dado que me parecem estar a falhar alguns conceitos básicos 😉, é leres um pouco mais sobre programação orientada por objectos, talvez começando por aqui https://wiki.portugal-a-programar.pt/dev_geral/java/tutorial/ Uma nota, uma aplicação Java deve ter apenas uma JFrame, dificilmente existe motivo para uma segunda JFrame instanciada na mesma aplicação, caso pretendas usar uma segunda janela podes e deves usar uma JDialog. Assim terás uma JFrame que é a janela principal da tua aplicação e tantas JDialogs quantas necessário para as restantes janelas que precisas mostrar. Uma JFrame é um componente algo pesado para estar a ser criado sempre que se precisa de uma janela. 1 Report
LuisMendes330 Posted June 5, 2013 at 12:06 PM Author Report #511128 Posted June 5, 2013 at 12:06 PM Não consegui perceber muito bem a parte de fazer a cópia... Eu tenho uma classe chamada Fatura que cria objectos do tipo fatura (nome, nif, nº fatura.,etc). Depois tenho a classe ListaFatura que tem um método para adicionar objectos do tipo fatura, métodos para gerar estatisticas etc...colocadas num arraylist e gravada byte a byte num ficheiro txt (streaminput). Depois tenho um outro package com a interface gráfica com vários JFrames...Vou seguir esse teu conselho e usar JDialog então.
Knitter Posted June 5, 2013 at 12:08 PM Report #511130 Posted June 5, 2013 at 12:08 PM Só precisas passar a instância (estou a assumir que tens uma instância), da classe ListaFactura para todas as janelas onde vais precisar de aceder aos dados das facturas, ou então, passar a instância da frame principal e ter na frame principal um método que devolva a lista de facturas.
LuisMendes330 Posted June 5, 2013 at 12:20 PM Author Report #511131 Posted June 5, 2013 at 12:20 PM Eu apenas crio a instancia quando o programa já ta a correr.Inicialmente a ListaFaturas está vazia... PS:Eu não tou a perceber a tua expressão frame...Eu tenho os meus métodos em classes.A interface gráfica apenas recebe os métodos que tao nas classes certo?
Knitter Posted June 5, 2013 at 05:23 PM Report #511203 Posted June 5, 2013 at 05:23 PM Saca o demo que está aqui, http://www.wuala.com/Knitter/public/ acho que é mais simples explicar assim, se é que ainda não encontraste uma solução.
LuisMendes330 Posted June 5, 2013 at 07:38 PM Author Report #511214 Posted June 5, 2013 at 07:38 PM (edited) Obrigadao Knitter, não precisavas de te dar a esse trabalho mas obrigado na mesma. Tenho outra dúvida que preciso de a tirar para resolver este problema... É o seguinte, eu quando tou a criar a fatura(a inserir os dados) tenho lá o tipo da fatura.Se é uma fatura de reparação de automóveis , se é do tipo de beleza pessoal, etc. Estes tipos tão num JComboBox...Ora eu queria que na fatura ficasse gravado o tipo. Eu tava a pensar em atribuir a uma variável um valor que irá ser dado em função da JComboBox. Porque eu no método acima nFatSet tenho que lhe dar um valor, mas não sei que valor lhe dar... EDIT: Eu no meu método construtor de faturas não uso nenhuma variável que indique qual será o setor. Tenho de a inserir lá certo? Não declaro valor certo?Este só deverá ser declarado consoante a escolha do JComboBox...? Edited June 5, 2013 at 07:43 PM by LuisMendes330
Knitter Posted June 5, 2013 at 07:43 PM Report #511215 Posted June 5, 2013 at 07:43 PM não precisavas de te dar a esse trabalho mas obrigado na mesma. Foram 5 minutos de intervalo 🙂 Porque eu no método acima nFatSet tenho que lhe dar um valor, mas não sei que valor lhe dar... Não percebi, se te for possível partilhar o código que tens posso dar uma vista de olhos e deixar comentários. Podes facilmente guardar o tipo de factura numa variável a que depois associas o mesmo valor que estiver na combobox, no entanto é capaz de ser mais fácil se na combobox colocares objectos que tenham uma descrição e um outro valor que defina o tipo. Uma combobox aceita quaisquer objectos que tenham o método toString implementado.
LuisMendes330 Posted June 5, 2013 at 07:59 PM Author Report #511218 Posted June 5, 2013 at 07:59 PM Vou partilhar algum código para perceberes melhor a ideia... Classe Fatura(Método construtor apenas) public class Fatura { public static final double PERCENTAGEM_DEDUCAO_SOBRE_IVA =0.05 ; String tipofatura; String nfatura; Date dataemissao; String Nif_consumidor; String Nif_comerciante; String codigo; float basetributavel; public Fatura(String tipofatura, String nfatura, Date dataemissao, String Nif_consumidor, String Nif_comerciante, String codigo) { this.tipofatura = tipofatura; this.nfatura = nfatura; this.dataemissao = dataemissao; this.Nif_consumidor = Nif_consumidor; this.Nif_comerciante = Nif_comerciante; this.codigo = codigo; basetributavel= 5; //Valor à sorte [Corresponde a 5% do valor em IVA do produto] } Eu queria com este método saber o número total de faturas por setor(não todas): public static int nFatSetor(String set){ //13.1. Número total de facturas registadas por sector de actividade/ int contador=0; for(int i=0;arrayFaturas.size()>0;i++){ if(arrayFaturas.get(i).equals(set)){ contador++; } } return contador; } Este método recebe a variável set do tipo String (ela devia estar definida no método construtor, mas eu tirei porque quero que ela seja definida através da JComboBox. Na JComboBox tenho representados 4 tipos de faturas mas quando clico em cima dela aparece me isto apenas : private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: }
Knitter Posted June 5, 2013 at 08:12 PM Report #511220 Posted June 5, 2013 at 08:12 PM Seguem algumas sugestões: Classe Fatura(Método construtor apenas) public class Fatura { public static final double PERCENTAGEM_DEDUCAO_SOBRE_IVA =0.05 ; private String tipofatura; private String nfatura; private Date dataemissao; private String Nif_consumidor; private String Nif_comerciante; private String codigo; private float basetributavel; public Fatura(String tipofatura, String nfatura, Date dataemissao, String Nif_consumidor, String Nif_comerciante, String codigo) { this.tipofatura = tipofatura; this.nfatura = nfatura; this.dataemissao = dataemissao; this.Nif_consumidor = Nif_consumidor; this.Nif_comerciante = Nif_comerciante; this.codigo = codigo; // Diria que deverias saber sempre qual é o valor inicial, se não souberes então deixa simplesmente o valor nulo. //basetributavel= 5; //Valor à sorte [Corresponde a 5% do valor em IVA do produto] } public int nFatSetor(String set) { int contador=0; // substituir o for por um "foreach": for(Factura f : <array ou lista ou o que usares>) for(int i=0;arrayFaturas.size()>0;i++){ if(arrayFaturas.get(i).equals(set)){ contador++; } } return contador; } private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) { int total = <variavel para lista de facturas>.nFatSetor(jComboBox1.getSelectedItem().toString()); }
LuisMendes330 Posted June 5, 2013 at 08:51 PM Author Report #511232 Posted June 5, 2013 at 08:51 PM Boa boa...melhorou 🙂 Agora quero esta variável total noutra Jframe...No tal método nFatSet.Mas dá me um erro a dizer "Cannot find variable Total". Agora uma pergunta diferente. private void jMenu7ActionPerformed(java.awt.event.ActionEvent evt) { projetogrupo.ListaUtilizadores.saveComerciantes(); projetogrupo.ListaUtilizadores.saveConsumidores(); projetogrupo.ListaFatura.saveFaturas(); Janela_Login jc = new Janela_Login(); jc.setVisible(true); this.setVisible(false); } Este excerto de código não está a reagir ao click do rato...Fica apenas todo azul... Se criar um JMenuItem já dá...Mas eu queria que fosse só um botão... Obrigado pela ajuda!
Knitter Posted June 5, 2013 at 08:59 PM Report #511239 Posted June 5, 2013 at 08:59 PM Agora quero esta variável total noutra Jframe...No tal método nFatSet.Mas dá me um erro a dizer "Cannot find variable Total". Eu declarei a variável total local ao método apenas como exemplo, naturalmente terás de adequar ao teu código, neste caso parece-me simples teres a variável declarada como variável de instância e depois passar para os métodos que precisares. Este excerto de código não está a reagir ao click do rato...Fica apenas todo azul... O que é que fica azul? A janela nova? Olhando para o código, embora não seja o mais correcto, não há nada que me indique o que é que poderá estar a falhar. Estás a usar um JMenu para algo que me parece errado. Um JMenu é um menu na barra de menus onde colocas outros elementos, tipicamente JMenuItems, não sei de caso nenhum onde só o menu sirva para alguma coisa. Se criar um JMenuItem já dá...Mas eu queria que fosse só um botão... Um JMenuItem coloca-se dentro de um JMenu na barra de menus, um botão (JButton, JToggleButton) coloca-se em barras de ferramentas, painéis e uma data de outros componentes, mas não dentro de um JMenu ou na barra de menus. Por isso não sei bem como estás a misturar os dois. Por hoje já não devo conseguir responder a nada, deixo só mais uma nota, esse excerto de código que colocaste tem demasiados accessos directos a atributos de instância quando devia estar a usar métodos de acesso adequados e ter as variáveis todas como privadas.
LuisMendes330 Posted June 6, 2013 at 11:29 PM Author Report #511455 Posted June 6, 2013 at 11:29 PM Obrigado.A ideia do botão era por como a do "Sair" fórum que tem neste forum...Mas pronto já pus de maneira mais simples. Eu fiz um método get numa JFrame e quero usar o esse método noutro JFrame.É possivel? Não tou a conseguir...Já importei a classe onde tenho o método mas quando ponho (Nome da classe).getQqlCoisa aqui só me aparecem variáveis verdes(Abort, Allbites,Bottom_Alignment,etc ).São variáveis do tipo static final certo? Tou um bocado confuso com isto de importar variáveis entre classes. Já agora JFrame é uma classe?obgd
Knitter Posted June 7, 2013 at 11:25 AM Report #511505 Posted June 7, 2013 at 11:25 AM Obrigado.A ideia do botão era por como a do "Sair" fórum que tem neste forum...Mas pronto já pus de maneira mais simples. Isso não é comum existir numa barra de menu e dá mais trabalho do que o que realmente vale 😉 Eu fiz um método get numa JFrame e quero usar o esse método noutro JFrame.É possivel? Depende do que queres dizer com "usar". É possível invocar o método, como já tens feito para tantas outras classes que tens no teu código. Não tou a conseguir...Já importei a classe onde tenho o método mas quando ponho (Nome da classe).getQqlCoisa aqui só me aparecem variáveis verdes(Abort, Allbites,Bottom_Alignment,etc ).São variáveis do tipo static final certo? Estás novamente a usar acesso estático para um método que muito provavelmente não é estático. Já agora JFrame é uma classe? E poderia ser outra coisa? Não é isso que tens na tua janela principal, ou melhor não é dessa classe que a classe da tua janela principal herda? Pelas questões que tens colocado acho que estás a tentar dar passos maiores que as pernas, não entendes ainda o básico de programação orientada por objectos para sequer estares a tentar fazer um sistema simple quanto mais um sistema que usa interfaces gráficas e para o qual é importante dominar os conceitos de programação orientada por objectos. Nesse sentido volto a recomendar vivamente que leias um livro ou tutorias sobre os princípios básicos antes de tentares fazer seja o que for mais, só vai ficar mais complicado. Já agora, as perguntas que tens feito estão todas exemplificadas no pequeno projecto que fiz, tens lá as várias classes, acesso a métodos adequadamente, passagem de referências para aceder a métodos dessas instâncias, enfim, é só dar uma vista de olhos com atenção 😉
LuisMendes330 Posted June 7, 2013 at 03:05 PM Author Report #511535 Posted June 7, 2013 at 03:05 PM Eu tou no 1º ano de sistemas de informação, é a primeira vez que tou a programar... Eu tou a usar dois packages diferentes... Num dos packages tenho classes (sem interface gráfica) onde tenho métodos construtores, as arraylist's etc.. No outro package tenho JFrames onde está toda a interface gráfica... A duvida tá em escrever a variável setor dentro do método nFatSet. private void SetorActionPerformed(java.awt.event.ActionEvent evt) { String setor1 = Setor.getSelectedItem().toString(); } //Está definido na JFrame JanelaFatura Aqui estou a passar o texto do JComboBox para a string setor1 certo? Depois quero pegar em setor1 e usar dentro deste textfield no método nFatSet private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) { jTextField1.setText(ListaFatura.nFatSetor(JanelaFatura.getSetor())); } //jTextField1 está definido na JFrame JanelaEstatistica4 Método getSetor(definido na JFrame JanelaFatura): public String getsetor(){ return setor1; } A duvida está em andar com estes métodos entre JFrames...
Knitter Posted June 7, 2013 at 03:23 PM Report #511539 Posted June 7, 2013 at 03:23 PM Eu tou no 1º ano de sistemas de informação, é a primeira vez que tou a programar... Por isso é que começar por perceber os conceitos teóricos é importante, antes de tentar fazer seja o que for na componente prática 😉 private void SetorActionPerformed(java.awt.event.ActionEvent evt) { String setor1 = Setor.getSelectedItem().toString(); } Isto nunca vai funcionar, a variável setor1 é local ao método e deixa de existir assim que o método terminar, estás a guardar o valor da combo sim mas numa variável que vai deixar de existir na linha imediatamente a seguir. Isto é um problema de âmbito de variáveis. public String getsetor(){ return setor1; } Este get só iria fazer alguma coisa se a variável setor1 for uma variável de instância. A duvida está em andar com estes métodos entre JFrames... JFrame é uma classe como qualquer outra, funciona da mesma maneira que noutras classes através de métodos de acesso get/set, passagem de parâmetros em construtores ou utilização de outros métodos e de passagem de parâmetros através deles.
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