Search code examples
javaswingjpaneljscrollpane

How to prevent JPanel from resizing to fill JScrollPane


Using Java, I am creating a form with GridBagLayout. the GUI is inside a JPanel, which is inside a scrollPane which is added to a JFrame.

I want the JPanel with the GUI to be a fixed size to prevent the form being stretched, however, I would like the JScrollPanel to be resizable for the user's preference. (Similar to MS Paint, with the canvas being my JPanel). The reason I want to prevent the form from being stretched is because I want it to print and from the way I have it now, the printed form prints pretty much the way I want it, but alters unfavorably if the frame as been resized prior to printing.

Perhaps my problem is better to be solved in the way I print, but the problem is that I have never dealt with this level of printing before and was unable to find similar questions/tutorials to help me solve my problem. The direction I am going may be "the poor man's way" of doing it, but its the only one that makes sense to me right now, I'm a fairly novice Java programmer.

FrontierMain.java

public class FrontierMain  {

public FrontierMain(){
    JFrame frame = new JFrame();
    frame.setTitle("Frontier Insulation Labor Record Tool");
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    LaborRecordPanel recordPanel = new LaborRecordPanel();
    frame.add(recordPanel.scrollPane);
    frame.pack();
    frame.setVisible(true);

}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            FrontierMain fm = new FrontierMain();   
        }
    });

    System.out.println("Hello, World");
}
}

LaborRecordPanel.java

public class LaborRecordPanel implements
Printable, ActionListener {

    private Color shade = new Color(201,201,201); // color for shaded cells

    private JLabel dateSpace[] = new JLabel[7]; 
    private JLabel grandTotalSpace = new JLabel();
    private JLabel locAndDescSpace = new JLabel();
    private JLabel personnelSpace[] = new JLabel[10]; //  empty cells
    private JLabel calendarGridLines[] = new JLabel[300]; //empty labels for gridlines

    private ImageIcon logoIcon = new ImageIcon("Images/fici_logo1.jpg");
    private JLabel logoLabel = new JLabel(logoIcon);

    private JLabel authorizedBy = new JLabel("AUTHORIZED BY:");
    private JLabel toCertify = new JLabel("THIS IS TO CERTIFY THAT THE ABOVE LABOR HAS BEEN PERFORMED.");

    private JLabel laborRecordNO = new JLabel("NO.");
    private JLabel nameOfJob = new JLabel("NAME OF JOB:");
    private JLabel customerPO = new JLabel("CUSTOMER PO #:");
    private JLabel contractNO = new JLabel("CONTRACT NO.");
    private JLabel weekEnding = new JLabel("WEEK ENDING");

    private JLabel personnelList = new JLabel("<html>LIST SUPERVISION &<br> CRAFT LABOR BELOW:</html>");
    private JLabel locAndDescriptionLabel = new JLabel("LOCATION AND DESCRIPTION:");

    private JLabel personnelTitle = new JLabel("TITLE");
    private JLabel supt = new JLabel("SUPT.");
    private JLabel foreman = new JLabel("FOREMAN");
    private JLabel[] mechanic= new JLabel[8];

    private JLabel calendarTitle = new JLabel("NUMBER OF HOURS WORKED @ SITE");
    private JLabel dayHeading = new JLabel("DAY");
    private JLabel dateHeading = new JLabel("DATE");
    private JLabel[] ot2 = new JLabel[10];
    private JLabel[] ot1 = new JLabel[10];
    private JLabel[] st = new JLabel[10];

    private JLabel mon = new JLabel("MON");
    private JLabel tues = new JLabel("TUES");
    private JLabel wed = new JLabel("WED");
    private JLabel thur = new JLabel("THUR");
    private JLabel fri = new JLabel("FRI");
    private JLabel sat = new JLabel("SAT");
    private JLabel sun = new JLabel("SUN");

    private JLabel totalHours = new JLabel("<html>TOTAL<br> HOURS</html>");
    private JLabel ratePerHour = new JLabel("<html>RATE<br> PER<br> HOUR</html>");
    private JLabel totalAmount = new JLabel("<html>TOTAL<br> AMOUNT</html>");
    private JLabel grandTotal = new JLabel("TOTAL");

    JPanel rp = new JPanel();
    JScrollPane scrollPane = new JScrollPane(rp);

    LaborRecordPanel(){

        rp.setPreferredSize(new Dimension(1295,1830 ));
        rp.setMinimumSize(new Dimension(1295,1830 ));
        rp.setMaximumSize(new Dimension(1295,1830 ));
        scrollPane.setPreferredSize(new Dimension(900,700 ));

        scrollPane.getVerticalScrollBar().setUnitIncrement(16); //increase the scroll speed

        for (int i = 0; i <= 7; i++) mechanic[i] = new JLabel("MECHANIC"); // create mechanic labels

        for (int i = 0; i <= 9; i++) //create labels for work time
        {
            ot2[i] = new JLabel("OT-2");
            ot1[i] = new JLabel("OT-1");
            st[i] = new JLabel("S.T.");
        }
        //create empty labels for gridlines
        for (int i = 0; i <= 9; i++) personnelSpace[i] = new JLabel(); 
        for (int i = 0; i <= 6; i++) dateSpace[i] = new JLabel();
        for (int i = 0; i <= 299; i++) calendarGridLines[i] = new JLabel();

        GridBagLayout gridbag = new GridBagLayout();
        rp.setBackground(Color.WHITE);
        rp.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
        GridBagConstraints gbc = new GridBagConstraints();
        rp.setLayout(gridbag);
        //gbc.insets = new Insets(5, 5, 5, 5);

        //row 0////////////////////////////////////////////////////////////
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 10;
        gbc.gridy = 0;
        gbc.weightx = 1;
        gbc.weighty = 1;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        laborRecordNO.setHorizontalAlignment(JLabel.CENTER);
        laborRecordNO.setFont(new Font("Dialog", Font.PLAIN, 18));
        gridbag.setConstraints(laborRecordNO, gbc);
        rp.add(laborRecordNO, gbc);

        //row 1////////////////////////////////////////////////////////////
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.gridwidth = 13;
        gridbag.setConstraints(logoLabel, gbc);
        rp.add(logoLabel, gbc);

        //row 2////////////////////////////////////////////////////////////
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        nameOfJob.setFont(nameOfJob.getFont().deriveFont(18.0f));
        gridbag.setConstraints(nameOfJob, gbc);
        rp.add(nameOfJob, gbc);

        gbc.gridx = 6;
        gbc.gridy = 2;
        gbc.gridheight = 1;
        gbc.gridwidth = 3;
        contractNO.setFont(contractNO.getFont().deriveFont(18.0f));
        gridbag.setConstraints(contractNO, gbc);
        rp.add(contractNO, gbc);

        //row 3////////////////////////////////////////////////////////////
        gbc.gridx = 0;
        gbc.gridy = 3;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        customerPO.setFont(customerPO.getFont().deriveFont(18.0f));
        gridbag.setConstraints(customerPO, gbc);
        rp.add(customerPO, gbc);

        gbc.gridx = 6;
        gbc.gridy = 3;
        gbc.gridheight = 1;
        gbc.gridwidth = 3;
        weekEnding.setFont(weekEnding.getFont().deriveFont(18.0f));
        gridbag.setConstraints(weekEnding, gbc);
        rp.add(weekEnding, gbc);

        //row 4////////////////////////////////////////////////////////////
        gbc.gridx = 0;
        gbc.gridy = 4;
        gbc.gridheight = 3;
        gbc.gridwidth = 1;
        personnelList.setHorizontalAlignment(JLabel.CENTER);
        personnelList.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
        personnelList.setFont(personnelList.getFont().deriveFont(18.0f));
        gridbag.setConstraints(personnelList, gbc);
        rp.add(personnelList, gbc);

        gbc.gridx = 1;
        gbc.gridy = 4;
        gbc.gridheight = 3;
        gbc.gridwidth = 1;
        personnelTitle.setHorizontalAlignment(JLabel.CENTER);
        personnelTitle.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.BLACK));
        personnelTitle.setFont(personnelTitle.getFont().deriveFont(18.0f));
        gridbag.setConstraints(personnelTitle, gbc);
        rp.add(personnelTitle, gbc);

        gbc.gridx = 2;
        gbc.gridy = 4;
        gbc.gridwidth = 8;
        gbc.gridheight = 1;
        calendarTitle.setHorizontalAlignment(JLabel.CENTER);
        calendarTitle.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 0, Color.BLACK));
        calendarTitle.setFont(calendarTitle.getFont().deriveFont(18.0f));
        gridbag.setConstraints(calendarTitle, gbc);
        rp.add(calendarTitle, gbc);

        gbc.gridx = 10;
        gbc.gridy = 4;
        gbc.gridheight = 3;
        gbc.gridwidth = 1;
        totalHours.setHorizontalAlignment(JLabel.CENTER);
        totalHours.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
        totalHours.setFont(totalHours.getFont().deriveFont(18.0f));
        gridbag.setConstraints(totalHours, gbc);
        rp.add(totalHours, gbc);

        gbc.gridx = 11;
        gbc.gridy = 4;
        gbc.gridheight = 3;
        gbc.gridwidth = 1;
        ratePerHour.setHorizontalAlignment(JLabel.CENTER);
        ratePerHour.setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.BLACK));
        ratePerHour.setFont(ratePerHour.getFont().deriveFont(18.0f));
        gridbag.setConstraints(ratePerHour, gbc);
        rp.add(ratePerHour, gbc);

        gbc.gridx = 12;
        gbc.gridy = 4;
        gbc.gridheight = 3;
        gbc.gridwidth = 1;
        totalAmount.setHorizontalAlignment(JLabel.CENTER);
        totalAmount.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 1, Color.BLACK));
        totalAmount.setFont(totalAmount.getFont().deriveFont(18.0f));
        gridbag.setConstraints(totalAmount, gbc);
        rp.add(totalAmount, gbc);

        //row 5//////////////////////////////////////////////////////////////////
        gbc.gridx = 2;
        gbc.gridy = 5;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        dayHeading.setHorizontalAlignment(JLabel.CENTER);
        dayHeading.setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
        dayHeading.setFont(dayHeading.getFont().deriveFont(18.0f));
        gridbag.setConstraints(dayHeading, gbc);
        rp.add(dayHeading, gbc);

        gbc.gridx = 3;
        gbc.gridy = 5;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        mon.setHorizontalAlignment(JLabel.CENTER);
        mon.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
        mon.setFont(mon.getFont().deriveFont(18.0f));
        gridbag.setConstraints(mon, gbc);
        rp.add(mon, gbc);

        gbc.gridx = 4;
        gbc.gridy = 5;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        tues.setHorizontalAlignment(JLabel.CENTER);
        tues.setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
        tues.setFont(tues.getFont().deriveFont(18.0f));
        gridbag.setConstraints(tues, gbc);
        rp.add(tues, gbc);

        gbc.gridx = 5;
        gbc.gridy = 5;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        wed.setHorizontalAlignment(JLabel.CENTER);
        wed.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
        wed.setFont(wed.getFont().deriveFont(18.0f));
        gridbag.setConstraints(wed, gbc);
        rp.add(wed, gbc);

        gbc.gridx = 6;
        gbc.gridy = 5;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        thur.setHorizontalAlignment(JLabel.CENTER);
        thur.setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
        thur.setFont(thur.getFont().deriveFont(18.0f));
        gridbag.setConstraints(thur, gbc);
        rp.add(thur, gbc);

        gbc.gridx = 7;
        gbc.gridy = 5;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        fri.setHorizontalAlignment(JLabel.CENTER);
        fri.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
        fri.setFont(fri.getFont().deriveFont(18.0f));
        gridbag.setConstraints(fri, gbc);
        rp.add(fri, gbc);

        gbc.gridx = 8;
        gbc.gridy = 5;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        sat.setHorizontalAlignment(JLabel.CENTER);
        sat.setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
        sat.setFont(sat.getFont().deriveFont(18.0f));
        gridbag.setConstraints(sat, gbc);
        rp.add(sat, gbc);

        gbc.gridx = 9;
        gbc.gridy = 5;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        sun.setHorizontalAlignment(JLabel.CENTER);
        sun.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
        sun.setFont(sun.getFont().deriveFont(18.0f));
        gridbag.setConstraints(sun, gbc);
        rp.add(sun, gbc);

        //row 6//////////////////////////////////////////////////////////////
        gbc.gridx = 2;
        gbc.gridy = 6;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        dateHeading.setHorizontalAlignment(JLabel.CENTER);
        dateHeading.setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
        dateHeading.setFont(dateHeading.getFont().deriveFont(18.0f));
        gridbag.setConstraints(dateHeading, gbc);
        rp.add(dateHeading, gbc);   

        int dateSpaceIndex = 3;
        boolean flip = true;
        for (int k = 0; k <= 6; k++)//create gridlines for day area
        {
            gbc.gridx = dateSpaceIndex;
            gbc.gridy = 6;
            gbc.gridheight = 1;
            gbc.gridwidth = 1;
            if(flip) dateSpace[k].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
            else dateSpace[k].setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
            gridbag.setConstraints(dateSpace[k], gbc);
            rp.add(dateSpace[k], gbc);
            dateSpaceIndex++;
            flip = !flip;
        }

        //row 7/////////////////////////////////////////////////////////////
        gbc.gridx = 1;
        gbc.gridy = 7;
        gbc.gridheight = 3;
        gbc.gridwidth = 1;
        supt.setHorizontalAlignment(JLabel.CENTER);
        supt.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
        supt.setFont(supt.getFont().deriveFont(18.0f));
        gridbag.setConstraints(supt, gbc);
        rp.add(supt, gbc);

        //row 10///////////////////////////////////////////////////////////
        gbc.gridx = 1;
        gbc.gridy = 10;
        gbc.gridheight = 3;
        gbc.gridwidth = 1;
        foreman.setHorizontalAlignment(JLabel.CENTER);
        foreman.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
        foreman.setFont(foreman.getFont().deriveFont(18.0f));
        gridbag.setConstraints(foreman, gbc);
        rp.add(foreman, gbc);

        //row 13-36 plus 7-12 time worked labels//////////////////////////
        for (int r = 0; r <= 7; r++)
        {
            gbc.gridx = 1;
            gbc.gridy = 13 + (3*r);
            gbc.gridheight = 3;
            gbc.gridwidth = 1;
            mechanic[r].setHorizontalAlignment(JLabel.CENTER);
            mechanic[r].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
            mechanic[r].setFont(mechanic[r].getFont().deriveFont(18.0f));
            gridbag.setConstraints(mechanic[r], gbc);
            rp.add(mechanic[r], gbc);
        }

        for (int c = 0; c <= 9; c++){
            gbc.gridx = 2;
            gbc.gridy = 7 + (3*c);
            gbc.gridheight = 1;
            gbc.gridwidth = 1;
            ot2[c].setHorizontalAlignment(JLabel.CENTER);
            ot2[c].setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
            ot2[c].setFont(ot2[c].getFont().deriveFont(18.0f));
            gridbag.setConstraints(ot2[c], gbc);
            rp.add(ot2[c], gbc);

            gbc.gridx = 2;
            gbc.gridy = 8 + (3*c);
            gbc.gridheight = 1;
            gbc.gridwidth = 1;
            ot1[c].setHorizontalAlignment(JLabel.CENTER);
            ot1[c].setOpaque(true);
            ot1[c].setBackground(shade);
            ot1[c].setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
            ot1[c].setFont(ot1[c].getFont().deriveFont(18.0f));
            gridbag.setConstraints(ot1[c], gbc);
            rp.add(ot1[c], gbc);

            gbc.gridx = 2;
            gbc.gridy = 9 + (3*c);
            gbc.gridheight = 1;
            gbc.gridwidth = 1;
            st[c].setHorizontalAlignment(JLabel.CENTER);
            st[c].setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
            st[c].setFont(st[c].getFont().deriveFont(18.0f));
            gridbag.setConstraints(st[c], gbc);
            rp.add(st[c], gbc);
        }
        //row 37/////////////////////////////////////////////////////////////////
        gbc.gridx = 0;
        gbc.gridy = 37;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        locAndDescriptionLabel.setFont(locAndDescriptionLabel.getFont().deriveFont(18.0f));
        gridbag.setConstraints(locAndDescriptionLabel, gbc);
        rp.add(locAndDescriptionLabel);

        gbc.gridx = 11;
        gbc.gridy = 37;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        grandTotal.setHorizontalAlignment(JLabel.CENTER);
        grandTotal.setOpaque(true);
        grandTotal.setBackground(Color.BLACK);
        grandTotal.setForeground(Color.WHITE);
        grandTotal.setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
        grandTotal.setFont(grandTotal.getFont().deriveFont(18.0f));
        gridbag.setConstraints(grandTotal, gbc);
        rp.add(grandTotal);

        gbc.gridx = 12;
        gbc.gridy = 37;
        gbc.gridwidth = 1;
        gbc.gridheight = 1;
        grandTotalSpace.setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
        gridbag.setConstraints(grandTotalSpace, gbc);
        rp.add(grandTotalSpace);

        //row 38////////////////////////////////////////////////////////////////
        gbc.gridx = 0;
        gbc.gridy = 38;
        gbc.gridwidth = 10;
        gbc.gridheight = 1;
        gbc.ipady = 80;
        locAndDescSpace.setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
        gridbag.setConstraints(locAndDescSpace, gbc);
        rp.add(locAndDescSpace);

        //row 39////////////////////////////////////////////////////////////////
        gbc.ipady = 0; //reset to default
        gbc.gridx = 0;
        gbc.gridy = 39;
        gbc.gridheight = 1;
        gbc.gridwidth = 2;
        toCertify.setFont(toCertify.getFont().deriveFont(18.0f));
        gridbag.setConstraints(toCertify, gbc);
        rp.add(toCertify);

        //row 40///////////////////////////////////////////////////////////////
        gbc.gridx = 0;
        gbc.gridy = 40;
        gbc.gridheight = 1;
        gbc.gridwidth = 3;
        authorizedBy.setFont(authorizedBy.getFont().deriveFont(18.0f));
        gridbag.setConstraints(authorizedBy, gbc);
        rp.add(authorizedBy);


        for (int r = 0; r <= 9; r++)//gridlines for personnel space
        {
            gbc.gridx = 0;
            gbc.gridy = 7 + (3*r);
            gbc.gridheight = 3;
            gbc.gridwidth = 1;
            personnelSpace[r].setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
            gridbag.setConstraints(personnelSpace[r], gbc);
            rp.add(personnelSpace[r]);
        }
        //create calendar grid lines
        int yPointer = 7;
        int xPointer = 3;
        int shadePtr = 8;
        for (int j = 0; j <= 299; j++)
        {
            gbc.gridx = xPointer;
            gbc.gridy = yPointer;
            gbc.gridheight = 1;
            gbc.gridwidth = 1;
            calendarGridLines[j].setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK));
            if (yPointer == shadePtr){ //if row number = shadePtr then color the cell
                calendarGridLines[j].setOpaque(true);
                calendarGridLines[j].setBackground(shade);
            }
            gridbag.setConstraints(calendarGridLines[j], gbc);
            rp.add(calendarGridLines[j]);
            xPointer++; //go to next cell in row
            j++; //use the next jlabel
            gbc.gridx = xPointer;
            gbc.gridy = yPointer;
            gbc.gridheight = 1;
            gbc.gridwidth = 1;
            calendarGridLines[j].setBorder(BorderFactory.createMatteBorder(0, 1, 1, 1, Color.BLACK));
            if (yPointer == shadePtr){ //if row number = shadePtr then color the cell
                calendarGridLines[j].setOpaque(true);
                calendarGridLines[j].setBackground(shade);
            }
            gridbag.setConstraints(calendarGridLines[j], gbc);
            rp.add(calendarGridLines[j]);

            xPointer++; //go to next cell in row

            if(xPointer == 13) //if end of column then go to next row and reset column pointer to 3 and increment shade pointer by 3
            {
                yPointer++; //go down a row
                xPointer = 3;
                if((j % 3) == 0) {
                    shadePtr = yPointer;
                }
            }
        }

        JButton printTest = new JButton("PrintTest");
        printTest.addActionListener(this);
        gbc.gridx = 0;
        gbc.gridy = 41;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        gridbag.setConstraints(printTest, gbc);
        rp.add(printTest);

    }
    @Override
    public void actionPerformed(ActionEvent e) {
        PrinterJob printJob = PrinterJob.getPrinterJob();
        printJob.setPrintable(this);
        if (printJob.printDialog()){
            try{
                printJob.print();
            }
            catch(Exception ex){
                throw new RuntimeException(ex);
            }
        }

    }
    @Override
    public int print(Graphics g, PageFormat pf, int index)
            throws PrinterException {
        Graphics2D g2 = (Graphics2D)g;
        if (index >= 1){
            return Printable.NO_SUCH_PAGE;
        }
        else {
            AffineTransform originalTransform = g2.getTransform();

            double scaleX = pf.getImageableWidth() / rp.getWidth();
            double scaleY = pf.getImageableHeight() / rp.getHeight();
            // Maintain aspect ratio
            double scale = Math.min(scaleX, scaleY);
            g2.translate(pf.getImageableX(), pf.getImageableY());
            g2.scale(scale, scale);
            rp.printAll(g2);

            g2.setTransform(originalTransform);
            return Printable.PAGE_EXISTS;
        }
    }

}

Solution

  • I put my main GUI panel inside another JPanel, which sits inside the JScrollPane. This prevents my main GUI from resizing to the frame size; instead the "outer" JPanel is what gets resized.