package org.freehep.graphicsio.ps.test; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.io.File; import java.io.FileOutputStream; import java.util.Properties; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import org.freehep.graphicsio.ps.EPSExportFileType; import org.freehep.util.export.ExportFileType; public class ScrollTest { public static void main(String[] args) { JFrame frame = new JFrame(); JPanel jcomponent = new TestPanel(); jcomponent.setLayout(new BoxLayout(jcomponent, BoxLayout.X_AXIS)); JScrollPane scroll = new JScrollPane(jcomponent); frame.setContentPane(scroll); scroll.setPreferredSize(new Dimension(300, 50)); // Make a long row of buttons. int xmax = 32; for (int x = 0; x < xmax; x++) { JPanel button = new TestSubPanel("Test:" + x); jcomponent.add(button); } // Make the frame visible. frame.pack(); frame.setVisible(true); // Reset the scroll bar to the middle of the row. JScrollBar bar = scroll.getHorizontalScrollBar(); int max = bar.getMaximum(); int min = bar.getMinimum(); bar.setValue((max + min) / 2); ExportFileType epsOut = new EPSExportFileType(); try { File file; FileOutputStream fos; System.out.println("\nPrinting image...\n"); file = new File("ScrollTest.eps"); fos = new FileOutputStream(file); epsOut.exportToFile(fos, scroll, frame, new Properties(), null); fos.close(); System.out.println(); System.out.println("An image of the frame should have been "); System.out.println("produced (ScrollTest.eps). If this image "); System.out.println("is not correct, then check the clipping"); System.out.println("rectangles in the graphics code."); System.out.println(); } catch (Exception e) { e.printStackTrace(); } } static class TestSubPanel extends JPanel { private String label = null; public TestSubPanel(String label) { super(new BorderLayout(), false); this.label = label; setBorder(BorderFactory.createLineBorder(Color.black, 1)); JButton button = new JButton(label); add(button, "North"); } public String getLabel() { return label; } public void paintComponent(Graphics g) { System.out.println("Draw subpanel: " + label + " " + g.getClip()); super.paintComponent(g); } } static class TestPanel extends JPanel { public TestPanel() { } public void paintComponent(Graphics g) { System.out.println("Draw panel: " + g.getClip()); super.paintComponent(g); } } }