2014-02-14 35 views
0

使用Java,我創建使用GridBagLayout的一種形式。 GUI位於JPanel內部,該JPanel位於添加到JFrame的scrollPane中。如何防止從JPanel中調整,以填補JScrollPane的

我想用GUI JPanel的是一個固定的大小,以防止被拉伸的形式,但是,我想JScrollPanel是可調整大小的用戶的偏好。 (類似於MS Paint,畫布是我的JPanel)。我想,以防止形式從被拉伸的原因是因爲我希望它打印,並從我現在的方式,如果幀被之前調整印刷形式印刷品幾乎我想要的方式,而會不利改變打印。

也許我的問題最好是用我打印的方式解決,但問題是我從來沒有處理過這個級別的打印,並且無法找到類似的問題/教程來幫助我解決問題。我將可能是「窮人的方式」做的,但它是唯一一個對我來說很有意義,現在的方向,我是一個相當新手Java程序員。

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; 
     } 
    } 

} 

回答

0

我把我的主GUI面板中的另一個JPanel的,它位於JScrollPane的內內「重繪/無效」。這可以防止我的主GUI調整爲幀大小;相反,「外部」JPanel是被調整大小的。

0

在您的JPanel您可以同時使用:

setSize(w, h) 
setPreferredSize() 

或者可能添加一個C omponent聽衆手動處理上的resize事件

JPanel component = new JPanel(); 
component.addComponentListener(new ComponentListener() 
{ 
     public void componentResized(ComponentEvent evt) { 
      Component c = (Component)evt.getSource(); 
      //........ 
     } 
}); 
+0

我讀過使用的setSize似乎一般都可以不兌現,所以我用serPreferredSize代替。另外,根據這樣的回答:HTTP://stackoverflow.com/questions/10157235/how-do-i-disable-a-jpanel-so-that-it-cant-change-size-in-java,jpanels不可調整大小的用戶 –

+0

因此......問題解決了! – floppy12