Pessoal , estou com alguns problemas no desenvolvimento de um sistema no Netbeans 6. Criei um “aplicativo da área de trabalho Java”. Desenvolvi meu formulário inicial(JEDBView.java) e um outro formulário(JEDBNewProject.java) . Então, comecei a programar os eventos : fiz a ação do item de Menu “New” que abre o formulário JEDBNewProject.java . Até aí tudo bem. Mas, agora desejo que ao sair deste formuário , os componentes do formulário JEDBView.java fiquem habilitados. A questão é que eu não consigo acessar JEDBView.java já que é um “aplicativo da área de trabalho Java” e extende FrameView que tem um objeto SingleFrameApplication como parâmetro pro construtor …
public class JEDBView extends FrameView {
Construtor :
public JEDBView(SingleFrameApplication app) {
super(app);
Como faço pra acessar os componentes de JEDBView (classe principal do aplicativo da área de trabalho Java) através de qualquer outra clasee ?
É que eu coloquei só a parte que interessa pra gente … Mas aí vai o código do construtor todo (junto com a declaração da classe) :
[code]
public class JEDBView extends FrameView {
public JEDBView(SingleFrameApplication app) {
super(app);
initComponents();
// status bar initialization - message timeout, idle icon and busy animation, etc
ResourceMap resourceMap = getResourceMap();
int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
messageTimer = new Timer(messageTimeout, new ActionListener() {
public void actionPerformed(ActionEvent e) {
statusMessageLabel.setText("");
}
});
messageTimer.setRepeats(false);
int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
for (int i = 0; i < busyIcons.length; i++) {
busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
}
busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
public void actionPerformed(ActionEvent e) {
busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
}
});
idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
// connecting action tasks to status bar via TaskMonitor
TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
if ("started".equals(propertyName)) {
if (!busyIconTimer.isRunning()) {
statusAnimationLabel.setIcon(busyIcons[0]);
busyIconIndex = 0;
busyIconTimer.start();
}
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
} else if ("done".equals(propertyName)) {
busyIconTimer.stop();
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
progressBar.setValue(0);
} else if ("message".equals(propertyName)) {
String text = (String)(evt.getNewValue());
statusMessageLabel.setText((text == null) ? "" : text);
messageTimer.restart();
} else if ("progress".equals(propertyName)) {
int value = (Integer)(evt.getNewValue());
progressBar.setVisible(true);
progressBar.setIndeterminate(false);
progressBar.setValue(value);
}
}
});
}[/code]
A questão é que eu quero acessar componentes dessa classe (como JLabel , JTextField) , mas através de outra classe , entendeu ? Não através dela mesma …
Tem alguma maneira simples de fazer isso no netbeans ?
Vejamos:
acredito que você queira acessar o conteúdo dessas classes certo!? No caso da JLabel, vc quer poder mudar o que irá aparecer…
vou lhe da um exemplo com a JLabel, pois acredito que você queira fazer o mesmo com o JTextField.
coloque o texto a ser exibido no JLabel em uma String Privada. Sendo assim. Crie um metodo que altere o falor da String privada.
Você ja viu como funcina os Métodos “Set” e “Get”, acredito eu. Use o metodo Set* para alterar o valor da String… Sendo assim o texto da JLabel será alterado tbm.
Exemplo:
private String textoLabel = "";
private JLabel textJLabel;
public void setTextoDaLabel(String text){
textoLabel = text;
textJLabel = new JLabel(textoLabel);
}
Eu fiz o codigo correndo aqui, mas acho que deve dar certo. Pela lógica sim. Toda vez que vc chamar o metodo “setTextoDaLabel()” ele irá passar a string que vc passou para a String privada… Eu instanciei dentro do metodo para ele entender que o novo valor será aquele. Agora… esse exemplo… caso funcione… não terá a visualização da JLabel ate que se mude o valor dela, pois ela está instanciada separadamente da classe construtora.
A lógica é essa:
faça o atributo da classe privada para que vc possa buscar* um valor de fora (outra classe).
Espero que entenda.
Caso esteja dificil de compreender avise que explicarei de outra forma.
Boa sorte.
Entendi, vlw ! Agora tô com outro problema : quero mudar o título dessa classe, mas pra isso teria que usar o método setTitle de FrameView que não tem esse método, somente JFrame tem … Sabe como faço ?
[quote=bigwaves]Entendi, vlw ! Agora tô com outro problema : quero mudar o título dessa classe, mas pra isso teria que usar o método setTitle de FrameView que não tem esse método, somente JFrame tem … Sabe como faço ?
[/quote]
Pelo que pesquisei aqui…
A classe “FrameView” não existe mais na API do site da Sun. Parece que ela contem alguns bugs, e foi removida da API.
Acredito que foi substituída pelo JFrame e pelo Frame.
A minha conclusão é você faser uma mudança do seu programa para JFrame ou Frame (depende das classes que vc usa… awt ou swing) em vez de FrameView.
Para vc ter certeza também: http://java.sun.com/javase/6/docs/api/
acesse e procure pela FrameView*.
I hope it helped you.
qlqr coisa estamos ae pra ajuda.
[quote=bigwaves]Tentei subsituir , mas acabou dando erro no método initComponents e esse método não dá pra alterar …
Isso é estranho pq como os programadores Java conseguem alterar (título etc) seus aplicativos de área de trabalho sendo que eles usam FrameView ?
A versão do meu netbeans é 6.0.1 (mais novo).
[/quote]
vou lhe jogar uma opção…
é uma forma de colocar um titulo.
com o JFrame… Em vez de dar “extends JFrame” no frame que vai ser a janela… no arquivo anterior que o chama a gente já cria o frame nela… assim:
JFrame janela = new JFrame("Aqui vai o seu titulo");
SuaClasse sC = new SuaClasse();
janela.add(sC);
janela.setSize(x,y);
etc...
Viu aonde eu coloquei o titulo!? no caso do FrameView também fará a mesma coisa.
Acredito que com o seu FrameView venha a ficar assim:
FrameView janela = new FrameView("Seu Títuto aqui"); // coloque o titulo ak
SuaClasse sC = new SuaClasse();
janela.add(sC);
etc...
se fizer isso lembre-se de remover o “extends FrameView” da outra classe.
o resto do codigo é criterio seu a questão do “Size”, “Visible”, etc, em qual classe vc vai por.
Bem… no JFrame eu faço assim quando complica um poco o uso do extends JFrame…
Espero que assim possa dar certo… caso não dê certo… minhas alternativas acabaram… hehehe… aí vai ser so fuçando mesmo e pedindo ajuda a mais gente. :oops:
Qlqr coisa tamo ae.
----edit----
eu estou com o jdk6u4 e tbm com o netbeans atualizado… e ele não achou essa classe aqui naum. :shock:
quando eu mando a classe responsavel por coloca o valor no Label, ele simplesmente nao mostra.
mas se eu chamo o metodo Setter na msm classe que esta o label, ele coloca.
veja oq ha de errado:
Classe GUI (Interface):
public void setSPGlobal(String text) {
GlobalSPTexto = text;
SPGlobal.setText(GlobalSPTexto);
}
Classe Mod (Operaçoes)
private void BotaoCalcularActionPerformed(java.awt.event.ActionEvent evt) {
GUI a = new GUI();
a.setSPGlobal("500000000");
}
debuguei o codigo, o estranho é que os valores realmente sao passados, oq nao acontece é o label ser atualizado com o novo valor na GUI… nao compreendo
Sei que o tópico já tá ai a muito tempo. Mas gostaria de dar minha contribuição. Já que parei aqui outros também virão. :lol:
Prá mudar o título e outros detalhes de teu aplicativo usando SAF, tu tens que ir em <teu.pacote>resources. No teu caso procura por JEDBView.properties.