Schönen guten Morgen,
ich bastle gerade mit einem Graphics-Objekt herum. Je nach dem was man in einer JComboBox auswählt sollen entweder 1, 2, .... oder 5 Kreise gezeichnet werden.
Bis auf das Aktualisieren klappt alles. Ich habe aber keine Idee, wie ich das JPanel, in dem die Kreise
gezeichnet werden, aktualisieren kann.
Hier der Code der Klasse Oberflaeche:
Das JPanel lasse ich in der Klasse ZeichenPanel zeichnen:
Wie kann ich aus der Klasse Oberflaeche über das Objekt o eine Neuzeichnung aufrufen?
Vielen Dank & Gruß,
myjday
ich bastle gerade mit einem Graphics-Objekt herum. Je nach dem was man in einer JComboBox auswählt sollen entweder 1, 2, .... oder 5 Kreise gezeichnet werden.
Bis auf das Aktualisieren klappt alles. Ich habe aber keine Idee, wie ich das JPanel, in dem die Kreise
gezeichnet werden, aktualisieren kann.
Hier der Code der Klasse Oberflaeche:
Java:
package kreise_zeichnen;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Oberflaeche extends JFrame{
private JPanel pZeichnung;
private JPanel pEingabe;
private JLabel jlblAnzahlKreise;
private JComboBox jcbb_anzahl;
public static void main(String[] args) {
Runnable startGui = new Runnable() {
public void run() {
Oberflaeche o = new Oberflaeche();
o.setDefaultCloseOperation(Oberflaeche.EXIT_ON_CLOSE);
o.pack();
o.setLocationRelativeTo(null);
// f.setResizable(false);
o.setVisible(true);
}
};
// SwingUtilities
// EventQueue
EventQueue.invokeLater(startGui);
}
public Oberflaeche(){
super();
this.setContentPane(getZeichenflaeche());
}
private JPanel getZeichenflaeche(){
pZeichnung = new ZeichenPanel(5);
pEingabe = new JPanel();
pEingabe.setLayout(new FlowLayout());
jlblAnzahlKreise = new JLabel("Anzahl der Kreise: ");
jlblAnzahlKreise.setPreferredSize(new Dimension(150,20));
jcbb_anzahl = new JComboBox();
jcbb_anzahl.setPreferredSize(new Dimension(150, 20));
jcbb_anzahl.addItem("Bitte Anzahl wählen ...");
jcbb_anzahl.addItem("1");
jcbb_anzahl.addItem("2");
jcbb_anzahl.addItem("3");
jcbb_anzahl.addItem("4");
jcbb_anzahl.addItem("5");
jcbb_anzahl.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JPanel p = new ZeichenPanel(jcbb_anzahl.getSelectedIndex());
}
});
pEingabe.add(jlblAnzahlKreise);
pEingabe.add(jcbb_anzahl);
JPanel myPanel = new JPanel();
myPanel.setLayout(new BorderLayout());
myPanel.add(pEingabe, BorderLayout.WEST);
myPanel.add(pZeichnung, BorderLayout.SOUTH);
return myPanel;
}
}
Das JPanel lasse ich in der Klasse ZeichenPanel zeichnen:
Java:
package kreise_zeichnen;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
public class ZeichenPanel extends JPanel{
private int anzahl_kreise;
public ZeichenPanel(){
setPreferredSize(new Dimension(500,400));
this.anzahl_kreise = 0;
}
public ZeichenPanel(int anzahl_kreise){
this.anzahl_kreise = anzahl_kreise;
setPreferredSize(new Dimension(420,400));
}
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
g.setColor(Color.DARK_GRAY);
g = zeichneKreise(g);
}
public Graphics zeichneKreise(Graphics g){
for(int i=0; i<anzahl_kreise; i++){
// x will be distance between 2 circles
int x = 80;
// p_x, p_y will be startpoint for a new circle
int p_x = 36;
int p_y = 140;
// Kreis zeichnen
g.fillOval(p_x + x*i, p_y, 80, 80);
}
return g;
}
public int getAnzahl_kreise() {
return anzahl_kreise;
}
public void setAnzahl_kreise(int anzahl_kreise) {
this.anzahl_kreise = anzahl_kreise;
}
}
Wie kann ich aus der Klasse Oberflaeche über das Objekt o eine Neuzeichnung aufrufen?
Vielen Dank & Gruß,
myjday
Zuletzt bearbeitet: