Guten Tag,
ich habe mir ein Programm geschrieben welches Bilder einlesen soll.
Das Bild wird während das Programm schon läuft in ein JPanel gezeichnet, damit ich dieses Bild scrollen kann, wenn es größer ist, liegt diese JPanel in einem JScrollPane.
Nachdem das Bild nun aber in das JPanel gezeichnet wurde und das Bild auch größer ist, müssten die ScrollBars erscheinen nun leider tun diese das erst wenn ich danach z.B. die Fenstergröße ändere. Deshalb wollte ich mal fragen wieso dies so ist und wie ich das richtig hinbekomme (mit repaint() müsste es doch eigentlich funktionieren, mehr wird bei dem Ändern der Fenstergröße doch auch nicht aufgerufen oder?).
Meine Quellcode:
Bild eingelesen, keine Scrollbars:
Größe des Fensters verändert, Scrollbars erscheinen:
ich habe mir ein Programm geschrieben welches Bilder einlesen soll.
Das Bild wird während das Programm schon läuft in ein JPanel gezeichnet, damit ich dieses Bild scrollen kann, wenn es größer ist, liegt diese JPanel in einem JScrollPane.
Nachdem das Bild nun aber in das JPanel gezeichnet wurde und das Bild auch größer ist, müssten die ScrollBars erscheinen nun leider tun diese das erst wenn ich danach z.B. die Fenstergröße ändere. Deshalb wollte ich mal fragen wieso dies so ist und wie ich das richtig hinbekomme (mit repaint() müsste es doch eigentlich funktionieren, mehr wird bei dem Ändern der Fenstergröße doch auch nicht aufgerufen oder?).
Meine Quellcode:
Java:
public class Test extends JPanel {
public static void main(String[] args) {
new Test();
}
JFrame mainFrame;
JScrollPane scrollPane;
BufferedImage bild;
public Test() {
//frame
mainFrame = new JFrame("Test");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 200));
//Menuebar
JMenuBar menueBar = new JMenuBar();
JMenu dateiMenue = new JMenu("Datei");
menueBar.add(dateiMenue);
JMenuItem oeffneDatei = new JMenuItem("Öffnen");
dateiMenue.add(oeffneDatei);
oeffneDatei.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
bild = ImageIO.read(getClass().getResource("img.jpg"));
repaint();
} catch (IOException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
mainFrame.setJMenuBar(menueBar);
//komponenten zum frame adden
setLayout(new BorderLayout());
scrollPane = new JScrollPane(this);
mainFrame.add(scrollPane);
mainFrame.pack();
mainFrame.setVisible(true);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if(bild!=null) {
g.drawImage(bild, 0, 0, this);
setPreferredSize(new Dimension(bild.getWidth(), bild.getHeight()));
}
}
}
Bild eingelesen, keine Scrollbars:
Größe des Fensters verändert, Scrollbars erscheinen: