| /* Demo.java -- Shows examples of AWT components |
| Copyright (C) 1998, 1999, 2002, 2004, 2006 Free Software Foundation, Inc. |
| |
| This file is part of GNU Classpath examples. |
| |
| GNU Classpath is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Classpath is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Classpath; see the file COPYING. If not, write to the |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
| 02110-1301 USA. */ |
| |
| package gnu.classpath.examples.awt; |
| |
| import java.awt.BorderLayout; |
| import java.awt.Button; |
| import java.awt.Canvas; |
| import java.awt.Checkbox; |
| import java.awt.CheckboxGroup; |
| import java.awt.CheckboxMenuItem; |
| import java.awt.Choice; |
| import java.awt.Color; |
| import java.awt.Cursor; |
| import java.awt.Dialog; |
| import java.awt.Dimension; |
| import java.awt.DisplayMode; |
| import java.awt.FileDialog; |
| import java.awt.FlowLayout; |
| import java.awt.Font; |
| import java.awt.Frame; |
| import java.awt.Graphics; |
| import java.awt.GraphicsDevice; |
| import java.awt.GraphicsEnvironment; |
| import java.awt.GridLayout; |
| import java.awt.Image; |
| import java.awt.Insets; |
| import java.awt.Label; |
| import java.awt.List; |
| import java.awt.Menu; |
| import java.awt.MenuBar; |
| import java.awt.MenuItem; |
| import java.awt.MenuShortcut; |
| import java.awt.Panel; |
| import java.awt.ScrollPane; |
| import java.awt.TextField; |
| import java.awt.Toolkit; |
| import java.awt.Window; |
| import java.awt.datatransfer.DataFlavor; |
| import java.awt.datatransfer.StringSelection; |
| import java.awt.datatransfer.Transferable; |
| import java.awt.datatransfer.UnsupportedFlavorException; |
| import java.awt.dnd.DnDConstants; |
| import java.awt.dnd.DragGestureEvent; |
| import java.awt.dnd.DragGestureListener; |
| import java.awt.dnd.DragSource; |
| import java.awt.dnd.DragSourceContext; |
| import java.awt.dnd.DragSourceDragEvent; |
| import java.awt.dnd.DragSourceDropEvent; |
| import java.awt.dnd.DragSourceEvent; |
| import java.awt.dnd.DragSourceListener; |
| import java.awt.dnd.DropTarget; |
| import java.awt.dnd.DropTargetDragEvent; |
| import java.awt.dnd.DropTargetDropEvent; |
| import java.awt.dnd.DropTargetEvent; |
| import java.awt.dnd.DropTargetListener; |
| import java.awt.dnd.InvalidDnDOperationException; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| import java.awt.event.ItemEvent; |
| import java.awt.event.ItemListener; |
| import java.awt.event.MouseAdapter; |
| import java.awt.event.MouseEvent; |
| import java.awt.event.WindowAdapter; |
| import java.awt.event.WindowEvent; |
| import java.net.URL; |
| import java.util.Enumeration; |
| import java.util.Hashtable; |
| import java.util.Vector; |
| |
| class Demo |
| { |
| public static void main(String args[]) |
| { |
| MainWindow f = new MainWindow(); |
| f.show(); |
| } |
| |
| static interface SubWindow |
| { |
| public void init (); |
| } |
| |
| static class PrettyPanel extends Panel |
| { |
| Insets myInsets; |
| |
| public PrettyPanel () |
| { |
| myInsets = new Insets (10, 10, 10, 10); |
| } |
| public Insets getInsets () |
| { |
| return myInsets; |
| } |
| } |
| |
| static abstract class PrettyFrame extends Frame |
| { |
| public PrettyFrame () |
| { |
| ((BorderLayout) getLayout ()).setHgap (5); |
| ((BorderLayout) getLayout ()).setVgap (5); |
| } |
| |
| public Insets getInsets() |
| { |
| Insets oldInsets = super.getInsets (); |
| return new Insets (oldInsets.top+10, |
| oldInsets.left+10, |
| oldInsets.bottom+10, |
| oldInsets.right+10); |
| } |
| } |
| |
| static abstract class SubFrame extends PrettyFrame implements SubWindow |
| { |
| boolean initted = false; |
| |
| public void setVisible (boolean visible) |
| { |
| if (!initted && visible) |
| init(); |
| super.setVisible (visible); |
| } |
| } |
| |
| static class MainWindow extends PrettyFrame implements ActionListener |
| { |
| Button closeButton; |
| |
| Hashtable windows; |
| Vector buttons; |
| |
| void addSubWindow (String name, SubWindow w) |
| { |
| Button b = new Button (name); |
| b.addActionListener (this); |
| |
| buttons.addElement (b); |
| windows.put (b, w); |
| } |
| |
| MainWindow () |
| { |
| MenuBar mb = new MenuBar (); |
| Menu menu = new Menu ("File"); |
| Menu submenu = new Menu ("Testing", true); |
| submenu.add (new CheckboxMenuItem ("FooBar")); |
| submenu.add (new CheckboxMenuItem ("BarFoo")); |
| menu.add (submenu); |
| menu.add (new MenuItem("Orange")); |
| MenuItem quit = new MenuItem("Quit", new MenuShortcut('Q')); |
| quit.addActionListener(new ActionListener() |
| { |
| public void actionPerformed(ActionEvent e) |
| { |
| System.exit(0); |
| } |
| }); |
| menu.add(quit); |
| mb.add (menu); |
| |
| menu = new Menu("Edit", true); |
| menu.add(new MenuItem("Cut")); |
| menu.add(new MenuItem("Copy")); |
| menu.add(new MenuItem("Paste")); |
| mb.add (menu); |
| |
| Menu helpMenu = new Menu("Help"); |
| helpMenu.add(new MenuItem("About")); |
| mb.add(helpMenu); |
| mb.setHelpMenu(helpMenu); |
| |
| setMenuBar (mb); |
| |
| String version = System.getProperty("gnu.classpath.version"); |
| add (new Label ("GNU Classpath " + version), "North"); |
| |
| closeButton = new Button ("Close"); |
| closeButton.addActionListener (this); |
| closeButton.setFont (new Font ("Serif", Font.BOLD | Font.ITALIC, 18)); |
| add (closeButton, "South"); |
| |
| windows = new Hashtable (); |
| buttons = new Vector (); |
| |
| addSubWindow ("Buttons", new ButtonsWindow ()); |
| addSubWindow ("Cursors", new CursorsWindow ()); |
| addSubWindow ("Dialog", new DialogWindow (this)); |
| addSubWindow ("File", new FileWindow (this)); |
| addSubWindow ("Labels", new LabelWindow ()); |
| addSubWindow ("List", new ListWindow ()); |
| addSubWindow ("Radio Buttons", new RadioWindow ()); |
| addSubWindow ("TextField", new TextFieldWindow ()); |
| addSubWindow ("RandomTests", new TestWindow (this)); |
| addSubWindow ("RoundRect", new RoundRectWindow ()); |
| addSubWindow ("Animation", new AnimationWindow ()); |
| addSubWindow ("Resolution", new ResolutionWindow ()); |
| addSubWindow ("Fullscreen", new FullscreenWindow ()); |
| addSubWindow ("Drag n' Drop", new DragDropWindow ()); |
| |
| Panel sp = new Panel(); |
| PrettyPanel p = new PrettyPanel(); |
| p.setLayout (new GridLayout (windows.size(), 1)); |
| |
| for (Enumeration e = buttons.elements (); e.hasMoreElements (); ) |
| { |
| p.add ((Button) e.nextElement ()); |
| } |
| |
| sp.add (p); |
| add (sp, "Center"); |
| |
| setTitle ("AWT Demo"); |
| pack(); |
| } |
| |
| public void actionPerformed (ActionEvent evt) |
| { |
| Button source = (Button) evt.getSource (); |
| |
| if (source==closeButton) |
| { |
| dispose(); |
| System.exit (0); |
| } |
| |
| Window w = (Window) windows.get (source); |
| if (w.isVisible ()) |
| w.dispose (); |
| else |
| { |
| if (w instanceof Dialog) |
| { |
| w.show(); |
| } |
| else |
| { |
| w.setVisible (true); |
| } |
| } |
| } |
| } |
| |
| static class ButtonsWindow extends SubFrame implements ActionListener |
| { |
| Button b[] = new Button [9]; |
| |
| public void init () |
| { |
| initted = true; |
| Panel p = new Panel (); |
| p.setLayout (new GridLayout (0, 3, 5, 5)); |
| |
| for (int i=0; i<9; i++) |
| { |
| b[i]=new Button ("button" + (i+1)); |
| b[i].addActionListener (this); |
| } |
| |
| p.add (b[0]); |
| p.add (b[6]); |
| p.add (b[4]); |
| p.add (b[8]); |
| p.add (b[1]); |
| p.add (b[7]); |
| p.add (b[3]); |
| p.add (b[5]); |
| p.add (b[2]); |
| |
| add (p, "North"); |
| |
| Button cb = new Button ("close"); |
| cb.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) { |
| dispose(); |
| } |
| }); |
| add (cb, "South"); |
| setTitle ("Buttons"); |
| pack(); |
| } |
| |
| public void actionPerformed (ActionEvent evt) |
| { |
| Button source = (Button) evt.getSource (); |
| |
| for (int i = 0; i < 9; i++) |
| { |
| if (source == b[i]) |
| { |
| int i2 = ((i + 1) == 9) ? 0 : (i + 1); |
| if (b[i2].isVisible()) |
| b[i2].setVisible(false); |
| else |
| b[i2].setVisible(true); |
| } |
| } |
| } |
| } |
| |
| |
| static class DialogWindow extends Dialog implements SubWindow |
| { |
| Label text; |
| Frame parent; |
| boolean initted = false; |
| |
| public DialogWindow (Frame f) |
| { |
| super (f, true); |
| |
| this.parent = f; |
| |
| addWindowListener (new WindowAdapter () |
| { |
| public void windowClosing (WindowEvent e) |
| { |
| text.setVisible (false); |
| hide (); |
| } |
| }); |
| } |
| |
| public void setVisible (boolean visible) |
| { |
| if (!initted && visible) |
| init(); |
| super.setVisible (visible); |
| } |
| |
| public void show () |
| { |
| if (!initted) |
| init(); |
| super.show (); |
| } |
| |
| public void init () |
| { |
| text = new Label ("Dialog Test"); |
| text.setAlignment (Label.CENTER); |
| |
| add (text, "North"); |
| text.setVisible (false); |
| |
| Panel p = new PrettyPanel(); |
| |
| Button cb = new Button ("OK"); |
| cb.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) |
| { |
| text.setVisible (false); |
| hide(); |
| } |
| }); |
| |
| p.setLayout (new GridLayout (1, 3)); |
| ((GridLayout) p.getLayout ()).setHgap (5); |
| ((GridLayout) p.getLayout ()).setVgap (5); |
| p.add (cb); |
| |
| Button toggle = new Button ("Toggle"); |
| p.add (toggle); |
| |
| toggle.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) |
| { |
| if (text.isVisible ()) |
| text.setVisible (false); |
| else |
| text.setVisible (true); |
| doLayout(); |
| } |
| }); |
| |
| Button subdlg = new Button ("SubDialog"); |
| p.add (subdlg); |
| |
| subdlg.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) |
| { |
| DialogWindow sw = new DialogWindow (parent); |
| sw.show (); |
| } |
| }); |
| |
| add (p, "South"); |
| setTitle ("Dialog"); |
| pack(); |
| } |
| } |
| |
| static class CursorsWindow extends SubFrame implements ItemListener |
| { |
| Choice cursorChoice; |
| Canvas cursorCanvas; |
| |
| public void init () |
| { |
| cursorChoice = new Choice(); |
| cursorChoice.add ("Default"); |
| cursorChoice.add ("Crosshair"); |
| cursorChoice.add ("Text"); |
| cursorChoice.add ("Wait"); |
| cursorChoice.add ("Southwest Resize"); |
| cursorChoice.add ("Southeast Resize"); |
| cursorChoice.add ("Northwest Resize"); |
| cursorChoice.add ("Northeast Resize"); |
| cursorChoice.add ("North Resize"); |
| cursorChoice.add ("South Resize"); |
| cursorChoice.add ("West Resize"); |
| cursorChoice.add ("East Resize"); |
| cursorChoice.add ("Hand"); |
| cursorChoice.add ("Move"); |
| |
| cursorChoice.addItemListener(this); |
| |
| add (cursorChoice, "North"); |
| |
| cursorCanvas = new Canvas () |
| { |
| public void paint (Graphics g) |
| { |
| Dimension d = this.getSize(); |
| g.setColor(Color.white); |
| g.fillRect(0, 0, d.width, d.height/2); |
| g.setColor(Color.black); |
| g.fillRect(0, d.height/2, d.width, d.height/2); |
| g.setColor(this.getBackground()); |
| g.fillRect(d.width/3, d.height/3, d.width/3, |
| d.height/3); |
| } |
| }; |
| |
| cursorCanvas.setSize (80,80); |
| |
| add (cursorCanvas, "Center"); |
| |
| Button cb = new Button ("Close"); |
| cb.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) { |
| dispose(); |
| } |
| }); |
| |
| add (cb, "South"); |
| setTitle ("Cursors"); |
| pack(); |
| } |
| |
| public void itemStateChanged (ItemEvent e) |
| { |
| int index = cursorChoice.getSelectedIndex(); |
| cursorCanvas.setCursor(Cursor.getPredefinedCursor(index)); |
| } |
| } |
| |
| static class TextFieldWindow extends SubFrame implements ItemListener |
| { |
| Checkbox editable, visible, sensitive; |
| TextField text; |
| |
| public void init () |
| { |
| initted = true; |
| text = new TextField ("hello world"); |
| add (text, "North"); |
| |
| Panel p = new Panel(); |
| p.setLayout (new GridLayout (3, 1)); |
| ((GridLayout) p.getLayout ()).setHgap (5); |
| ((GridLayout) p.getLayout ()).setVgap (5); |
| |
| editable = new Checkbox("Editable", true); |
| p.add (editable); |
| editable.addItemListener (this); |
| |
| visible = new Checkbox("Visible", true); |
| p.add (visible); |
| visible.addItemListener (this); |
| |
| sensitive = new Checkbox("Sensitive", true); |
| p.add (sensitive); |
| sensitive.addItemListener (this); |
| |
| add (p, "Center"); |
| |
| Button cb = new Button ("Close"); |
| cb.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) { |
| dispose(); |
| } |
| }); |
| |
| add (cb, "South"); |
| setTitle ("TextField"); |
| pack(); |
| } |
| |
| public void itemStateChanged (ItemEvent e) |
| { |
| boolean on=true; |
| |
| if (e.getStateChange () == ItemEvent.DESELECTED) |
| on=false; |
| if (e.getSource() == editable) |
| text.setEditable (on); |
| if (e.getSource() == visible) |
| if (on) |
| text.setEchoChar ((char) 0); |
| else |
| text.setEchoChar ('*'); |
| if (e.getSource() == sensitive) |
| text.setEnabled (on); |
| |
| } |
| } |
| |
| static class FileWindow extends FileDialog implements SubWindow |
| { |
| boolean initted = false; |
| |
| public FileWindow (MainWindow mw) |
| { |
| super (mw); |
| } |
| |
| public void setVisible (boolean visible) |
| { |
| if (!initted && visible) |
| init(); |
| super.setVisible (visible); |
| } |
| |
| public void init() |
| { |
| initted = true; |
| } |
| } |
| |
| static class LabelWindow extends SubFrame |
| { |
| public void init () |
| { |
| initted = true; |
| |
| Panel p = new Panel(); |
| p.setLayout (new GridLayout (3, 1)); |
| ((GridLayout) p.getLayout ()).setHgap (5); |
| ((GridLayout) p.getLayout ()).setVgap (5); |
| |
| p.add (new Label ("left justified label", Label.LEFT)); |
| p.add (new Label ("center justified label", Label.CENTER)); |
| p.add (new Label ("right justified label", Label.RIGHT)); |
| |
| add (p, "Center"); |
| |
| Button cb = new Button ("Close"); |
| cb.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) { |
| dispose(); |
| } |
| }); |
| |
| add (cb, "South"); |
| setTitle ("Labels"); |
| pack(); |
| } |
| } |
| |
| static class ListWindow extends SubFrame |
| { |
| public void init () |
| { |
| initted = true; |
| |
| Panel p = new Panel (); |
| p.setLayout (new GridLayout (3, 1)); |
| |
| List l = new List (5, true); |
| for (int i = 0; i < 10; i++) |
| l.add ("List item " + i); |
| |
| p.add (l); |
| |
| add (p, "Center"); |
| |
| Button cb = new Button ("Close"); |
| cb.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) { |
| dispose(); |
| } |
| }); |
| |
| add (cb, "South"); |
| setTitle ("List"); |
| pack(); |
| } |
| } |
| |
| |
| static class RadioWindow extends SubFrame |
| { |
| public void init () |
| { |
| initted = true; |
| |
| Panel p = new Panel(); |
| p.setLayout (new GridLayout (3, 1)); |
| ((GridLayout) p.getLayout ()).setHgap (5); |
| ((GridLayout) p.getLayout ()).setVgap (5); |
| |
| final CheckboxGroup cg = new CheckboxGroup(); |
| final Checkbox[] boxes = new Checkbox[3]; |
| for (int i = 0; i < 3; ++i) |
| { |
| boxes[i] = new Checkbox("button" + i, cg, i == 0); |
| p.add(boxes[i]); |
| } |
| |
| add (p, "North"); |
| |
| p = new Panel(); |
| p.setLayout (new GridLayout (1, 3)); |
| ((GridLayout) p.getLayout ()).setHgap (5); |
| ((GridLayout) p.getLayout ()).setVgap (5); |
| |
| for (int i = 0; i < 3; ++i) |
| { |
| final int val = i; |
| Button tweak = new Button ("Set " + i); |
| tweak.addActionListener(new ActionListener () |
| { |
| public void actionPerformed (ActionEvent e) |
| { |
| cg.setSelectedCheckbox(boxes[val]); |
| } |
| }); |
| p.add(tweak); |
| } |
| |
| add (p, "Center"); |
| |
| Button cb = new Button ("Close"); |
| cb.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) { |
| dispose(); |
| } |
| }); |
| |
| add (cb, "South"); |
| setTitle ("Radio Buttons"); |
| pack(); |
| } |
| } |
| |
| static class TestWindow extends SubFrame |
| { |
| static int xs = 5, ys = 5; |
| final Frame parent; |
| |
| public TestWindow(Frame f) |
| { |
| parent = f; |
| } |
| |
| public void init() |
| { |
| initted = true; |
| |
| addWindowListener (new WindowAdapter () |
| { |
| public void windowClosing (WindowEvent e) |
| { |
| hide (); |
| } |
| }); |
| |
| Panel pan = new Panel(); |
| |
| final Label l = new Label ("Pithy Message:"); |
| l.setCursor (Cursor.getPredefinedCursor (Cursor.WAIT_CURSOR)); |
| pan.add (l); |
| |
| TextField tf = new TextField("Hello world!"); |
| pan.add(tf); |
| add(pan,"North"); |
| |
| final Image img; |
| URL imageurl; |
| imageurl = this.getClass() |
| .getResource("/gnu/classpath/examples/icons/big-warning.png"); |
| img = Toolkit.getDefaultToolkit().createImage(imageurl); |
| |
| final Canvas ch = new Canvas() |
| { |
| public void paint (Graphics g) |
| { |
| g.drawImage(img, xs + 25, ys + 25, this); |
| |
| Font font = new Font ("Serif", Font.PLAIN, 18); |
| g.setFont (font); |
| g.setXORMode (Color.red); |
| |
| g.drawString("Hi Red!", xs + 15, ys + 10); |
| g.setColor (Color.blue); |
| g.drawLine (xs, ys, xs + 100, ys + 100); |
| |
| } |
| }; |
| ch.setSize(150, 150); |
| add(ch, "Center"); |
| |
| final ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); |
| final Panel p = new Panel(); |
| p.add(new Button("Stop")); |
| p.add(new Button("evil")); |
| p.add(new Button("hoarders")); |
| p.add(new Button("use")); |
| p.add(new Button("GNU!")); |
| |
| sp.add(p); |
| add(sp, "South"); |
| |
| Panel east_panel = new Panel(); |
| east_panel.setLayout(new GridLayout (0,1)); |
| |
| CheckboxGroup group = new CheckboxGroup(); |
| Checkbox cb = new Checkbox("one", group, true); |
| east_panel.add(cb); |
| cb = new Checkbox("two", group, false); |
| east_panel.add(cb); |
| |
| add(east_panel,"East"); |
| |
| final Button wb = new Button(); |
| wb.setLabel("Hello World!"); |
| wb.addActionListener(new ActionListener() |
| { |
| public void actionPerformed (ActionEvent e) |
| { |
| l.setText ("Hello World!"); |
| |
| final Dialog d = new Dialog(parent); |
| d.setLayout(new FlowLayout()); |
| d.setModal(true); |
| Button b = new Button("foobar"); |
| b.addMouseListener(new MouseAdapter() |
| { |
| public void mousePressed (MouseEvent me) |
| { |
| d.hide (); |
| } |
| }); |
| d.add (b); |
| |
| List ch = new List(); |
| ch.add("Ding"); |
| ch.add("September"); |
| ch.add("Red"); |
| ch.add("Quassia"); |
| ch.add("Pterodactyl"); |
| d.add(ch); |
| |
| d.pack (); |
| d.show (); |
| } |
| }); |
| |
| wb.addMouseListener(new MouseAdapter() |
| { |
| public void mousePressed(MouseEvent e) { |
| xs++; |
| ys++; |
| ch.repaint (); |
| } |
| }); |
| |
| add(wb,"West"); |
| |
| pack(); |
| show(); |
| |
| sp.setScrollPosition (10,0); |
| |
| Toolkit t = Toolkit.getDefaultToolkit(); |
| t.beep(); |
| } |
| } |
| |
| static class ResolutionWindow extends SubFrame |
| { |
| GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); |
| |
| public void init () |
| { |
| initted = true; |
| |
| setTitle("Change Screen Resolution"); |
| final List list = new List(); |
| DisplayMode[] modes = gd.getDisplayModes(); |
| |
| for (int i=0;i<modes.length;i++ ) |
| list.add(modes[i].getWidth() + "x" |
| + modes[i].getHeight() |
| + ((modes[i].getBitDepth() != DisplayMode.BIT_DEPTH_MULTI) |
| ? "x" + modes[i].getBitDepth() + "bpp" |
| : "") |
| + ((modes[i].getRefreshRate() != DisplayMode.REFRESH_RATE_UNKNOWN) |
| ? "@" + modes[i].getRefreshRate() + "Hz" |
| : "")); |
| |
| ActionListener al = new ActionListener() |
| { |
| public void actionPerformed(ActionEvent ae) |
| { |
| int i = list.getSelectedIndex(); |
| gd.setDisplayMode(gd.getDisplayModes()[i]); |
| } |
| }; |
| |
| Button b = new Button("Switch"); |
| Button c = new Button("Close"); |
| |
| list.addActionListener(al); |
| b.addActionListener(al); |
| |
| c.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) { |
| dispose(); |
| } |
| }); |
| |
| setLayout(new GridLayout(3, 1, 5, 5)); |
| add(list); |
| add(b); |
| add(c); |
| |
| pack(); |
| } |
| } |
| |
| static class DragDropWindow |
| extends SubFrame |
| implements ActionListener, DropTargetListener |
| { |
| DragLabel source = new DragLabel("Drag and drop me to the following Button", |
| Label.CENTER); |
| |
| Button target = new Button(); |
| |
| public void init() |
| { |
| source.setForeground(Color.red); |
| add(source, BorderLayout.NORTH); |
| |
| target.addActionListener(this); |
| add(target, BorderLayout.SOUTH); |
| |
| new DropTarget(target, DnDConstants.ACTION_COPY_OR_MOVE, this); |
| |
| setSize(205, 100); |
| |
| pack(); |
| } |
| |
| public void actionPerformed(ActionEvent e) |
| { |
| Button b = (Button) e.getSource(); |
| b.setLabel(""); |
| } |
| |
| public void dragEnter(DropTargetDragEvent e) |
| { |
| } |
| |
| public void dragExit(DropTargetEvent e) |
| { |
| } |
| |
| public void dragOver(DropTargetDragEvent e) |
| { |
| } |
| |
| public void drop(DropTargetDropEvent e) |
| { |
| try |
| { |
| Transferable t = e.getTransferable(); |
| |
| if (e.isDataFlavorSupported(DataFlavor.stringFlavor)) |
| { |
| e.acceptDrop(e.getDropAction()); |
| |
| String s; |
| s = (String) t.getTransferData(DataFlavor.stringFlavor); |
| |
| target.setLabel(s); |
| |
| e.dropComplete(true); |
| } |
| else |
| e.rejectDrop(); |
| } |
| catch (java.io.IOException e2) |
| { |
| } |
| catch (UnsupportedFlavorException e2) |
| { |
| } |
| } |
| |
| public void dropActionChanged(DropTargetDragEvent e) |
| { |
| } |
| |
| class DragLabel |
| extends Label |
| implements DragGestureListener, DragSourceListener |
| { |
| private DragSource ds = DragSource.getDefaultDragSource(); |
| |
| public DragLabel(String s, int alignment) |
| { |
| super(s, alignment); |
| int action = DnDConstants.ACTION_COPY_OR_MOVE; |
| ds.createDefaultDragGestureRecognizer(this, action, this); |
| } |
| |
| public void dragGestureRecognized(DragGestureEvent e) |
| { |
| try |
| { |
| Transferable t = new StringSelection(getText()); |
| e.startDrag(DragSource.DefaultCopyNoDrop, t, this); |
| } |
| catch (InvalidDnDOperationException e2) |
| { |
| System.out.println(e2); |
| } |
| } |
| |
| public void dragDropEnd(DragSourceDropEvent e) |
| { |
| if (e.getDropSuccess() == false) |
| return; |
| |
| int action = e.getDropAction(); |
| if ((action & DnDConstants.ACTION_MOVE) != 0) |
| setText(""); |
| } |
| |
| public void dragEnter(DragSourceDragEvent e) |
| { |
| DragSourceContext ctx = e.getDragSourceContext(); |
| |
| int action = e.getDropAction(); |
| if ((action & DnDConstants.ACTION_COPY) != 0) |
| ctx.setCursor(DragSource.DefaultCopyDrop); |
| else |
| ctx.setCursor(DragSource.DefaultCopyNoDrop); |
| } |
| |
| public void dragExit(DragSourceEvent e) |
| { |
| } |
| |
| public void dragOver(DragSourceDragEvent e) |
| { |
| } |
| |
| public void dropActionChanged(DragSourceDragEvent e) |
| { |
| } |
| } |
| } |
| |
| static class FullscreenWindow extends SubFrame |
| { |
| GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); |
| |
| public void init () |
| { |
| initted = true; |
| |
| setTitle("Fullscreen Exclusive Mode"); |
| |
| ActionListener al = new ActionListener() |
| { |
| public void actionPerformed(ActionEvent ae) |
| { |
| if (gd.getFullScreenWindow() == FullscreenWindow.this) |
| gd.setFullScreenWindow(null); |
| else |
| gd.setFullScreenWindow(FullscreenWindow.this); |
| } |
| }; |
| |
| Button b = new Button("Toggle Fullscreen"); |
| Button c = new Button("Close"); |
| |
| b.addActionListener(al); |
| |
| c.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) { |
| gd.setFullScreenWindow(null); |
| dispose(); |
| } |
| }); |
| |
| setLayout(new GridLayout(3, 1, 5, 5)); |
| add(b); |
| add(c); |
| |
| pack(); |
| } |
| } |
| |
| static class RoundRectWindow extends SubFrame |
| { |
| public void init () |
| { |
| initted = true; |
| setTitle("RoundRect"); |
| setLayout(new BorderLayout()); |
| add(new DrawRoundRect(), "West"); |
| Button cb = new Button ("Close"); |
| cb.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) { |
| dispose(); |
| } |
| }); |
| add(cb, "Center"); |
| add(new FillRoundRect(), "East"); |
| pack(); |
| } |
| |
| static class DrawRoundRect extends Panel |
| { |
| |
| public Dimension getPreferredSize() |
| { |
| return new Dimension(500, 500); |
| } |
| |
| public void paint( Graphics g ) |
| { |
| // left side |
| |
| // rectangles should be identical |
| g.setColor(Color.red); |
| g.drawRect(50, 50, 300, 100); |
| g.setColor(Color.black); |
| g.drawRoundRect(50, 50, 300, 100, 0, 0); |
| |
| // small round corners |
| g.setColor(Color.red); |
| g.drawRect(50, 200, 300, 100); |
| g.setColor(Color.black); |
| g.drawRoundRect(50, 200, 300, 100, 25, 25); |
| |
| // round ends |
| g.setColor(Color.red); |
| g.drawRect(50, 350, 300, 100); |
| g.setColor(Color.black); |
| g.drawRoundRect(50, 350, 300, 100, 25, 100); |
| |
| // right side |
| |
| // circle only |
| g.setColor(Color.blue); |
| g.drawOval(375, 50, 100, 100); |
| |
| // round rectangle should exactly cover circle |
| g.setColor(Color.blue); |
| g.drawOval(375, 200, 100, 100); |
| g.setColor(Color.black); |
| g.drawRoundRect(375, 200, 100, 100, 100, 100); |
| |
| // round rectangle should look like a circle |
| g.setColor(Color.red); |
| g.drawRect(375, 350, 100, 100); |
| g.setColor(Color.black); |
| g.drawRoundRect(375, 350, 100, 100, 100, 100); |
| } |
| } |
| |
| static class FillRoundRect extends Panel |
| { |
| |
| public Dimension getPreferredSize() |
| { |
| return new Dimension(500, 500); |
| } |
| |
| public void paint( Graphics g ) |
| { |
| // left side |
| |
| // rectangles should be identical |
| g.setColor(Color.red); |
| g.fillRect(50, 50, 300, 100); |
| g.setColor(Color.black); |
| g.fillRoundRect(50, 50, 300, 100, 0, 0); |
| |
| // small round corners |
| g.setColor(Color.red); |
| g.fillRect(50, 200, 300, 100); |
| g.setColor(Color.black); |
| g.fillRoundRect(50, 200, 300, 100, 25, 25); |
| |
| // round ends |
| g.setColor(Color.red); |
| g.fillRect(50, 350, 300, 100); |
| g.setColor(Color.black); |
| g.fillRoundRect(50, 350, 300, 100, 25, 100); |
| |
| // right side |
| |
| // circle only |
| g.setColor(Color.blue); |
| g.fillOval(375, 50, 100, 100); |
| |
| // round rectangle should exactly cover circle |
| g.setColor(Color.blue); |
| g.fillOval(375, 200, 100, 100); |
| g.setColor(Color.black); |
| g.fillRoundRect(375, 200, 100, 100, 100, 100); |
| |
| // round rectangle should look like a circle |
| g.setColor(Color.red); |
| g.fillRect(375, 350, 100, 100); |
| g.setColor(Color.black); |
| g.fillRoundRect(375, 350, 100, 100, 100, 100); |
| } |
| } |
| } |
| |
| static class AnimationWindow extends SubFrame |
| { |
| AnimationApplet a; |
| public void init () |
| { |
| initted = true; |
| setTitle("Animation"); |
| Button cb = new Button ("Close"); |
| cb.addActionListener(new ActionListener () { |
| public void actionPerformed (ActionEvent e) |
| { |
| if (a != null) |
| { |
| a.destroy(); |
| dispose(); |
| } |
| } |
| }); |
| a = new AnimationApplet(); |
| add(a, "Center"); |
| add(cb, "South"); |
| pack(); |
| } |
| |
| public void show() |
| { |
| super.show(); |
| a.init(); |
| a.run(); |
| } |
| } |
| } |