1   package org.freehep.graphicsio.ps.test;
2   
3   import java.awt.BorderLayout;
4   import java.awt.Color;
5   import java.awt.Graphics;
6   import java.awt.GridLayout;
7   import java.io.File;
8   import java.io.FileOutputStream;
9   import java.util.Properties;
10  
11  import javax.swing.BorderFactory;
12  import javax.swing.JButton;
13  import javax.swing.JFrame;
14  import javax.swing.JPanel;
15  
16  import org.freehep.graphicsio.ps.EPSExportFileType;
17  import org.freehep.util.export.ExportFileType;
18  
19  public class OffsetBug {
20  
21      public static void main(String[] args) {
22          JFrame frame = new JFrame();
23  
24          JPanel panel = new JPanel(new GridLayout(2, 2));
25          frame.getContentPane().add(panel);
26  
27          JPanel first = new SubPanel("First", Color.red);
28          panel.add(first);
29          JPanel second = new SubPanel("Second", Color.green);
30          panel.add(second);
31          JPanel third = new SubPanel("Third", Color.yellow);
32          panel.add(third);
33          JPanel fourth = new SubPanel("Fourth", Color.cyan);
34          panel.add(fourth);
35  
36          frame.pack();
37          frame.setVisible(true);
38  
39          ExportFileType epsOut = new EPSExportFileType();
40          try {
41  
42              File file;
43              FileOutputStream fos;
44  
45              System.out.println("\nPrinting first...\n");
46              file = new File("first.eps");
47              fos = new FileOutputStream(file);
48              epsOut.exportToFile(fos, first, frame, new Properties(), null);
49              fos.close();
50  
51              System.out.println("\nPrinting second...\n");
52              file = new File("second.eps");
53              fos = new FileOutputStream(file);
54              epsOut.exportToFile(fos, second, frame, new Properties(), null);
55              fos.close();
56  
57              System.out.println();
58              System.out.println("Two EPS files should have been generated:");
59              System.out.println("first.eps and second.eps.  These should ");
60              System.out.println("contain images of the first and second");
61              System.out.println("buttons properly scaled and clipped.");
62              System.out.println("");
63              System.out.println("If second.eps is not correct, then check ");
64              System.out.println("the clipping bounds which are initially ");
65              System.out.println("given to the printing component.");
66              System.out.println();
67  
68          } catch (Exception e) {
69              e.printStackTrace();
70          }
71      }
72  
73      static private class SubPanel extends JPanel {
74  
75          String label;
76  
77          public SubPanel(String label, Color color) {
78              super(new BorderLayout());
79              this.label = label;
80              setOpaque(true);
81              setBackground(color);
82  
83              setBorder(BorderFactory.createLineBorder(Color.black, 1));
84              JButton button = new TalkativeButton(label);
85              add(button, BorderLayout.CENTER);
86          }
87  
88          public void paintComponent(Graphics g) {
89              System.out.println("paintComponent called: " + label);
90              super.paintComponent(g);
91              System.out.println("graphics class: " + g.getClass());
92              System.out.println("Container clip: " + g.getClipBounds());
93              System.out.println("Container bounds: " + getBounds());
94          }
95  
96          public void paintChildren(Graphics g) {
97              System.out.println("clip (child.) " + g.getClipBounds());
98              super.paintChildren(g);
99          }
100     }
101 
102     static private class TalkativeButton extends JButton {
103 
104         public TalkativeButton(String label) {
105             super(label);
106         }
107 
108         public void paintComponent(Graphics g) {
109             System.out.println("button: " + getText());
110             super.paintComponent(g);
111         }
112     }
113 
114 }