Bardzo proszę o pomoc albo chociaż podpowiedź dotyczącą poniższego zadania.
Do wykonania miałem program wyświetlający obrazy w ich oryginalnych rozmiarach przy czym jednym z warunków było, aby obrazek powiększał się wraz ze zwiększaniem obszaru wykreślania.
Problem w tym, że nie posłużyłem się w tym wypadku metodami paintComponent(Graphics g) itp., itd. i teraz mam problem z dodaniem tej właściwości programu, a nie chcę też z kolei pisać go od nowa.
Wyszukałem, że GridBagConstraints() ma coś takiego jak weightx, które za to odpowiada, ale może nie do końca zrozumiałem dokumentację...

Specifying weights is an art that can have a significant impact on the appearance of the components a GridBagLayout controls. Weights are used to determine how to distribute space among columns (weightx) and among rows (weighty); this is important for specifying resizing behavior.

Próbowałem zakombinować z tym weightx, ale niestety nic to nie dało.


import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

class Panel extends JPanel{

    Image img;
    private final JFrame frame;
    private final JPanel panel;
    private int size;
    GridBagConstraints c;

    Panel(int size){
        super();
        frame = new JFrame();
        frame.setLayout(new GridBagLayout());
        panel = new JPanel();
        c = new GridBagConstraints();
        // ??? //
        frame.add(panel, c);
        frame.setSize(400,400);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.size = size;
    }


    public void setVisible(boolean visible) {
        frame.setVisible(visible);
    }


    public void addImage(String path){
        try {
        if (path.contains("png") || path.contains("jpg") || path.contains("gif")) {
            BufferedImage myPicture = ImageIO.read(new File(path));

            JLabel picLabel = new JLabel(new ImageIcon(myPicture));


            if (panel.getComponentCount() > 0)
                panel.remove(0);

            panel.add(picLabel);
            SwingUtilities.updateComponentTreeUI(frame);
        }
        else {
            showText("Brak obrazka", frame);
        }
        } catch (IOException e) {
            showText("Brak obrazka", frame);
        }
    }

    private void showText(String text, JFrame frame) {
        JLabel jlabel = new JLabel(text);
        jlabel.setFont(new Font("Verdana", 1, size));

        if (panel.getComponentCount() > 0)
            panel.remove(0);
        panel.add(jlabel);


        SwingUtilities.updateComponentTreeUI(frame);
    }

    public void end(){
        showText("Koniec prezentacji", frame);
    }
}


import javax.swing.*;
import java.io.File;
import java.util.LinkedList;
import java.util.List;


public class Main extends JPanel{

  private final int sleep;

  public Main(int sleep) {
    this.sleep = sleep*1000;
  }

  public static void main(String[] args) throws InterruptedException {

    final int sleep = Integer.parseInt(args[1]);
    Main main = new Main(sleep);
    main.createPanel(Integer.parseInt(args[2]));

    File f = new File(args[0]);
    String[] paths = f.list();
    LinkedList<String> absolutePaths = new LinkedList<>();

    for (String path : paths)
      absolutePaths.add(f.getAbsolutePath() + f.separator + path);

    //for (String path : paths) {
      main.mainScreen.setVisible(true);
      main.addImage(absolutePaths);


    }


  private void addImage(List<String> paths) {
    for (String path: paths)
    try {
      mainScreen.addImage(path);
      Thread.sleep(sleep);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    mainScreen.end();
  }

  private Panel mainScreen;

  public void createPanel(int size){
    mainScreen = new Panel(size);
  }
}