Cyart
asked on
Scrolling text horizontally in a JLabel within a Java app
Hello,
I am after some information on how the above is possible, I did use a timer but caused major issues with screen updating, would like to know if this can be done using threads as I did try a Swingworker class but this caused the same issue. Any information would be much appreciated.
cheers
Cyart
I am after some information on how the above is possible, I did use a timer but caused major issues with screen updating, would like to know if this can be done using threads as I did try a Swingworker class but this caused the same issue. Any information would be much appreciated.
cheers
Cyart
You need a *SWing* Timer
This can surely inspire you:
CreditsScroller.java
------------------------
import java.awt.*;
import javax.swing.*;
public class CreditsScroller extends JPanel implements Runnable {
private boolean stop = false;
String[] headlines = {
" This program was made by Computer Wizard :", "",
" Cyart ", };
int y = 76;
public void stopIt() {
stop = true;
}
public void run() {
while (!stop) {
y = y - 1;
if (y < -650)
y = 76;
repaint();
try {
Thread.sleep(30);
} catch (InterruptedException e) {
}
}
}
public void paintComponent(Graphics comp) {
Graphics2D comp2D = (Graphics2D) comp;
Font type = new Font("monospaced", Font.BOLD, 14);
comp2D.setFont(type);
comp2D.setBackground(Color .black);
comp2D.fillRect(0, 0, getSize().width, getSize().height);
comp2D.setColor(Color.whit e);
for (int i = 0; i < headlines.length; i++)
comp2D.drawString(headline s[i], 5, y + (20 * i));
}
}
CreditScrollDemo.java
-------------------------- --
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CreditScrollDemo extends JFrame {
CreditsScroller news = new CreditsScroller();
private Thread scroller = new Thread(news);
public CreditScrollDemo() {
super("Authors . . .");
setSize(400, 300);
JPanel pane = new JPanel();
pane.setLayout(new GridLayout(1, 1, 15, 15));
pane.add(news);
setContentPane(pane);
setVisible(true);
scroller.start();
}
public void stopScrollThread() {
news.stopIt();
}
public static void main(String[] arguments) {
final CreditScrollDemo app = new CreditScrollDemo();
app.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
app.stopScrollThread();
}
});
app.setDefaultCloseOperati on(JFrame. EXIT_ON_CL OSE);
}
}
CreditsScroller.java
------------------------
import java.awt.*;
import javax.swing.*;
public class CreditsScroller extends JPanel implements Runnable {
private boolean stop = false;
String[] headlines = {
" This program was made by Computer Wizard :", "",
" Cyart ", };
int y = 76;
public void stopIt() {
stop = true;
}
public void run() {
while (!stop) {
y = y - 1;
if (y < -650)
y = 76;
repaint();
try {
Thread.sleep(30);
} catch (InterruptedException e) {
}
}
}
public void paintComponent(Graphics comp) {
Graphics2D comp2D = (Graphics2D) comp;
Font type = new Font("monospaced", Font.BOLD, 14);
comp2D.setFont(type);
comp2D.setBackground(Color
comp2D.fillRect(0, 0, getSize().width, getSize().height);
comp2D.setColor(Color.whit
for (int i = 0; i < headlines.length; i++)
comp2D.drawString(headline
}
}
CreditScrollDemo.java
--------------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CreditScrollDemo extends JFrame {
CreditsScroller news = new CreditsScroller();
private Thread scroller = new Thread(news);
public CreditScrollDemo() {
super("Authors . . .");
setSize(400, 300);
JPanel pane = new JPanel();
pane.setLayout(new GridLayout(1, 1, 15, 15));
pane.add(news);
setContentPane(pane);
setVisible(true);
scroller.start();
}
public void stopScrollThread() {
news.stopIt();
}
public static void main(String[] arguments) {
final CreditScrollDemo app = new CreditScrollDemo();
app.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
app.stopScrollThread();
}
});
app.setDefaultCloseOperati
}
}
SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER
Just been trying to find ticker examples and it all seems to point to applets.
zzynx, I will look at the code later as I have not got java installed on this PC
zzynx, I will look at the code later as I have not got java installed on this PC
> Just been trying to find ticker examples and it all seems to point to applets.
applets are no different than applications for what you want to do, they just run in a browser.
The code to do the ticker can also be used in an application.
applets are no different than applications for what you want to do, they just run in a browser.
The code to do the ticker can also be used in an application.
>> zzynx, I will look at the code later as I have not got java installed on this PC
That's OK
That's OK
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
Looks like CEHJ agreed with my suggestions , and saved me some typing :)
>>Looks like CEHJ agreed with my suggestions
No ;-)
>>you wouldn't use a JLabel,
>>ScrollingBannerLabel extends JLabel
No ;-)
>>you wouldn't use a JLabel,
>>ScrollingBannerLabel extends JLabel
Didn't say your implementation was perfect, it includes a few other little *issues* as well :)
The type of component is actually irrelevant, using a JLabel will work it just carries extra innecessary baggage that u don't need.
You could equally use a JPanel or even a JComponent.
The type of component is actually irrelevant, using a JLabel will work it just carries extra innecessary baggage that u don't need.
You could equally use a JPanel or even a JComponent.
ASKER
Thanks for the info
How does this code work so that it wraps the text around the GUI
/*
* (non-Javadoc)
*
* @see javax.swing.JComponent#pai ntComponen t(java.awt .Graphics)
*/
protected void paintComponent(Graphics g) {
if (offscreenImage == null) {
offscreenImage = new BufferedImage(getWidth(), getHeight(),
BufferedImage.TYPE_INT_RGB );
Graphics imageGraphics = offscreenImage.getGraphics ();
imageGraphics.setColor(Col or.white);
imageGraphics.fillRect(0, 0, offscreenImage.getWidth(th is),
offscreenImage.getHeight(t his));
super.paintComponent(image Graphics);
}
g.drawImage(offscreenImage , x, y, this);
How does this code work so that it wraps the text around the GUI
/*
* (non-Javadoc)
*
* @see javax.swing.JComponent#pai
*/
protected void paintComponent(Graphics g) {
if (offscreenImage == null) {
offscreenImage = new BufferedImage(getWidth(), getHeight(),
BufferedImage.TYPE_INT_RGB
Graphics imageGraphics = offscreenImage.getGraphics
imageGraphics.setColor(Col
imageGraphics.fillRect(0, 0, offscreenImage.getWidth(th
offscreenImage.getHeight(t
super.paintComponent(image
}
g.drawImage(offscreenImage
The value of 'x' increments on firing of the Timer. If it gets too large it will wrap by setting x to -width
> How does this code work so that it wraps the text around the GUI
it doesn't. the wrapping is handled where:
if (x > width) {
x = -width;
}
it doesn't. the wrapping is handled where:
if (x > width) {
x = -width;
}
:-)