Witam, chcę wewnątrz Frame(używam GridBagLayout) dodać ScrollPane, który pozwoli mi na przesuwanie umieszczonego w jego wnętrzu Panela. Rozmiar panela w trakcie działania programu zmienia swój rozmiar. I właśnie tu pojawia się problem - przy zmienia rozmiaru panela, nie zmienia się zakres w którym mogę przesuwać suwakiem. Będę bardzo wdzięczny za pomoc w rozwiązaniu problemu (w awt, nie w Swingu).
0
0
poniżej zamieszczam fragment kodu.
MyPanel panel=new MyPanel();
ScrollPane scroll = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
Klasa MyPanel:
public class MyPanel extends Panel
{
volatile BufferedImage sygnal;
public MyPanel()
{
super();
clearImage(800, 300);
}
public void clearImage(int szer, int wys)
{
setPreferredSize(new Dimension(szer, wys));
sygnal=new BufferedImage( szer , wys , BufferedImage.TYPE_INT_RGB);
for(int x=0; x<szer; x++)
for(int y=0; y<wys; y++)
sygnal.setRGB(x, y,(Color.white).getRGB());
this.repaint();
}
public void initialize()
{
setPreferredSize(new Dimension(10000,300));
setVisible(true);
}
public void paint( Graphics g )
{
g.drawImage(sygnal, 0, 0, this);
}
}
Inicjalizacja w innej klasie(dziedziczącej po Frame):
public void init()
{
setBackground(Color.gray);
panel.initialize();
drawLayout();
scroll.setPreferredSize(new Dimension(800,300));
scroll.add(panel);
pack();
setVisible(true);
scroll.setVisible(true);
Wewnątrz funkcji drawLayout:
gbc.weightx=1; gbc.weighty=1;
gbc.fill=GridBagConstraints.NONE;
gbc.anchor=GridBagConstraints.NORTHWEST;
changeConstraints(gbc, 1, 0, 15,1);
grid.setConstraints(scroll, gbc);
add(scroll);
Chcąc zmienić rozmiar panela, z głównej klasy(dziedziczącej po Frame) wywołuje metodę panel.clearImage() , jednak nie powoduje to zmiany zakresu suwaka ze ScrollPane. Próbowałem zaraz po wywołaniu clearImage zmieniać rozmiar ScrollPane za pomocą setSize, setPreferredSize itd ale nie przynosiło to żadnych efektów. Bardzo proszę o jakieś wskazówki.