swingserver.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 116 行

JAVA
116
字号
/*
 * $Id: SwingServer.java,v 1.4 2004/02/28 09:20:54 epr Exp $
 */
package org.jnode.test.gui.swing;

import java.awt.Graphics;
import java.awt.event.MouseEvent;

import javax.swing.JPanel;
import javax.swing.event.MouseInputListener;

import org.jnode.wt.desktop.JNDesktop;
import org.jnode.wt.desktop.JNDesktopManager;
import org.jnode.wt.desktop.JNodeEvent;
import org.jnode.wt.events.JNodeMouseEvent;

/**
 * Server for JNComponents. This class creates the connection between JNDesktopManager and
 * FrameBuffer devices.
 *
 * @author Ewout Prangsma (epr@users.sourceforge.net)
 */
public class SwingServer extends JPanel {
    final JNDesktop desktop;
    JNDesktopManager desktopManager = JNDesktopManager.getDesktopManager();

    Mouser mouser = new Mouser();

    public SwingServer() {
//        this.desktop = new JNDesktop();
        desktopManager.addDesktop();
        this.desktop = desktopManager.getCurrentDesktop();
        addMouseListener(mouser);
        addMouseMotionListener(mouser);
        Runnable repainter = new Runnable() {
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(100);
                        SwingServer.this.repaint();
                    } catch (InterruptedException e) {
                        e.printStackTrace();  //To change body of catch statement use Options | File Templates.
                    }
                }
            }
        };
        Thread t = new Thread(repainter);
        t.start();
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        desktop.invalidate();
        desktop.validate();
        desktop.paint(g);
        desktop.update(g);
    }

    final void doUpdate() {
        super.repaint();
    }

    class Mouser implements MouseInputListener {
        org.jnode.wt.components.JNComponent targetComponent;

        private JNodeEvent toJNodeEvent(MouseEvent e) {
            org.jnode.wt.components.JNComponent component = desktop.getComponentAt(e.getX(), e.getY());
            if (component == null)
                component = desktop;
            return toJNodeEvent(e, component);
        }

        private JNodeEvent toJNodeEvent(MouseEvent e, org.jnode.wt.components.JNComponent target) {
            JNodeEvent event = new JNodeMouseEvent(target, e.getID(), e.getX(), e.getY(), e.getButton());
            this.targetComponent = target;
            return event;
        }

        public void mouseClicked(MouseEvent e) {
            desktopManager.postEvent(toJNodeEvent(e));
            doUpdate();
        }

        public void mousePressed(MouseEvent e) {
            desktopManager.postEvent(toJNodeEvent(e));
            doUpdate();
        }

        public void mouseReleased(MouseEvent e) {
            desktopManager.postEvent(toJNodeEvent(e));
            doUpdate();
        }

        public void mouseEntered(MouseEvent e) {
            desktopManager.postEvent(toJNodeEvent(e));
            doUpdate();
        }

        public void mouseExited(MouseEvent e) {
            desktopManager.postEvent(toJNodeEvent(e));
            doUpdate();
        }

        public void mouseDragged(MouseEvent e) {
            desktopManager.postEvent(toJNodeEvent(e, targetComponent));//don't switch targets on a drag
            doUpdate();
        }

        public void mouseMoved(MouseEvent e) {
            desktopManager.postEvent(toJNodeEvent(e));
            doUpdate();
        }

    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?