/* * * TestWrapped.java version 0.1 * * Copyright (C) 2008 Piet Blok. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Created on 5 aug 2008 */ package org.pbjar.jxlayer.test; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.LayoutManager; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.io.IOException; import java.util.Date; import java.util.List; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JCheckBoxMenuItem; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.Scrollable; import javax.swing.SwingUtilities; import org.jdesktop.jxlayer.JXLayer; /** * TODO Program description * * @author Piet Blok */ public class TestWrapped { /** * @param args */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { try { new TestWrapped().test(); } catch (IOException e) { e.printStackTrace(); } } }); } @SuppressWarnings("unchecked") private void test() throws IOException { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 400); frame.setLocationRelativeTo(null); JMenuBar menubar = new JMenuBar(); frame.setJMenuBar(menubar); GeneralLayerUI[] layerUIs = new GeneralLayerUI[] { new MouseDrawingUI(), new HideCursorUI(500), new MagnifierUI(), }; JMenu menu = new JMenu("Options"); menubar.add(menu); // for (GeneralLayerUI layerUI : layerUIs) { // addActions(menu, layerUI.getName(), layerUI.getActions()); // } frame.add(createTarget(frame, "Target", menu, layerUIs)); frame.setVisible(true); } private void addActions(JMenu menu, String name, List actionList) { // JMenu menu = new JMenu(name); // parentMenu.add(menu); for (Action action : actionList) { if (action instanceof FlipFlop) { JCheckBoxMenuItem item = new JCheckBoxMenuItem(action); menu.add(item); item.setSelected(((FlipFlop) action).getState()); } else { menu.add(action); } } } private static abstract class ScrollablePanel extends JPanel implements Scrollable { public ScrollablePanel(LayoutManager layout) { super(layout); } } @SuppressWarnings("unchecked") private JComponent createTarget (JFrame frame, String id, JMenu menubar, GeneralLayerUI[] layerUIs) { JTextPane originalComponent = new JTextPane() { private static final long serialVersionUID = 1L; @Override public boolean getScrollableTracksViewportWidth() { return true; } }; try { originalComponent.setPage(this.getClass().getResource( "WrapTest.html")); } catch (IOException e) { e.printStackTrace(); } originalComponent.setEditable(false); // JMenu menu = new JMenu(id); // menubar.add(menu); JComponent wrappingTarget = originalComponent; // for (GeneralLayerUI layerUI : layerUIs) { // wrappingTarget = new JXLayer(wrappingTarget, layerUI); // addActions(menu, layerUI.getName(), layerUI // .getActions((JXLayer) wrappingTarget)); // } for (GeneralLayerUI layerUI : layerUIs) { wrappingTarget = new JXLayer(wrappingTarget, layerUI); JMenu menu = new JMenu(layerUI.getName()); menubar.add(menu); addActions(menu, layerUI.getName(), layerUI.getActions()); addActions(menu, layerUI.getName(), layerUI .getActions((JXLayer) wrappingTarget)); } return new JScrollPane(wrappingTarget); } @SuppressWarnings({ "unchecked", "unused" }) private JComponent createTargetNew(JFrame frame, String id, JMenu menubar, GeneralLayerUI[] layerUIs) { final JTextPane textPane = new JTextPane() { private static final long serialVersionUID = 1L; @Override public boolean getScrollableTracksViewportWidth() { return true; } }; final JLabel messageLabel = new JLabel("Message"); JButton button = new JButton(new AbstractAction("A button") { private static final long serialVersionUID = 1L; @Override public void actionPerformed(ActionEvent event) { messageLabel.setText(new Date().toString()); } }); try { textPane.setPage(this.getClass().getResource("WrapTest.html")); } catch (IOException e) { e.printStackTrace(); } textPane.setEditable(false); JComponent originalComponent = new ScrollablePanel(new BorderLayout()) { private static final long serialVersionUID = 1L; @Override public Dimension getPreferredScrollableViewportSize() { return textPane.getPreferredScrollableViewportSize(); } @Override public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { return textPane.getScrollableBlockIncrement(visibleRect, orientation, direction); } @Override public boolean getScrollableTracksViewportHeight() { return textPane.getScrollableTracksViewportHeight(); } @Override public boolean getScrollableTracksViewportWidth() { return textPane.getScrollableTracksViewportWidth(); } @Override public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { return textPane.getScrollableUnitIncrement(visibleRect, orientation, direction); } }; originalComponent.add(messageLabel, BorderLayout.PAGE_START); originalComponent.add(textPane, BorderLayout.CENTER); originalComponent.add(button, BorderLayout.PAGE_END); JComponent wrappingTarget = originalComponent; for (GeneralLayerUI layerUI : layerUIs) { wrappingTarget = new JXLayer(wrappingTarget, layerUI); JMenu menu = new JMenu(layerUI.getName()); menubar.add(menu); addActions(menu, layerUI.getName(), layerUI.getActions()); addActions(menu, layerUI.getName(), layerUI .getActions((JXLayer) wrappingTarget)); } return new JScrollPane(wrappingTarget); } }