• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

dos.santos

JOptionPanes()

6 mensagens neste tópico

Boas  a todos!

Ando a iniciar-me no Java/Swing e já ando com problemas!

Como por aqui se fala "tuguês", resolvi que vçs seriam as minhas primeiras cobaias!  ;)

Ora bem, para os corajosos do Swing, estou a tentar fazer uma aplicação que depois de clicar-se num butão aparece uma JOptionPane.showInputDialog() onde temos que inserir uma String. Até aqui tudo bem, o problema complica-se quando quero validar essa String ou seja quando a mesma não existe (por exemplo), quero que apareça uma JOptionPane.showOptionDialog() com uma mensagem de erro a avisar o utilizador.

Em baixo fica o código do que tenho feito até agora.


// Testing.java

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Testing implements ActionListener 
{
        
        private static String s;
        
//         JFrame();
        public static JFrame myJFrame()
        {
                JFrame frame = new JFrame("This is not working!");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                return frame;
        }
        
//         JButton();
        public static JButton myJButton()
        {
                JButton button = new JButton("Click!");
                return button;
        }
        
//         JOptionPane.showOptionDialog()
        public static JOptionPane myDialogJOptionPane ()
        {
              
                JOptionPane dialog = new JOptionPane();
               
                int n = dialog.showOptionDialog(
                                                null, //component,
                                                "This is an error!!", //text,                                                
                                                "Dialog", //title,                                                
                                                -1, //optionType,
                                                0, //messageType,
                                                null,
                                                null,
                                                null);
                                                
                 return dialog;
                
        }    

//         JOptionPane.showInputDialog()
        public static JOptionPane myInputJOptionPane()
        {

                JOptionPane input = new JOptionPane();

                do {

                        s = (String)input.showInputDialog(
                                                null,
                                                "This doesnt work!",
                                                "Input",
                                                1,
                                                null,
                                                null,
                                                "Put here something to validate!");

                        JOptionPane error = myDialogJOptionPane();

                } while (s.length() == 0);
                                    
                return input;                                                                                                             
                
        }
        
//         ActionListener()
        public void actionPerformed(ActionEvent e) 
        {
        
                if ("action".equals(e.getActionCommand()))
                { 
                        JOptionPane jop = myInputJOptionPane();            
                }
        }
                                  
//         Constructor()
        public Testing()
        {

                JFrame fr = myJFrame();
                fr.setLayout(new FlowLayout());

                JButton mybutton = myJButton();
                mybutton.setActionCommand("action");
                mybutton.addActionListener(this);
                fr.add(mybutton);

                fr.setSize(400, 300);
                fr.setVisible(true);

        }
        
//         main();
        public static void main(String[] args)
        {
                Testing test = new Testing();
        }   

}                                
        

De certa forma até funciona! Mas não como eu esperava!

Espero que percebam o que estou a tentar fazer!

Isto está a ser escrito ás tantas da madrugada, se não entenderem o que quero fazer digam e eu tento explicar melhor!  :wallbash:

Espero que possam ajudar!

Obrigado!

Miguel.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem estás a iniciar-te em Java, em Programação Orientada a Objectos ou em Swing?

Não percebi bem porque criaste o método myInput com o ciclo do...while, e se queres mostrar o erro apenas se ele existir porque é que o estás a mostrar sempre que é introduzido um valor na caixa de input?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem estás a iniciar-te em Java, em Programação Orientada a Objectos ou em Swing?

Não percebi bem porque criaste o método myInput com o ciclo do...while, e se queres mostrar o erro apenas se ele existir porque é que o estás a mostrar sempre que é introduzido um valor na caixa de input?

Estou a iniciar-me em Swing e os meus conhecimentos de Java também não são grande coisa! Daí juntar o util ao agradável, aprender melhor Java e exprimentar o Swing!

O ciclo do/while é mesmo o meu problema, não consegui ainda descobrir uma forma de depois de se clicar no botão "OK" e caso não tenha sido inserida nenhuma String, apareça a JOptionPane.showOptionDialog(). Ou seja, não consigo meter as duas JOptionPanes() a funcionar dentro do mesmo método!

Miguel.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não leves a mal, mas que conhecimentos de programação tens? Reconsidera aprender Swing para aprenderes primeiro as bases de programação senão as coisas podem ficar complicadas.

No teu código bastaria alterar o método para:

    public static JOptionPane myInputJOptionPane() {
        
        JOptionPane input = new JOptionPane();
        
        do {
            
            s = (String)input.showInputDialog(null, "This doesnt work!", "Input", 1, null, null, "Put here something to validate!");
            if(s != null && s.length() == 0) {
                JOptionPane error = myDialogJOptionPane();
            }
            
        } while (s != null && s.length() == 0);
        
        return input;
        
    }

No entanto uma forma mais correcta de fazer as coisas seria:

/*
* Panes.java
*
* Created on 13 de Abril de 2007, 3:56
*
*/

package org.sergiolopes;

/**
*
* @author Knitter
*/
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Panes extends JFrame {
    
    private String returnedString;
    private Panes reference = this;
    
    public Panes() {
        super("");
        try {
            initComponents();
        }catch(Exception ex) {
            System.err.println("Ocorreu um erro ao iniciar a componente gráfica...");
        }
        
    }
    
    
    private void initComponents() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel base = new JPanel(new FlowLayout());
        
        JButton button = new JButton("Click!");
        button.addActionListener( new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String in = "";
                while(in != null && in.length() == 0) {
                    in = (String)JOptionPane.showInputDialog(reference, "This doesnt work!", "Input", JOptionPane.INFORMATION_MESSAGE, null, null, "Put here something to validate!");
                    if(in != null && in.length() == 0) {
                        JOptionPane.showMessageDialog(reference, "This is an error!!", "Dialog", JOptionPane.OK_OPTION, null);
                    }
                    
                }
                returnedString = in;
            }
        });
        
        base.add(button);
        add(base);
        pack();
        setVisible(true);
    }
       
//         main();
    public static void main(String[] args) {
        Panes test = new Panes();
    }
    
}

Espero ter ajudado, qualquer coisa avisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deixaste-me envergonhado!  :-[

Mas o teu post só mostra que para além de já teres muita expriencia, eu ainda tenho muito que aprender!  :hmm:

Mas assim como ninguém quer a coisa, porque razão preferes usar o "extends" a criar uma JFrame() e a adicionar-lhe os componentes?

Obrigadão!

Miguel.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu criei uma JFrame e adicionei-lhes os componentes, a minha classe é um JFrame ;)

Nada que tenhas que te envergonhar, mas pela forma com escreveste o código e pelo que estavas a tentar fazer e da forma que o estavas a tentar fazer, parece que está ai a falhar qualquer coisa, como umas bases de programação.

Porquê de usar herança em vez de composição, porque conceptualmente composição não se aplica, vantagens?, é mais fácil trabalhar directamente com a JFrame herdando os métodos todos, neste exemplo nem se deve notar grande diferença mas numa janela normal

é bastante mais evidente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora