Witam,
mam problem z odświeżaniem pasków przewijania w JScrollPane, gdy zmienia się rozmiar komponentu.
Pomóźcie proszę:)
wrzucam kod by zilustrować dokładnie problem, mamy kwadrat i dwa przyciski, które zmnieniają rozmiar kwadratu. Jak zwiększamy przyciskiem, paski przewijania się nie pojawiają. Pojawią się jednak gdy tylko zmienimy rozmiar ramki myszką.
Jak należy odświeżać te paski?
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
public class test{
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run(){
JFrame ramka=new Ramka();
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setVisible(true);
}
});
}
}
class Ramka extends JFrame{
public Ramka(){
setSize(300,300);
JScrollPane scrollKwadrat=new JScrollPane(kwadrat);
add(scrollKwadrat);
JButton powieksz=new JButton("Powiększ");
JButton zmniejsz=new JButton("zmniejsz");
add(powieksz, BorderLayout.NORTH);
add(zmniejsz, BorderLayout.SOUTH);
powieksz.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
kwadrat.powieksz();
}});
zmniejsz.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent event){
kwadrat.zmniejsz();
}});
}
Kradrat kwadrat=new Kradrat();
}
class Kradrat extends JComponent{
public Kradrat(){
}
public void paintComponent(Graphics g){
super.paintComponent(g);
this.setPreferredSize(new Dimension(a, a));
Graphics2D g2=(Graphics2D)g;
g2.setColor(Color.red);
g2.fillRect(0,0,a,a);
}
public void powieksz(){
a+=20;
repaint();
}
public void zmniejsz(){
a-=20;
repaint();
}
private int a=200;
}
pozdrawiam,
Tomek