Hej,
Jeg har lidt problemer med et JPanel jeg tegner på og en scrollbar, hver
gang jeg scroller,
har får jeg grafisk "hukommelse" i siderne, eller i toppen og bunden hvis
jeg scroller den vej. Jeg har ledt en del på google efter andre
løsningsmetoder til tilføjelse af scrollbaren, men fandt ikke noget.
Jeg kunne forestille mig jeg skulle tvinge paint metoden til at køre efter
en scroll, men hvordan ved jeg hvornår det er ? synes ikke jeg kunne finde
noget om en action listener på en scrollbar ? Er der en anden metode der
kunne bruges evt ?
klasserne er (lidt forenklet) forneden
På forhånd tak
-Simon
public class GFX extends JPanel
{
public GFX() {}
public void paint(Graphics _g)
{
_g.setColor(Color.red);
_g.drawArc(100,100,2*50,2*50,90,180);
}
}
public class Frame1 extends JFrame
{
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout();
public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(borderLayout1);
setSize(new Dimension(400, 300));
JPanel gfx = new GFX();
Dimension dim = new Dimension(500,500);
gfx.setPreferredSize(dim);
gfx.setLayout(new BoxLayout(gfx, BoxLayout.X_AXIS));
JScrollPane scroll = new JScrollPane(gfx);
contentPane.add(scroll);
}
}
public class Application1 {
boolean packFrame = false;
/**
* Construct and show the application.
*/
public Application1() {
Frame1 frame = new Frame1();
// Validate frames that have preset sizes
// Pack frames that have useful preferred size info, e.g. from their
layout
if (packFrame) {
frame.pack();
} else {
frame.validate();
}
// Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.
getSystemLookAndFeelClassName());
} catch (Exception exception) {
exception.printStackTrace();
}
new Application1();
}
});
}
}
|