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
}
}
* erweitert * - Damit, was meinst du? Der Code scheint gut zu funktionieren und wie erwartet für mich – MadProgrammer
Obwohl ich 'setPreferred/Minimum/MaximumSize' und' setSize' loswerden würde – MadProgrammer
In einigen Fällen funktionierte es auch für mich, aber wenn ich ein kleines Bild (80x80) Es ist auf 124x80 skaliert. – tomekn