Dúvida com a classe JOptionPane!

[i]Gostaria de saber se da pra mudar akela janela do “Input” , “Message”… Por exemplo:

Quando escrevo esse código e executo-o, irá aparecer uma janela, e assim como o no HTML, ele possui o nome Message, certo ?

JOptionPane.showMessageDialog(null,"Teste!");

Outra duvida também é sobre o null. Eu li no livro que ele informa a posição da caixa de dialógo. Quais são os outros paramêtros existentes para dizer “direita”, “esquerda” ?

Assim também, quando executo o código e etc. aparece uma imagem do lado da mensagem (Assim como o javascript e VBScript senão me engano). Dá pra mudar aquela imagem ou até mesmo tirar ela ? :slight_smile:

Se alguém puder tirar minha dúvida eu agradeço. [/i]

Desculpe ter colocado na seção errada, é que só fui me lembrar agora que tinha a seção de Interface Gráfica aqui :oops:

Alguns exemplos.

import javax.swing.JOptionPane;

public class JOptionPaneExemplos {
	
	public static void main(String[] args) {		
		
		JOptionPane.showMessageDialog(null, "Mensagem de informação!", "TÍTULO", JOptionPane.INFORMATION_MESSAGE);
		
		JOptionPane.showMessageDialog(null, "Mensagem de atenção!", "TÍTULO", JOptionPane.WARNING_MESSAGE);
		
		JOptionPane.showMessageDialog(null, "Mensagem de erro!", "TÍTULO", JOptionPane.ERROR_MESSAGE);
		
		JOptionPane.showMessageDialog(null, "Mensagem simples!", "TÍTULO", JOptionPane.PLAIN_MESSAGE);
	
	}
}

Para uma informação mais completa:
http://download.oracle.com/javase/tutorial/uiswing/components/dialog.html

Espero ter ajudado.

1 curtida

No caso do null, é a janela ao qual ele faz parte. Exemplo abaixo explica melhor. Execue e você verá a diferença.

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Janela2 extends JFrame {

	private JPanel contentPane;
	private JButton button;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Janela2 frame = new Janela2();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Janela2() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		this.contentPane = new JPanel();
		this.contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(this.contentPane);
		this.contentPane.setLayout(null);
		
		this.button = new JButton("New button");
		this.button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				action();
			}
		});
		this.button.setBounds(163, 116, 89, 23);
		this.contentPane.add(this.button);
	}

	private void action() {
		// Aparece no centro do monitor.
		JOptionPane.showMessageDialog(null, "Titulo", "Mensagem1", JOptionPane.ERROR_MESSAGE);
		
		// Aparece no centro da Janela.
		JOptionPane.showMessageDialog(this, "Titulo", "Mensagem2", JOptionPane.INFORMATION_MESSAGE);
	}

}

O null é o tipo de ícone de notificação que vai aparecer, se você colocar null, ele aparece o default de cada janela do JOptionPane.

Não tem nada haver com icone.

O primeiro argumento do método recebe um Component. Então não tem nada haver com ícone.

JOptionPane.showMessageDialog(new JFrame, "Titulo", "Mensagem2", JOptionPane.INFORMATION_MESSAGE);

Não tem nada haver com icone.[/quote]

Opa, obrigado por me corrigir e não explicar o certo.

[quote=danielso2007]O primeiro argumento do método recebe um Component. Então não tem nada haver com ícone.

JOptionPane.showMessageDialog(new JFrame, "Titulo", "Mensagem2", JOptionPane.INFORMATION_MESSAGE); [/quote]

Na literatura que eu li falava que era relacinado ao tipo da janela que vai ser colocada. Eu falei ícone tentando simplificar.

Eu tinha entendido que era se fosse uma janela de mensagem, pergunta ou informação e isso muda o ícone, mas enfim.

O que vocês disseram e nada são a mesma coisa. Prefiro a minha idéia errada que é plausível pra mim.

O ícone é o quarto argumento, que recebe um int que representa os tipos de mensagem.

O primeiro argumento indica o componente que será o “pai” da option pane. Por exemplo, se passar null não haverá um pai, então o option pane fica centralizado na tela. Se eu passar um JFrame, o option pane será centralizado na área do JFrame que foi passado por parâmetro.

1 curtida

[quote=Eric Yuzo]O ícone é o quarto argumento, que recebe um int que representa os tipos de mensagem.

O primeiro argumento indica o componente que será o “pai” da option pane. Por exemplo, se passar null não haverá um pai, então o option pane fica centralizado na tela. Se eu passar um JFrame, o option pane será centralizado na área do JFrame que foi passado por parâmetro.[/quote]

Valeu, cara. Eu percebi isso quando eu estava lendo hoje, mas não tinha sacado pra que era o primeiro. =D

E por exemplo para traduzir o YES e o NO da caixa de dialogo de confirmação


JOptionPane.showConfirmDialog("Deseja continuar");

Obrigado a todos ae, consegui entender melhor o JOptionPane ;D

Tem uma forma que é possível especificar um array com os textos dos botões:

String[] opcoes = {"Sim","Não"}; //Nome dos botões JOptionPane.showOptionDialog(null, "Mensagem do OptionPane", "Título", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[1]); //JOptionPane.YES_NO_OPTION - Exibe os botões "Yes" e "No" //JOptionPane.QUESTION_MESSAGE - Tipo de mensagem //O sexto argumento é o ícone da barra de título (eu acho) //opcoes é o array com os nomes para serem exibidos nos botões //opcoes[1] - estou dizendo que o foco começa no botão especificado no índice 1 de opções, que é o "Não"
E uma forma mais prática seria traduzir pelo UIManager. Desta forma, os option panes já ficarão com o texto traduzido sem precisar especificar aquela montanha de parâmetros em cada chamada.

UIManager.put("OptionPane.cancelButtonText", "Cancelar"); UIManager.put("OptionPane.okButtonText", "OK"); //Traduzir OK para OK não precisa, só estou mostrando a possibilidade. UIManager.put("OptionPane.noButtonText", "Não"); UIManager.put("OptionPane.yesButtonText", "Sim");