我现在需要使用一个提示栏,独立于JFrame,上面需要实现文字的滚动。
该如何实现?使用GlassPane虽然可以模拟出来,但是,当GlassPane的visible属性为true的时候JFrame无法操作,所以,无法使用,是不是需要通过JWindow实现?

解决方案 »

  1.   


    import java.awt.Color;
    import java.awt.Point;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenuItem;
    import javax.swing.JPopupMenu;
    import javax.swing.JWindow;
    import javax.swing.border.LineBorder;public class WindowTest extends JFrame
    {
    class ToolTipWindow extends JWindow implements Runnable
    {
    private final class MouseAdapterL extends MouseAdapter
    {
    public void mouseReleased(MouseEvent e)
    {
    maybeShowPopup(e);
    } private void maybeShowPopup(MouseEvent e)
    {
    if (e.isPopupTrigger())
    {
    popup.show(e.getComponent(), e.getX(), e.getY());
    }
    } public void mousePressed(MouseEvent e)
    {
    p1 = e.getPoint();
    } JPopupMenu popup; MouseAdapterL(JPopupMenu popupMenu)
    {
    popup = popupMenu;
    } public void mouseEntered(MouseEvent e)
    {
    super.mouseEntered(e);
    mouseEntered = true;
    } public void mouseExited(MouseEvent e)
    {
    super.mouseExited(e);
    mouseEntered = false;
    }
    } public void run()
    {
    StringBuffer buffer = new StringBuffer("       I AM ALARM1         THIS IS THE MSG2");
    int index = 0;
    int len = buffer.length();
    StringBuffer buffer2 = new StringBuffer(len);
    while (true)
    {
    if (!mouseEntered)
    {
    index = ((++index) % len);
    buffer2.setLength(0);
    buffer2.append(buffer.substring(index));
    buffer2.append(buffer.substring(0, index));
    label.setText(buffer2.toString());
    }
    try
    {
    Thread.sleep(200);
    }
    catch (InterruptedException e)
    {
    e.printStackTrace();
    }
    }
    } private JLabel label; Point p1; public ToolTipWindow(JFrame frame)
    {
    super(frame);
    getContentPane().add(getLabel());
    setLocation(100, 10);
    setSize(400, 20);
    setVisible(true);
    } JPopupMenu popup; private boolean mouseEntered; protected JLabel getLabel()
    {
    if (label == null)
    {
    label = new JLabel("       I AM ALARM1         THIS IS THE MSG2");
    label.setBorder(new LineBorder(Color.GREEN, 1, false));
    // Create the popup menu.
    popup = new JPopupMenu();
    JMenuItem menuItem = new JMenuItem("A popup menu item");
    popup.add(menuItem);
    label.addMouseMotionListener(new MouseMotionAdapter()
    {
    public void mouseDragged(MouseEvent e)
    {
    setLocation(getLocation().x + e.getPoint().x - p1.x, getLocation().y + e.getPoint().y - p1.y);
    }
    });
    label.addMouseListener(new MouseAdapterL(popup));
    }
    return label;
    }
    } /**
     * Launch the application
     * 
     * @param args
     */
    public static void main(String args[])
    {
    try
    {
    WindowTest frame = new WindowTest();
    ToolTipWindow win = frame.new ToolTipWindow(frame);
    win.toFront();
    (new Thread(win)).start();
    frame.setVisible(true);
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    } /**
     * Create the frame
     */
    public WindowTest()
    {
    super();
    setBounds(100, 100, 500, 375);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setExtendedState(JFrame.MAXIMIZED_BOTH);
    //
    }
    }