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.

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