Problemas com aplicativos de área de trabalho no NetBeans 6

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 ?

Se puderem me ajudar …

que linguagem tu usa em… deve ser q aprendi a usar a sintax de outra forma por isso não entendi nada do seu “CODE”.

mas em java pra vc acessar os seus “componentes”:

JEDBView A = new JEDBView();

usa o “A” para chamar seus componentes…
exemplo se um deles se chama “tester”, então faça assim:

A.tester();

é claro se tiver parametros vc vai enviá-los.

Espero que está seja a resposta para a sua dúvida, e me desculpe se eu não entendi sua dúvida, mas eu nunca vi um codigo em java ser montado assim:

public class JEDBView extends FrameView {   
  
Construtor :   
  
public JEDBView(SingleFrameApplication app) {   
        super(app);

pelo menos na parte do “Construtor :”, acredito que seja comentário. se não for, e funcionar, estou com pouco conhecimento a respeito. :oops:

É 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. :wink:
qlqr coisa estamos ae pra ajuda.

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=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:

eu resolvi utilizando o extends FrameView mesmo.

alterei este método da classe app

@Override protected void startup() {
      MenfisvendaView formularioprincipal = new MenfisvendaView(this);
      formularioprincipal.getFrame().setTitle("titulo");
      show(formularioprincipal);
    }

amigo to com msm problema , porem nao resolvido.

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.
:wink: