package samples; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Formatter; import java.util.Timer; import java.util.TimerTask; import javax.imageio.ImageIO; import org.jdesktop.lg3d.sg.Appearance; import org.jdesktop.lg3d.sg.ImageComponent2D; import org.jdesktop.lg3d.sg.Shape3D; import org.jdesktop.lg3d.sg.Texture; import org.jdesktop.lg3d.sg.Texture2D; import org.jdesktop.lg3d.sg.utils.image.TextureLoader; import org.jdesktop.lg3d.sg.TransparencyAttributes; import org.jdesktop.lg3d.utils.action.ActionNoArg; import org.jdesktop.lg3d.utils.action.ColorAlphaChangeAction; import org.jdesktop.lg3d.utils.action.ScaleAction; import org.jdesktop.lg3d.utils.eventaction.ComponentMover; import org.jdesktop.lg3d.utils.eventadapter.MouseClickedEventAdapter; import org.jdesktop.lg3d.utils.eventadapter.MouseEnteredEventAdapter; import org.jdesktop.lg3d.utils.shape.FuzzyEdgePanel; import org.jdesktop.lg3d.utils.shape.SimpleAppearance; import org.jdesktop.lg3d.wg.Component3D; import org.jdesktop.lg3d.wg.Container3D; import org.jdesktop.lg3d.wg.Cursor3D; import org.jdesktop.lg3d.wg.Frame3D; import org.jdesktop.lg3d.wg.event.LgEventSource; import org.jdesktop.lg3d.wg.event.MouseEvent3D; public class LgClock { // メートル変換用 0.0254 [inch/m] / 72.0f [pixel/inch] private static final float UNIT_TRANS_FACTOR = 0.0254f / 72.0f; private static final int WIDTH = 200; private static final int HEIGHT = 20; private static final float DEPTH = 0.005f; private static final float EDGE = 0.0f; private BufferedImage image; private Appearance appearance; private Formatter formatter; private StringBuilder builder; public LgClock() { Frame3D frame3d = new Frame3D(); appearance = new SimpleAppearance(1.0f, 1.0f, 1.0f, 1.0f, SimpleAppearance.ENABLE_TEXTURE | SimpleAppearance.DISABLE_CULLING); appearance.setCapability(Appearance.ALLOW_TEXTURE_WRITE); float width = WIDTH * UNIT_TRANS_FACTOR; float height = HEIGHT * UNIT_TRANS_FACTOR; Shape3D panel = new FuzzyEdgePanel(width, height, EDGE, appearance); panel.setCapability(Shape3D.ALLOW_APPEARANCE_READ); Component3D comp3d = new Component3D(); comp3d.addChild(panel); frame3d.addChild(comp3d); frame3d.setSize(width * 1.2f, height * 1.2f, DEPTH); doEnableToMove(comp3d); doEnabltToExit(frame3d, comp3d); startAnimation(); frame3d.setCapabilities(); frame3d.setActive(true); frame3d.setVisible(true); } public void startAnimation() { // テクスチャの作成 image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB); builder = new StringBuilder(); formatter = new Formatter(builder); TimerTask task = new TimerTask() { public void run() { Graphics2D g = (Graphics2D)image.getGraphics(); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.setBackground(new Color(0, 0, 0, 0)); g.clearRect(0, 0, WIDTH, HEIGHT); g.setColor(Color.WHITE); g.setFont(new Font("Serif", Font.BOLD, 20)); builder.setLength(0); formatter.format("%1$tY.%1$tb.%1$td %1$tH:%1$tM:%1$tS", System.currentTimeMillis()); g.drawString(formatter.toString(), 10, 18); g.dispose(); TextureLoader loader = new TextureLoader(image); appearance.setTexture(loader.getTexture()); } }; Timer timer = new Timer(); timer.scheduleAtFixedRate(task, 0L, 1000L); } private void doEnableToMove(Component3D comp3d) { // Component3D を移動できるようにする new ComponentMover(comp3d); // カーソルの変更 comp3d.setCursor(Cursor3D.MOVE_CURSOR); } private void doEnabltToExit(final Frame3D frame3d, Component3D comp3d) { new MouseClickedEventAdapter( comp3d, new ActionNoArg() { public void performAction(LgEventSource source) { System.out.println("PerformAction3"); frame3d.changeActivity(false); } }, MouseEvent3D.ButtonId.BUTTON3); } public static void main(String[] args) { new LgClock(); } }