2016-04-25 11 views
0

Ich möchte eine einfache Anwendung, in der Frame ein bestimmtes Bild zeigt und nimmt seine Größe.Pack-Methode Größenanpassung JPanel

Mein Problem ist, dass pack Methode erhöht contentPane's Breite und ich bin mir nicht sicher, warum es so passiert. Vielen Dank im Voraus. Hier

ist der Code:

public class MyFrame extends JFrame { 

private JPanel contentPane; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 

       MyFrame frame = new MyFrame(); 
       frame.pack(); 
       frame.setLocationByPlatform(true); 
       frame.setVisible(true); 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public MyFrame() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    contentPane = new JPanel(); 
    contentPane.setBorder(null); 
    contentPane.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); 
    MapPanel map=new MapPanel("img/strawberry.jpg"); 
    map.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); 
    contentPane.add(map); 

    setContentPane(contentPane); 
} 

} 

/** 
* My panel containing the image 
*/ 

public class MapPanel extends JPanel { 

private BufferedImage img=null; 
/** 
* Create the panel. 
*/ 
public MapPanel(String url){ 
     super(); 
     try{ 
      img = ImageIO.read(getClass().getResource(url)); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
     this.setBorder(null); 
     Dimension imgsize=new Dimension(img.getWidth(),img.getHeight()); 
     setPreferredSize(imgsize); 
     setSize(imgsize); 
     setMinimumSize(imgsize); 
     setMaximumSize(imgsize); 

} 

@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 

    Graphics2D g2=(Graphics2D)g; 
    g2.drawImage(img, 0, 0, null); 
} 

@Override 
public Dimension getPreferredSize() { 
     if (img != null) { 
     return new Dimension(img.getWidth(), img.getHeight()); 
     } 
     return super.getPreferredSize(); // default 
    } 
} 
+1

* erweitert * - Damit, was meinst du? Der Code scheint gut zu funktionieren und wie erwartet für mich – MadProgrammer

+1

Obwohl ich 'setPreferred/Minimum/MaximumSize' und' setSize' loswerden würde – MadProgrammer

+0

In einigen Fällen funktionierte es auch für mich, aber wenn ich ein kleines Bild (80x80) Es ist auf 124x80 skaliert. – tomekn

Antwort

0

Nach Window ‚s pack Methode javadoc:

Ursachen dieses Fenster so bemessen werden, um die gewünschte Größe und Layouts seiner Subkomponenten zu passen. Die resultierende Breite und Höhe des Fensters werden automatisch vergrößert, wenn eine der Dimensionen kleiner als die Mindestgröße ist, die beim vorherigen Aufruf der setMinimumSize-Methode angegeben wurde. Wenn das Fenster und/oder sein Besitzer noch nicht angezeigt werden können, werden beide angezeigt, bevor die bevorzugte Größe berechnet wird. Das Fenster wird validiert, nachdem seine Größe berechnet wurde.

MyFrame erstreckt JFRame, was "ist, dass Pack Methode erhöht contentPane Breite Mein Problem" Window

+1

Vielen Dank. – tomekn