Olá pessoal, queria uma idéia d como fazer pra o JLABEL ficar rolando uma mensagem, por exemplo em HTML se faz assim:
Aqui tem um exemplo d funcionamento:
http://www.mephost.com/br/dica002_marquee.html
Aguardo a resposta, grato desde já.
Olá pessoal, queria uma idéia d como fazer pra o JLABEL ficar rolando uma mensagem, por exemplo em HTML se faz assim:
Aqui tem um exemplo d funcionamento:
http://www.mephost.com/br/dica002_marquee.html
Aguardo a resposta, grato desde já.
Oi Vitor, você pode fazer de duas maneiras.
Em qualquer uma das duas será necessario fazer uma animação, ou seja
vais precisar de um Timer, sugiro usar o do swing, que é executado dentro da Thread do mesmo.
Boa sorte.
/**
*
*/
package guj;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.Timer;
/**
* Um marquee bem simples. Ele não implementa, por exemplo, o "width"
*/
public class SimpleMarquee extends JLabel {
public SimpleMarquee() {
super();
setup ();
}
public SimpleMarquee(Icon image, int horizontalAlignment) {
super(image, horizontalAlignment);
setup ();
}
public SimpleMarquee(Icon image) {
super(image);
setup ();
}
public SimpleMarquee(String text, Icon icon, int horizontalAlignment) {
super(text, icon, horizontalAlignment);
setup ();
}
public SimpleMarquee(String text, int horizontalAlignment) {
super(text, horizontalAlignment);
setup ();
}
public SimpleMarquee(String text) {
super(text);
setup ();
}
private void setup () {
timer = new Timer (0, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = getText();
if (text != null && text.length() > 1) {
setText (text.substring(1) + text.charAt(0));
}
}
});
timer.setRepeats(true);
timer.setDelay(period);
timer.start();
}
public int getPeriod () {
return timer.getDelay();
}
public void setPeriod (int period) {
this.period = period;
timer.setDelay (this.period);
}
private static final int defaultPeriod = 200;
private int period = defaultPeriod;
private Timer timer;
}
package guj;
import java.awt.BorderLayout;
public class ExemploSimpleMarquee extends JFrame {
private static final long serialVersionUID = -4870168988827281628L;
private JPanel contentPane;
private SimpleMarquee lblTextoMuitoLongo;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ExemploSimpleMarquee frame = new ExemploSimpleMarquee();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ExemploSimpleMarquee() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
contentPane.add(getLblTextoMuitoLongo(), BorderLayout.NORTH);
}
private SimpleMarquee getLblTextoMuitoLongo() {
if (lblTextoMuitoLongo == null) {
lblTextoMuitoLongo = new SimpleMarquee("Texto muito longo, que deve ser mostrado como um marquee");
}
return lblTextoMuitoLongo;
}
}