开发者

marquee in title bar in JFrame

开发者 https://www.devze.com 2022-12-24 11:23 出处:网络
How can I make the title bar of a JFrame to be Marquee like the mar开发者_StackOverflow中文版quee in HTML if you use the marquee tag? Please don\'t.

How can I make the title bar of a JFrame to be Marquee like the mar开发者_StackOverflow中文版quee in HTML if you use the marquee tag?


Please don't.

If you do decide to, then the obvious technique is to setTitle with a subsequence of the required text. I guess various partial sized spaces in Unicode may allow you to make the slightly smoother (or they might appear as squares).

Alternatively, you could make the window PL&F decorated (wont work with the native PL&F in the Sun/Oracle implementation) and draw the text yourself. To look good, you'd need to tune it to the particular PL&F and configuration.


God forgive me for the following code

Put this code in your frame constructor if you want the marquee to start directly after loading:

    int delay = 3000;
    int period = 50;
    Timer timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {
        int spaces=0;
        public void run() {
            String title="";
            for (int j = 0; j < spaces; j++) {
                title+= " " ;
            }
            title+= "Annoying";
            Main.this.setTitle(title);
            spaces=(spaces+1)%50;
        }
    }, delay, period);

UPDATE
As per the comments, here is another version using swing.Timer

    Timer timer = new Timer(delay,new ActionListener(){

        int spaces=0;

        public void actionPerformed(ActionEvent e) {
            String title="";
            for (int j = 0; j < spaces; j++) {
                title+= " " ;
            }
            title+= "Annoying";
            Main.this.setTitle(title);
            spaces=(spaces+1)%50;

        }}
    );
    timer.start();

This code is for learning purpose only, please don't use it in a real product.


int delay = 0;
int period = 500;
    t.scheduleAtFixedRate(new TimerTask(){
        String test = "  Test marquee";
        int i = 0;
        public void run(){
            titleChanger(test.substring(i, test.length()));
            i++;
            if(test.length()==i){
                i = 0;
            }
        }
    }, delay, period);


Timer t = new Timer();
public void titleChanger(String t){
this.setTitle(t);
}

Try this, fool proof. And easier to understand.

0

精彩评论

暂无评论...
验证码 换一张
取 消