Hallo,
ich habe folgendes Problem und komm einfach nicht weiter. Ich nutze einen JSlider um eine Variable einer Rechenoperation zu verändern und habe dem Slider einen ChangeListener hinzugefügt, so dass bei einem "Slide" die Berechnung neu durchgeführt wird und der Text (das Ergebnis) auf einem JLabel dargestellt wird. Natürlich immer das aktuelle Ergebnis. ;-)
Das Problem ist nun Folgendes:
Der JSlider und auch das JLabel liegen auf einem JPanel, welches ich wie folgt zusammenbaue:
In der Klasse AbstractPanel überschreibe ich ja die Methode paintComponent, um ein Hintergrundbild auf dem Panel anzeigen zu können, oder auch nicht. Dies funktioniert jedoch nicht, wenn ich die im obigen Code auskommentierte Methode createBasicPanel() verwende, auf welcher ein zusätzliches Panel liegt welches auch zurückgegeben wird.
Nehme ich die nicht auskommentierte Methode und verzichte auf das zusätzliche Panel, kann ich so kann ich das Hintergrundbild problemlos hinzufügen. Jedoch passiert nun die große Katastrophe. Führe ich Berechnungen durch und ich setzte das neue Ergebnis mit panel.setText("ERGEBNIS"); wird der vorherige Wert nicht mehr gelöscht. Es sieht dann so aus, als ob alle vorherigen und das neue Ergebnis übereinander stehen... Folglich erkennt man nichts mehr.
Weiß jemand Rat?
Danke
ich habe folgendes Problem und komm einfach nicht weiter. Ich nutze einen JSlider um eine Variable einer Rechenoperation zu verändern und habe dem Slider einen ChangeListener hinzugefügt, so dass bei einem "Slide" die Berechnung neu durchgeführt wird und der Text (das Ergebnis) auf einem JLabel dargestellt wird. Natürlich immer das aktuelle Ergebnis. ;-)
Code:
anzSlider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
ergBelastung.setText(String.valueOf(anzSlider.getValue()));
}
});
Das Problem ist nun Folgendes:
Der JSlider und auch das JLabel liegen auf einem JPanel, welches ich wie folgt zusammenbaue:
Code:
public class MyPanel extends AbstractPanel {
...
public MyPanel() {
panel = this.createBasicPanel();
panel.add(label);
panel.add(anzSlider);
Code:
public class AbstractPanel extends JPanel {
private static final long serialVersionUID = 6037839843943297109L;
private Image image;
public AbstractPanel() {}
public AbstractPanel (Image file) {
this.image = file;
repaint();
}
public AbstractPanel (String file) {
try {
URL url = getClass().getClassLoader().getResource( file );
image = ImageIO.read(url);
} catch (IOException e) {
e.printStackTrace();
}
}
public void paintComponent(Graphics g) {
if (image != null) {
super.paintComponent(g);
int width = getWidth();
int height = getHeight();
int imageWidth = image.getWidth(this);
int imageHeight = image.getHeight(this);
int x = (width - imageWidth)/2;
int y = (height - imageHeight)/2;
g.drawImage(image, 0, 0, 500, 400, this);
}
}
/*protected JPanel createBasicPanel() {
JPanel parent = this;
parent.setOpaque(true);
JPanel frame = new JPanel();
frame.setOpaque(true);
frame.setLayout(new BorderLayout());
parent.add(BorderLayout.CENTER, frame);
frame.setBorder(new EmptyBorder(30, 30, 30, 30));
return frame;
}*/
protected JPanel createBasicPanel() {
JPanel parent = this;
parent.setOpaque(true);
parent.setLayout(new BorderLayout());
parent.setBorder(new EmptyBorder(30, 30, 30, 30));
return parent;
}
}
In der Klasse AbstractPanel überschreibe ich ja die Methode paintComponent, um ein Hintergrundbild auf dem Panel anzeigen zu können, oder auch nicht. Dies funktioniert jedoch nicht, wenn ich die im obigen Code auskommentierte Methode createBasicPanel() verwende, auf welcher ein zusätzliches Panel liegt welches auch zurückgegeben wird.
Nehme ich die nicht auskommentierte Methode und verzichte auf das zusätzliche Panel, kann ich so kann ich das Hintergrundbild problemlos hinzufügen. Jedoch passiert nun die große Katastrophe. Führe ich Berechnungen durch und ich setzte das neue Ergebnis mit panel.setText("ERGEBNIS"); wird der vorherige Wert nicht mehr gelöscht. Es sieht dann so aus, als ob alle vorherigen und das neue Ergebnis übereinander stehen... Folglich erkennt man nichts mehr.
Weiß jemand Rat?
Danke