Hallo allerseits,
wenn man in dem Programm unten ein Ereignis erzeugt (hier durch Bewegen eines Schiebereglers) wird eine Linie gezeichnet.
(die sich z.B. je nach Stellung des Schiebereglers verändern könnte. Diese verändert sich hier im Programm nicht,
um das Programm nicht noch größer werden zu lassen).
Allerdings bleibt die Zeichenfläche ohne diese Linie, wenn man den Schieberegler nicht bewegt.
Frage:
Wie kann man es erreichen, dass gleich zu Programmanfang die Zeichenfläche nicht leer ist,
sondern die Linie gezeichnet wird?
Habe schon alles Mögliche in main probiert (siehe Kommentar im Quellcode).
Nichts funktioniert.
Wer kann helfen?
mfg
Ernst
wenn man in dem Programm unten ein Ereignis erzeugt (hier durch Bewegen eines Schiebereglers) wird eine Linie gezeichnet.
(die sich z.B. je nach Stellung des Schiebereglers verändern könnte. Diese verändert sich hier im Programm nicht,
um das Programm nicht noch größer werden zu lassen).
Allerdings bleibt die Zeichenfläche ohne diese Linie, wenn man den Schieberegler nicht bewegt.
Frage:
Wie kann man es erreichen, dass gleich zu Programmanfang die Zeichenfläche nicht leer ist,
sondern die Linie gezeichnet wird?
Habe schon alles Mögliche in main probiert (siehe Kommentar im Quellcode).
Nichts funktioniert.
Wer kann helfen?
mfg
Ernst
Java:
package testslider;
import javax.swing.event.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Startklasse {
public static void main(String[] args) {
KSZeichenflaeche ks = new KSZeichenflaeche();
JFrame f = new JFrame();
f.setSize(1000, 800);
f.getContentPane().add(ks);
// Hier gibt es ein Problem, wie kann man das beheben?
//ks.getMalflaeche().maleInsBild();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.repaint();
}
}
class KSZeichenflaeche extends JPanel {
private Malflaeche malflaeche;
public Malflaeche getMalflaeche() {
return malflaeche;
}
public void setMalflaeche(Malflaeche malflaeche) {
this.malflaeche = malflaeche;
}
public KSZeichenflaeche() {
init();
}
public void init() {
// --- Elemente, die an die Zeichenfläche angebracht werden sollen: ---
JSlider schieberegler_ab;
GridBagLayout gbl;
WanzeSchieberegler_ab wanzeSchieberegler_ab;
gbl = new GridBagLayout();
Font font = new Font("Arial", Font.BOLD, 20);
schieberegler_ab = new JSlider();
schieberegler_ab.setMinimum(0);
schieberegler_ab.setMaximum(400);
schieberegler_ab.setValue(0);
schieberegler_ab.setOrientation(JSlider.HORIZONTAL);
schieberegler_ab.setPaintLabels(true);
schieberegler_ab.setPaintTicks(true);
schieberegler_ab.setMajorTickSpacing(10);
Hashtable labelTable_ab = new Hashtable();
labelTable_ab.put(new Integer(0), new JLabel("0"));
labelTable_ab.put(new Integer(400 / 2), new JLabel(String.valueOf(400 / 2.0)));
labelTable_ab.put(new Integer(400), new JLabel(String.valueOf(400)));
schieberegler_ab.setLabelTable(labelTable_ab);
malflaeche = new Malflaeche();
malflaeche.setBackground(Color.WHITE);
wanzeSchieberegler_ab = new WanzeSchieberegler_ab();
wanzeSchieberegler_ab.verlinke(this);
malflaeche.verlinke(this);
schieberegler_ab.addChangeListener(wanzeSchieberegler_ab);
setLayout(gbl);
addiereKomponente(gbl, schieberegler_ab, 0, 0, 1, 1, 100, 0);
addiereKomponente(gbl, malflaeche, 0, 1, 3, 1, 1, 1);
}
public void addiereKomponente(GridBagLayout gbl, Component c, int x, int y, int width, int height, double weightx, double weighty) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = width;
gbc.gridheight = height;
gbc.weightx = weightx;
gbc.weighty = weighty;
// Beschränkung für Komponente c (z.B. Button)am Layout-Manager anmelden.
gbl.setConstraints(c, gbc);
add(c);
}
}
class Malflaeche extends JPanel {
private KSZeichenflaeche kSZeichenflaeche;
private int farbwert;
private Image image;
public Malflaeche() {
}
public void verlinke(KSZeichenflaeche pKSZeichenflaeche) {
kSZeichenflaeche = pKSZeichenflaeche;
}
public void maleInsBild() {
Graphics graphics = null;
int sx, sy;
double r;
/*
Frage ???????????????????????
Warum liefert sx und sy den Wert 0, wenn man im Konstruktor von
KSZeichenflaeche aufruft:
malflaeche.maleInsBild();
*/
sx = this.getSize().width;
sy = this.getSize().height;
image = createImage(sx, sy);
graphics = image.getGraphics();
graphics.setColor(getBackground());
graphics.fillRect(0, 0, sx, sy);
// Ränderbreite des Zeichenbereichs alle auf 0 setzen
final java.awt.Insets insets = this.getInsets();
insets.set(0, 0, 0, 0);
graphics.setColor(Color.BLACK);
graphics.drawLine(50, 100, 200, 400);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null);
}
}
class WanzeSchieberegler_ab implements ChangeListener {
KSZeichenflaeche kSZeichenflaeche;
public WanzeSchieberegler_ab() {
}
public void verlinke(KSZeichenflaeche pKSZeichenflaeche) {
kSZeichenflaeche = pKSZeichenflaeche;
}
public void stateChanged(ChangeEvent e) {
Malflaeche malflaeche;
int ab;
JSlider s = (JSlider) (e.getSource());
ab = s.getValue();
malflaeche = kSZeichenflaeche.getMalflaeche();
malflaeche.maleInsBild();
malflaeche.repaint();
}
}