Hallo, hoffe das mir hier vieleicht jemand helfen kann, ich möchte ein Autoquartett programieren, bei dem man mit Checkboxen die Rubrik auswählt, oberhalb der Checkboxen soll das Bild des Autos erscheinen. Hab das jetzt mit der Hilfe eines freundes hinbekommen, dass das Bild angezeigt wird, jetzt verschwinden allerdings alle anderen Elemente der Gui. Erst wenn man in die nähe der Checkboxen klickt tauchen diese wieder auf. Hier der Quelltext:
Code:
// Mahlt das bild.
public void paint( Graphics g )
{
Leistung.setVisible(true);
Laenge.setVisible(true);
Gewicht.setVisible(true);
Hoechstgeschwindigkeit.setVisible(true);
Hubraum.setVisible(true);
PcLeistung.setVisible(true);
Image dasBild = Toolkit.getDefaultToolkit().getImage("fastback.jpg");
g.drawImage( dasBild, 10, 10, this );
}
public static void main(String[] args) {
Gui myGui = new Gui("Gui");
}
}
Ich will ehrlich sein und sage direkt das die methode Paint von dem Freund ist, verstehe selber nicht wirklich wieso das ganze in einer Methode steht und was es mit dem Graphics g auf sich hat. Kenn mich mit awt und swing nicht so aus, wurde in der Schule bis jetzt wenig behandelt. Die setVisible Methoden habe ich nachträglich eingefügt haben aber nichts gebracht:
Hoffe das ihr mir hier weiter helfen könnt!
MFG Tobias
PS: wenn ihr weiter Quellcode braucht sagt bescheid, wollte nicht direkt alle 150 zeilen posten.
Hi, ist eine Swing Komponente, das umändern in paintcomponent hat dafür gesorgt das jetzt alle sachen ausser dem Bild angezeigt werden, ein kleiner Fortschritt, ich wollte das Bild erst als Image Icon über ein Label legen, habe das aber nicht hinbekommen. Vieleicht klappt das doch besser? Hier der ganze Quellcode:
Code:
public class Gui extends JFrame {
// Anfang Variablen
private JCheckBox Hubraum = new JCheckBox();
private JCheckBox Leistung = new JCheckBox();
private JCheckBox Hoechstgeschwindigkeit = new JCheckBox();
private JCheckBox Laenge = new JCheckBox();
private JCheckBox Gewicht = new JCheckBox();
private JLabel WertH = new JLabel();
private JLabel WertHo = new JLabel();
private JLabel WertL = new JLabel();
private JLabel WertLa = new JLabel();
private JLabel WertG = new JLabel();
private JLabel PcHubraum = new JLabel();
private JLabel PCHoechstgeschwindigkeit = new JLabel();
private JLabel PcLeistung = new JLabel();
private JLabel PcLaenge = new JLabel();
private JLabel PcGewicht = new JLabel();
private JButton NeuesSpiel = new JButton();
private JButton Beenden = new JButton();
// Ende Variablen
public Gui(String title) {
// Frame-Initialisierung
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { System.exit(0); }
});
int frameWidth = 1024;
int frameHeight = 768;
setSize(frameWidth, frameHeight);
Container cp = getContentPane();
cp.setLayout(null);
// Anfang Komponenten
Hubraum.setBounds(50, 400, 200, 40);
Hubraum.setText("Hubraum");
cp.add(Hubraum);
Leistung.setBounds(50, 520, 200, 40);
Leistung.setText("Leistung");
cp.add(Leistung);
Hoechstgeschwindigkeit.setBounds(50, 460, 200, 40);
Hoechstgeschwindigkeit.setText("Höchstgeschwindigkeit");
cp.add(Hoechstgeschwindigkeit);
Laenge.setBounds(50, 580, 200, 40);
Laenge.setSelected(false);
Laenge.setText("Länge");
cp.add(Laenge);
Gewicht.setBounds(50, 640, 200, 40);
Gewicht.setSelected(false);
Gewicht.setText("Gewicht");
cp.add(Gewicht);
WertH.setBounds(250, 400, 40, 40);
WertH.setText("0");
WertH.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(WertH);
WertHo.setBounds(250, 460, 40, 40);
WertHo.setText("0");
WertHo.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(WertHo);
WertL.setBounds(250, 520, 40, 40);
WertL.setText("0");
WertL.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(WertL);
WertLa.setBounds(250, 580, 40, 40);
WertLa.setText("0");
WertLa.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(WertLa);
WertG.setBounds(250, 640, 40, 40);
WertG.setText("0");
WertG.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(WertG);
PcHubraum.setBounds(700, 400, 200, 40);
PcHubraum.setText("PcHubraum");
PcHubraum.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(PcHubraum);
PCHoechstgeschwindigkeit.setBounds(700, 520, 200, 40);
PCHoechstgeschwindigkeit.setText("PCH�hstgeschwindigkeit");
PCHoechstgeschwindigkeit.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(PCHoechstgeschwindigkeit);
PcLeistung.setBounds(700, 460, 200, 40);
PcLeistung.setText("PcLeistung");
PcLeistung.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(PcLeistung);
PcLaenge.setBounds(700, 580, 200, 40);
PcLaenge.setText("PcL�ge");
PcLaenge.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(PcLaenge);
PcGewicht.setBounds(700, 640, 200, 40);
PcGewicht.setText("PcGewicht");
PcGewicht.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(PcGewicht);
NeuesSpiel.setBounds(422, 424, 150, 60);
NeuesSpiel.setText("NeuesSpiel");
cp.add(NeuesSpiel);
NeuesSpiel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
}
});
Beenden.setBounds(422, 529, 150, 60);
Beenden.setText("Beenden");
cp.add(Beenden);
Beenden.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.exit( 0 ); //Beendet das Spiel
}
});
// Ende Komponenten
setResizable(false);
setVisible(true);
}
// Anfang Ereignisprozeduren
public void NeuesSpielActionPerformed(ActionEvent evt) {
}
public void BeendenActionPerformed(ActionEvent evt) {
}
// Ende Ereignisprozeduren
// Mahlt das bild.
public void paintComponent( Graphics g )
{
Leistung.setVisible(true);
Laenge.setVisible(true);
Gewicht.setVisible(true);
Hoechstgeschwindigkeit.setVisible(true);
Hubraum.setVisible(true);
PcLeistung.setVisible(true);
Image dasBild = Toolkit.getDefaultToolkit().getImage("fastback.jpg");
g.drawImage( dasBild, 10, 10, this );
}
public static void main(String[] args) {
Gui myGui = new Gui("Gui");
}
}
Habe ich irgendwas falsch gemacht das keiner antwortet oder findet niemand den Fehler? ich fordere nicht das mir jemand sagt das und das sollst du schreiben sondern hoffe nur das mir jemand sagen kann wodran der fehler liegen könnte. Es wundert mich nur etwas das nach den ersten beiden antworten niemand mehr geschrieben hat.
Also 1. Bei einem JFrame ist ausnahmsweise doch das paint richtig.
2. Über dem JFrame auf den du zeichnest liegt noch die ContentPane. D.h. du musst das so machen, dass deine ContentPane das Bild malt. Das geht zum Beispiel so (ich hoffe mal, dass du so etwas schon kannst, sonst schau mal nach "anonymen Klassen"):
Code:
Container cp = new JComponent(){
public void paintComponent( Graphics g )
{
Image dasBild = Toolkit.getDefaultToolkit().getImage("fastback.jpg");
g.drawImage( dasBild, 10, 10, this );
}
};
setContentPane (cp);
cp.setLayout(null);
Ädit: Außerdem solltest du das Bild natürlich nicht erst in der Zeichenmethode laden, sondern vorher schon, und in einer Variable speichern.
Das mit dem Mahlen stammt nicht von mir sondern von meinem Freund, glaubt es oder nicht =), ist aber eindeutig ein Tippfehler, hoffe ich zumindest für ihn. :roll:
Möchte mich jetzt erstmal für die Hilfe bedanken, funktioniert jetzt Prima!
So bin jetzt ein Stück weiter gekommen mit meinem programm, jetzt soll das Image in einer Methode neu überschrieben werden, wollte das ganze mit Image Icon machen, allerdings klappt das wieder nicht, irgendwie hab ich das wohl immer noch nicht richtig verstanden, wäre nett wenn ihr mir nochmal helft.
Code:
public class Gui extends JFrame
{ // Anfang Variablen
private JCheckBox Hubraum = new JCheckBox();
private JCheckBox Leistung = new JCheckBox();
private JCheckBox Tempo = new JCheckBox();
private JCheckBox NullHundert = new JCheckBox();
private JLabel WertH = new JLabel();
private JLabel WertT = new JLabel();
private JLabel WertL = new JLabel();
private JLabel WertNH = new JLabel();
private JLabel PcHubraum = new JLabel();
private JLabel PcTempo = new JLabel();
private JLabel PcLeistung = new JLabel();
private JLabel PcNullHundert = new JLabel();
private JButton NeuesSpiel = new JButton();
private JButton Beenden = new JButton();
private JButton Zug = new JButton();
private JLabel Name = new JLabel();
private JLabel PcName = new JLabel();
Image dasBild = Toolkit.getDefaultToolkit().getImage("fastback.jpg");
Handkarten Spieler = new Handkarten();
Handkarten Computer = new Handkarten();
Spielkartenpaeckchen Stapel = new Spielkartenpaeckchen();
JLabel Bild = new JLabel(new ImageIcon(dasBild));
JLabel PcBild = new JLabel(new ImageIcon(dasBild));
int zustand=0;
// Ende Variablen
public Gui(String title)
{
// Frame-Initialisierung
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { System.exit(0); }
});
int frameWidth = 1024;
int frameHeight = 768;
setSize(frameWidth, frameHeight);
Container cp = new JComponent()
{
public void paintComponent( Graphics g, String Grafikpfad )
{
//dasBild= Toolkit.getDefaultToolkit().getImage(Grafikpfad);
//g.drawImage( dasBild, 10, 10, this );
}
};
setContentPane (cp);
cp.setLayout(null);
// Anfang Komponenten
//Elemente der Gui werden intialisiert und die Attribute
//Wie Position, Größe Name werden festgelegt. Die Methode
//cp.add fügt sie dem Container hinzu.
Hubraum.setBounds(50, 400, 200, 40);
Hubraum.setText("Hubraum");
cp.add(Hubraum);
Leistung.setBounds(50, 520, 200, 40);
Leistung.setText("Leistung");
cp.add(Leistung);
Tempo.setBounds(50, 460, 200, 40);
Tempo.setText("Tempo");
cp.add(Tempo);
NullHundert.setBounds(50, 578, 200, 40);
NullHundert.setSelected(false);
NullHundert.setText("0-100 km/h");
cp.add(NullHundert);
WertH.setBounds(257, 411, 100, 16);
WertH.setText("0");
WertH.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(WertH);
WertT.setBounds(257, 471, 100, 16);
WertT.setText("0");
WertT.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(WertT);
WertL.setBounds(257, 531, 100, 16);
WertL.setText("0");
WertL.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(WertL);
WertNH.setBounds(257, 591, 100, 16);
WertNH.setText("0");
WertNH.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(WertNH);
PcHubraum.setBounds(700, 411, 200, 16);
PcHubraum.setText("Hubraum");
PcHubraum.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(PcHubraum);
PcTempo.setBounds(700, 471, 200, 16);
PcTempo.setText("Tempo");
PcTempo.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(PcTempo);
PcLeistung.setBounds(700, 531, 200, 16);
PcLeistung.setText("Leistung");
PcLeistung.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(PcLeistung);
PcNullHundert.setBounds(700, 591, 200, 16);
PcNullHundert.setText("0-100 km/h");
PcNullHundert.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(PcNullHundert);
Name.setBounds(50, 340, 400, 16);
Name.setText("Name");
Name.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(Name);
PcName.setBounds(700, 340, 200, 16);
PcName.setText("Name");
PcName.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
cp.add(PcName);
Bild.setBounds(10,10,dasBild.getWidth(null),dasBild.getHeight(null));
cp.add(Bild);
PcBild.setBounds(500,10,dasBild.getWidth(null),dasBild.getHeight(null));
cp.add(PcBild);
public static void main(String[] args)
{
Gui myGui = new Gui("Gui");
//Die Spielkarte werden Erstellt
Spielkarte A1 = new Spielkarte("Ferrari 250 Europa GT ", 2963, 220, 240, 6,"250europagt");
Spielkarte B1 = new Spielkarte("Ferrari 250 TDF LWB", 2998, 240, 250, 8,"250tdflwb");
Spielkarte C1 = new Spielkarte("Ferrari 250 GT SWB", 2953, 280, 230, 4,"250gtoswb");
Spielkarte D1 = new Spielkarte("Ferrari 250 GTO", 2953, 280, 250, 6,"250gto");
Spielkarte A2 = new Spielkarte("Ferrari 286 Spider", 2862, 260, 260, 5,"286spider");
Spielkarte B2 = new Spielkarte("Ferrari 500 TR", 1984, 180, 225, 6,"500tr");
Spielkarte C2 = new Spielkarte("Ferrari 575 GTC", 5997, 605, 335, 4,"575gtc");
Spielkarte D2 = new Spielkarte("Ferrari 360 Challenge", 3586, 400, 295, 4,"360challenge");
Spielkarte A3 = new Spielkarte("Ferrari 612 Scaglietti", 5748, 540, 320, 4,"612scaglietti");
Spielkarte B3 = new Spielkarte("Ferrari 412", 4943, 340, 250, 7,"412");
Spielkarte C3 = new Spielkarte("Ferrari 365 GTC/4", 4390, 320, 250, 7,"365gtc4");
Spielkarte D3 = new Spielkarte("Ferrari 166 Inter Coupe Touring", 1995, 110, 190, 10,"166intercoupe");
Spielkarte A4 = new Spielkarte("Ferrari 125/66", 1496, 180, 220, 7,"12566");
Spielkarte B4 = new Spielkarte("Ferrari 156 F1", 1477, 190, 240, 6,"156F1");
Spielkarte C4 = new Spielkarte("Ferrari 641/2", 3498, 700, 330, 3,"6412");
Spielkarte D4 = new Spielkarte("Ferrari F2004", 3000, 905, 360, 3,"F2004");
Spielkarte A5 = new Spielkarte("Ferrari rossa Pininfarina", 5474, 486, 320, 4,"rossapininfarina");
Spielkarte B5 = new Spielkarte("Ferrari mythos Pininfarina", 4942, 390, 295, 5,",mythospininfarina");
Spielkarte C5 = new Spielkarte("Ferrari 360 Spider", 6586, 400, 293, 5,"360spider");
Spielkarte D5 = new Spielkarte("Ferrari 365 P Speziale", 4390, 380, 245, 7,"365pspeziale");
Spielkarte A6 = new Spielkarte("Ferrari F355 Spider", 3496, 380, 295, 5,"f355spider");
Spielkarte B6 = new Spielkarte("Ferrari F40", 2936, 477, 324, 5,"f40");
Spielkarte C6 = new Spielkarte("Ferrari Enzo Ferrari", 5998, 660, 350, 4,"enzoferrari");
Spielkarte D6 = new Spielkarte("Ferrari F50", 4700, 520, 325, 4,"f50");
Spielkarte A7 = new Spielkarte("Ferrari Dino 206 SP Berlinetta", 1986, 200, 250, 6,"dino206sp");
Spielkarte B7 = new Spielkarte("Ferrari Dino 246 GT", 2418, 195, 240, 7,"dino246gt");
Spielkarte C7 = new Spielkarte("Ferrari Dino 246 GTS", 2418, 195, 238, 7,"dino246gts");
Spielkarte D7 = new Spielkarte("Ferrari Dino 308 GT4", 2926, 255, 240, 6,"dino308gt4");
Spielkarte A8 = new Spielkarte("Ferrari GTO", 2855, 400, 306, 5,"gto");
Spielkarte B8 = new Spielkarte("Ferrari 575 Handling GTC",5748, 515, 325, 4,"leer");
Spielkarte C8 = new Spielkarte("Ferrari 456 M GT", 2474, 442, 302, 5,"leer");
Spielkarte D8 = new Spielkarte("Ferrari Challenge Stradale",3586,425, 300, 4,"challengestradale");
// Der Stapel wird gemischt
myGui.Stapel.mischen();
// Die ersten 16 Karten werden dem Spieler ausgeteilt, d.h seinem Stapel zugefügt.
for (int i=0; i<=15; i++)
{ Spielkarte Help=myGui.Stapel.getKarte(i);
myGui.Spieler.FuegeAn(Help);
}
// Die zweiten 16 Karten werden dem Computer ausgeteilt, d.h seinem Stapel zugefügt.
for (int i=16; i<=31; i++)
{ Spielkarte Help=myGui.Stapel.getKarte(i);
myGui.Computer.FuegeAn(Help);
}
Spielkarte Help=myGui.Spieler.getObersteKarte();
myGui.Bild.setIcon(new ImageIcon(Toolkit.getDefaultToolkit().getImage(Help.getGrafikpfad())));
myGui.Name.setText(Help.getName());
myGui.WertH.setText(Integer.toString(Help.getHubraum()) + " ccm");
myGui.WertL.setText(Integer.toString(Help.getLeistung()) + " Ps");
myGui.WertT.setText(Integer.toString(Help.getTempo()) + " km/h");
myGui.WertNH.setText(Integer.toString(Help.getNullHundert()) + " s");
}
Code:
Ich danke jetzt schon jedem dem das nicht zuviel Quellcode ist