Queria saber como criar Notificações que aparece no canto direito da tela? Como na imagem abaixo. Observação: Quero um código Java, não em Javascript.
Uma forma de fazer isso é criar um JFrame sem decoração e abrí-lo no canto da tela. Comece criando um JFrame a partir da sua aplicação e o posicionando no canto inferior direito. Depois que tiver o JFrame ali, veja como tirar a decoração do mesmo (barra de título e bordas). Vou fazer um exemplo aqui para vc.
Um exemplo para vc começar:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GraphicsEnvironment;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
/**
*
* @author Prof. Dr. David Buzatto
*/
public class Janela extends JFrame {
public Janela() {
super( "Teste de Notificações" );
preparar();
}
private void preparar() {
setDefaultCloseOperation( EXIT_ON_CLOSE );
JButton btnAbrirNotificacao = new JButton( "Abrir Notificação" );
JButton btnAbrirNotificacaoTempo = new JButton( "Abrir Notificação (3 segundos)" );
btnAbrirNotificacao.setFont( btnAbrirNotificacaoTempo.getFont().deriveFont( 40.0f ) );
btnAbrirNotificacao.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
abrirNotificacao( "Título", "Mensagem...", 0 );
}
});
btnAbrirNotificacaoTempo.setFont( btnAbrirNotificacaoTempo.getFont().deriveFont( 40.0f ) );
btnAbrirNotificacaoTempo.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
abrirNotificacao( "Título", "Mensagem...", 3000 );
}
});
add( btnAbrirNotificacao, BorderLayout.NORTH );
add( btnAbrirNotificacaoTempo, BorderLayout.CENTER );
pack();
setLocationRelativeTo( null );
}
private static void abrirNotificacao( String titulo, String mensagem, int milisegundos ) {
final JFrame fn = new JFrame();
fn.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
fn.setAlwaysOnTop( true );
fn.setUndecorated( true );
fn.setSize( 300, 200 );
JLabel lblTitulo = new JLabel( titulo );
JLabel lblMensagem = new JLabel( mensagem );
JButton btnFechar = new JButton( "x" );
JButton btnCliqueAqui = new JButton( "Clique Aqui" );
JPanel pnTitulo = new JPanel();
pnTitulo.setLayout( new BorderLayout() );
pnTitulo.add( lblTitulo, BorderLayout.CENTER );
pnTitulo.add( btnFechar, BorderLayout.EAST );
fn.add( pnTitulo, BorderLayout.NORTH );
fn.add( lblMensagem, BorderLayout.CENTER );
fn.add( btnCliqueAqui, BorderLayout.SOUTH );
btnFechar.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
fn.dispose();
}
});
btnCliqueAqui.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
fn.dispose();
}
});
Dimension tamanhoTela = Toolkit.getDefaultToolkit().getScreenSize();
int alturaTaskbar = tamanhoTela.height - GraphicsEnvironment
.getLocalGraphicsEnvironment().getMaximumWindowBounds().height;
int margem = 10;
fn.setLocation(
(int) ( tamanhoTela.getWidth() - fn.getWidth() - margem ),
(int) ( tamanhoTela.getHeight() - fn.getHeight() - alturaTaskbar - margem )
);
fn.setVisible( true );
if ( milisegundos > 0 ) {
Timer t = new Timer( milisegundos, new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
fn.dispose();
}
});
t.setRepeats( false );
t.start();
}
}
public static void main( String[] args ) {
new Janela().setVisible( true );
}
}
Agora um conselho. Se vc não começar a tentar fazer você mesmo, você não vai aprender nada e, sendo bem sincero, sua carreira como desenvolvedor será medíocre. Estou te dizendo isso, pois se não me engano, foi você que não queria aprender a usar os gerenciados de layout “pq eram muito complicados” há alguns dias, queria algo como HTML. Fica a dica.