JOptionPane Personalizado

Boa tarde.

Pessoal, preciso de uma ajuda. Gostaria de fazer um JOptionPane personalizado. Encontrei, aqui, alguns tópicos sobre o assunto, porém nenhum me esclareceu. Inclusive, um deles sugeria para eu estender a classe JDialog.

Só para lembrar, A classe JOptionPane possui métodos estáticos que podem ser acessados sem a necessidade de instância e retornam INT. Neste ponto o código é interrompido até a resposta (return) do JOptionPane. Por exemplo:

int x = JOptionPane.showConfirmDialog(blá blá blá....);

Tentei fazer o mesmo com uma classe estendida do JDialog e JFrame, contudo não consegui obter o efeito da interrupção, assim como no JOptionPane. Simplesmente o código continuou até o final.

Alguém tem algum exemplo :?: :?: :?: :?:

Obrigado.

Bom, aqui tem vários exemplos: http://java.sun.com/docs/books/tutorial/uiswing/components/dialog.html

Esse problema deve ter relação com ser um diálogo modal ou não… no link fala sobre isso.

flw

Muito obrigado, amigo. Vou dar uma olhada com calma. :smiley: :smiley:

Cara o link é excelente, mas não consegui o efeito da interrupção. Vou postar o código. Talvez alguém dê uma luz.

Trecho do código da classe principal:


Boolean x = ConfirmaMusica.mostrarConfirm();
            //Neste ponto o código deveria aguardar a resposta da Caixa de Diálogo      
            if (x == true){
                //Comandos blá blá blá
            }

Agora o código completo da classe que terá a função do JOptionPane

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;

public class ConfirmaMusica extends JDialog{
    
    private MJPanel mjp; //JPanel personalizado pode ser substituído por um tradicional
    private String texto;
    private static Boolean confirm;
    private JLabel jl1;
    private JLabel jl2;
    private JButton jb1;
    private JButton jb2;
    private Container c;
    private Color clBorda = Color.yellow;
    private LineBorder lBorda = new LineBorder(clBorda, 3 ,true);
    
    public ConfirmaMusica(){
        this.confirm = false;
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setVisible(true);
        setSize(500,190);
        setLocation(50,50);
        
        c = getContentPane();
        c.setLayout(null);
        
        mjp = new MJPanel();
        c.add(mjp);
        mjp.setLayout(null);
        mjp.setImagem("imagens/fundocm.jpg");
        mjp.setBounds(0,0,1000, 1000);
        
        jl1 = new JLabel("Confirma a música:");
        mjp.add(jl1);
        jl1.setBounds(10,10,470,30);
        jl1.setFont(new Font("Arial", 1, 16));
        jl1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jl1.setVerticalTextPosition(javax.swing.SwingConstants.CENTER);
        
        jl2 = new JLabel("PORQUE CHORAS PORQUE CHORAS PORQUE CHORAS");
        mjp.add(jl2);
        jl2.setBounds(10,50,470,30);
        jl2.setFont(new Font("Arial", 1, 16));
        jl2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jl2.setVerticalTextPosition(javax.swing.SwingConstants.CENTER);
           
        jb1 = new JButton("");
        mjp.add(jb1);
        jb1.setBounds(80,100,120,30);
        ImageIcon imgb1 = new ImageIcon("imagens/btsim.png"); // [0] é sempre a 1ª imagem
        ImageIcon imgb12 = new ImageIcon(imgb1.getImage().
                getScaledInstance(jb1.getWidth(), jb1.getHeight(), Image.SCALE_DEFAULT));
        jb1.setIcon(imgb12);
        jb1.addFocusListener(new FocusAdapter() {
            public void focusGained(FocusEvent evt) {
                jb1FocusGained(evt);
            }
            public void focusLost(FocusEvent evt) {
                jb1FocusLost(evt);
            }
        });
        jb1.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent evt) {
                jb1KeyPressed(evt);
            }
            public void keyReleased(KeyEvent evt) {
                jb1KeyReleased(evt);
            }
        });
        jb1.requestFocus();
        
        
        
        jb2 = new JButton("");
        mjp.add(jb2);
        jb2.setBounds(300,100,120,30);
        ImageIcon imgb2 = new ImageIcon("imagens/btnao.png"); // [0] é sempre a 1ª imagem
        ImageIcon imgb22 = new ImageIcon(imgb2.getImage().
                getScaledInstance(jb1.getWidth(), jb1.getHeight(), Image.SCALE_DEFAULT));
        jb2.setIcon(imgb22);
        jb2.addFocusListener(new FocusAdapter() {
            public void focusGained(FocusEvent evt) {
                jb2FocusGained(evt);
            }
            public void focusLost(FocusEvent evt) {
                jb2FocusLost(evt);
            }
        });
        jb2.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent evt) {
                jb2KeyPressed(evt);
            }
            public void keyReleased(KeyEvent evt) {
                jb2KeyReleased(evt);
            }
        });
        
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosed(java.awt.event.WindowEvent evt) {
                formWindowClosed(evt);
            }
        });
        
    }
    
    private Boolean formWindowClosed(WindowEvent evt) {                                  
        return confirm;
    }
    
    private void jb1FocusGained(FocusEvent evt) {                                     
        jb1.setBorder(lBorda);
    }
    
    private void jb1FocusLost(FocusEvent evt) {                                     
        jb1.setBorder(null);
    }
    
    private void jb1KeyPressed(KeyEvent evt) {                                     
        
        if (evt.getKeyCode() == evt.VK_NUMPAD6) jb2.requestFocus();
        if (evt.getKeyCode() == evt.VK_NUMPAD5) {
            this.setConfirm(true);
            this.dispose();
        }
    }
    
    private void jb1KeyReleased(KeyEvent evt) {                                     

    }
    
    private void jb2FocusGained(FocusEvent evt) {                                     
        jb2.setBorder(lBorda);
    }
    
    private void jb2FocusLost(FocusEvent evt) {                                     
        jb2.setBorder(null);
    }
    
    private void jb2KeyPressed(KeyEvent evt) {                                     
        if (evt.getKeyCode() == evt.VK_NUMPAD4) jb1.requestFocus();
        if (evt.getKeyCode() == evt.VK_NUMPAD5) {
            this.setConfirm(false);
            this.dispose();
        }
    }
    
    private void jb2KeyReleased(KeyEvent evt) {                                     

    }
    
    public void setTextoMensagem(String tx){
        this.texto = tx;
        jl2.setText(texto);
    }
    
    public void setConfirm(Boolean b){
        this.confirm = b;
    }
    

    //*********Método que invoco na classe principal*******
    public static Boolean mostrarConfirm(){
        new ConfirmaMusica();
        return confirm;
    }
}

Aguardo respostas e críticas. :!: :!: :!:

Obrigado

Ninguém :?: :!: :cry: :cry: :cry: :cry: :cry: :cry:

Ola!
Diz ai em que parte do codigo você quer que o programa para pra esperar a resposta? dai é so colocar o JOptionPane nesso ponto.
Comigo funiona assim.

MarcioJ

Não intendi o q vc está realmente querendo mais se é passar a resposta da JOptionPane (que por exemplo tem dois botoes sim ou não )pra TRUE ou FALSE  basta vc fazer um metodo assim:

[code] int resp=JOptionPane.blablabla;

public boolean resposta(int i){
      return (i==0);

}

[/code]

ou assim:

public boolean pergunta(String pergunta,String titulo){
		 Object opcoes[] = {"Sim","Não"};
		 int op = JOptionPane.showOptionDialog(null,pergunta,titulo,1,3, null, opcoes, null);
		 return(op==0);
	}

Exclareça melhor a sua duvida pra nos podermos ajuda=lo