Instalei um tema, o flatLaf, porém o meu JOPtion pane fica com essa logo do java que ta na foto, alguem sabe como tirar ela? ou troca-lá…
uso o netbeans
Dê uma olhada nas sobrecargas dos métodos que apresentam o JOptionPabe
, ele tem métodos que recebem um Icon
como parâmetro.
Tentei procurar no JOPTIONPANE.java , mas não achei nada que fosse referente aquele icone, apenas a os icones que ficam ao lado, ex: ERRO, INFORMATION…
Mesmo usando alguma versão de método que recebe um Icon
como parâmetro, esse ícone é o que aparece dentro do diálogo, não na barra de títulos… Para ter algo na barra de título, vc precisa mudar o ícone do Frame que é dono do diálogo, pois o ícone da barra de títulos do diálogo é o mesmo do Frame… Mas, se vc mudar o ícone, ele atualiza no Frame. Se criar um JDialog sem JFrame associado partir do JOptionPane, mudar o ícone e centralizar em relação ao JFrame vai gerar algo parecido com o que você quer. Veja abaixo e adapte à sua necessidade.
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
/**
*
* @author David
*/
public class Janela extends JFrame {
private JButton btn;
private JFrame esse;
public Janela() {
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize( 500, 500 );
setLocationRelativeTo( null );
setLayout( new FlowLayout() );
esse = this;
btn = new JButton( "clique aqui..." );
add( btn );
btn.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
JOptionPane jp = new JOptionPane( "Preencha todos os dados obrigatórios!!", JOptionPane.INFORMATION_MESSAGE );
JDialog d = jp.createDialog( null, "Mensagem" );
( (Frame) d.getParent() ).setIconImage( new Icone().getImage() );
d.setLocationRelativeTo( esse );
d.setResizable( true );
d.setVisible( true );
}
} );
}
private class Icone extends ImageIcon {
BufferedImage img;
int largura = 20;
int altura = 20;
public Icone() {
img = new BufferedImage( largura, altura, BufferedImage.TYPE_INT_ARGB );
Graphics g = img.getGraphics().create();
g.setColor( Color.red );
g.fillRect( 0, 0, largura, altura );
g.dispose();
}
@Override
public synchronized void paintIcon( Component c, Graphics g, int x, int y ) {
g.drawImage( img, 0, 0, null );
}
@Override
public int getIconWidth() {
return largura;
}
@Override
public int getIconHeight() {
return altura;
}
@Override
public Image getImage() {
return img;
}
}
public static void main( String[] args ) {
EventQueue.invokeLater( new Runnable() {
public void run() {
new Janela().setVisible( true );
}
} );
}
}
Nessa linha vc usa o ícone que vc quer:
( (Frame) d.getParent() ).setIconImage( aquiVemAImagemDoSeuIcone );