ContenPane

Status
Nicht offen für weitere Antworten.
A

Andrej1

Gast
Hallo liebe Leute

wäre echt nett wenn ihr mir weiterhelfen würdet




Code:
import java.awt.Container;

import javax.swing.*;




public class Fenster
{
   

public void fensterErstellen(){
   {
      Container ContentPane = Fenster.getContentPane;
      JFrame fenster = new JFrame ("Vocamory");
      JMenuBar menüleiste = new JMenuBar();
      JMenu menu1 = new JMenu("Menü");
      JMenu menu2 = new JMenu ("Neues Spiel");
      JMenuItem item1 = new JMenuItem ("Hilfe");
      JMenuItem item2 = new JMenuItem ("Beenden");
      JButton button1 = new JButton ("Button");
      ContentPane.add (button1);
      ButtonGroup buttongroup1 =  new ButtonGroup ();
      JRadioButtonMenuItem jradiobutton1 = new JRadioButtonMenuItem ("Anfänger");
      JRadioButtonMenuItem jradiobutton2 = new JRadioButtonMenuItem ("Fortgeschrittener");
      JRadioButtonMenuItem jradiobutton3 = new JRadioButtonMenuItem ("Profi");
      menüleiste.add (menu1);
      menu1.add (menu2);
      menu1.add (item1);
      menu1.add (item2);
      menu2.add (jradiobutton1);
      menu2.add (jradiobutton2);
      menu2.add (jradiobutton3);
      buttongroup1.add (jradiobutton1);
      buttongroup1.add (jradiobutton2);
      buttongroup1.add (jradiobutton3);
      fenster.setJMenuBar(menüleiste);
      fenster.setSize (600,450);
      fenster.setVisible (true);
   }
}}

Was ist an dem Quelltext falsch? Wieso kommt es zu einer Fehlermeldung?
Wie kann ich es richtig erstellen?

Viele Dank
 
S

SlaterB

Gast
> Fenster.getContentPane;

Fenster hat keine Exemplarvariable getContentPane,
wenn du eine Operation meinst, dann fehlt das () am Ende,
Fenster hat aber auch keine Operation getContentPane(),

soll Fenster ein JFrame sein?,
dann musst du
public class Fenster extends JFrame
schreiben

oder beziehst du dich auf das folgende JFrame
JFrame fenster = new JFrame ("Vocamory");
?

dann schreibe
JFrame fenster = new JFrame ("Vocamory");
Container contentPane = fenster.getContentPane();


Code:
import javax.swing.*;

import java.awt.Container;

public class Fenster
{

    public static void main(String[] args)
    {
        new Fenster().fensterErstellen();
    }

    public void fensterErstellen()
    {

        JFrame fenster = new JFrame("Vocamory");
        Container ContentPane = fenster.getContentPane();
        JMenuBar menüleiste = new JMenuBar();
        JMenu menu1 = new JMenu("Menü");
        JMenu menu2 = new JMenu("Neues Spiel");
        JMenuItem item1 = new JMenuItem("Hilfe");
        JMenuItem item2 = new JMenuItem("Beenden");
        JButton button1 = new JButton("Button");
        ContentPane.add(button1);
        ButtonGroup buttongroup1 = new ButtonGroup();
        JRadioButtonMenuItem jradiobutton1 = new JRadioButtonMenuItem("Anfänger");
        JRadioButtonMenuItem jradiobutton2 = new JRadioButtonMenuItem("Fortgeschrittener");
        JRadioButtonMenuItem jradiobutton3 = new JRadioButtonMenuItem("Profi");
        menüleiste.add(menu1);
        menu1.add(menu2);
        menu1.add(item1);
        menu1.add(item2);
        menu2.add(jradiobutton1);
        menu2.add(jradiobutton2);
        menu2.add(jradiobutton3);
        buttongroup1.add(jradiobutton1);
        buttongroup1.add(jradiobutton2);
        buttongroup1.add(jradiobutton3);
        fenster.setJMenuBar(menüleiste);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setSize(600, 450);
        fenster.setVisible(true);
    }
}
 
A

Andrej1

Gast
Ah ... danke. Zweiteres war richtig und hat mir weitergeholfen. Es klappt. Dankeschön. :)
Eine Frage noch:
Warum:
Code:
 fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
?
Macht es hier einen Unterschied, ob ich diesen Befehl in den Quellcode integriere und wenn ja, welchen?
 
S

SlaterB

Gast
wenn du ihn nich drin hast und das Fenster schließt, dann läuft dein Programm unsichtbar weiter
(bis zum Drücken von Strg C in der Konsole, Stop-Button in einer Entwicklungsumgebung oder ähnlich finales)
 
A

Andrej1

Gast
Hallo, ich nochmal. Ich habe wieder eine klitzekleine Frage. :oops:
Ich habe zu dem oben angegebenen Quellcode versucht, ein Feld von von 9x9 zu erzeugen. Hat auch geklappt. Jedoch merke ich leider gerade, warum alle immer sagen, man solle awt und swing nicht vermischen. Das Feld verdeckt leider das Menüfeld, wenn letzeres angeklickt wird. Was für Alternativen bietet swing, wenn ich trotzdem mit Containern und GridLayouts arbeiten möchte? Über eine Antwort würde ich mich wirklich freuen.
Code:
import javax.swing.*;

import java.awt.Container;
import java.awt.GridLayout;




public class Fenster
{

   

    public void fensterErstellen()
    {

        JFrame fenster = new JFrame("Vocamory");
        Container ContentPane = fenster.getContentPane();
        ContentPane.setLayout (new GridLayout(9,9));
        for (int i=0; i<81; i++)
        {
        JMenuBar menüleiste = new JMenuBar();
        JMenu menu1 = new JMenu("Menü");
        JMenu menu2 = new JMenu("Neues Spiel");
        JMenuItem item1 = new JMenuItem("Hilfe");
        JMenuItem item2 = new JMenuItem("Beenden");
        ButtonGroup buttongroup1 = new ButtonGroup();
        JRadioButtonMenuItem jradiobutton1 = new JRadioButtonMenuItem("Anfänger");
        JRadioButtonMenuItem jradiobutton2 = new JRadioButtonMenuItem("Fortgeschrittener");
        JRadioButtonMenuItem jradiobutton3 = new JRadioButtonMenuItem("Profi");
        
        menüleiste.add(menu1);
        menu1.add(menu2);
        menu1.add(item1);
        menu1.add(item2);
        menu2.add(jradiobutton1);
        menu2.add(jradiobutton2);
        menu2.add(jradiobutton3);
        buttongroup1.add(jradiobutton1);
        buttongroup1.add(jradiobutton2);
        buttongroup1.add(jradiobutton3);
        
        fenster.setJMenuBar(menüleiste);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setSize(600, 450);
        fenster.setVisible(true);
        }
    }
}
 

Shadeo

Mitglied
also dein GUI funktioniert bei mir, wird nichts verdeckt.

aber was soll die Schleife bewirken? Willst du alle 81 Felder mit irgendwas füllen? Du erzeugst mit dem obigen Code 81 mal das Menu..

Code:
        for(int i = 0; i < 81; i++){
        	
        	ContentPane.add( new JLabel( String.valueOf(i) ) );
        }

        //Erzeugt in jedem Feld ein Label mit einer Nummer von 0 - 80
        //nur so als Beispiel
 
G

Guest

Gast
Danke. Ich habe einfach den falschen Quellcode gepostet, aber mit Probieren erst einmal geschafft, was ich wollte. Nämlich 81 Buttons erzeugen. Funktioniert tadellos.
Code:
import javax.swing.*;

import java.awt.Container;
import java.awt.GridLayout;




public class Fenster
{

   

    public void fensterErstellen()
    {

        JFrame fenster = new JFrame("Vocamory");
        Container ContentPane = fenster.getContentPane();
        ContentPane.setLayout (new GridLayout(9,9));
        for (int i=0; i<81; i++)
        {
        JMenuBar menüleiste = new JMenuBar();
        JMenu menu1 = new JMenu("Menü");
        JMenu menu2 = new JMenu("Neues Spiel");
        JMenuItem item1 = new JMenuItem("Hilfe");
        JMenuItem item2 = new JMenuItem("Beenden");
        JButton button1 = new JButton ();
        ButtonGroup buttongroup1 = new ButtonGroup();
        JRadioButtonMenuItem jradiobutton1 = new JRadioButtonMenuItem("Anfänger");
        JRadioButtonMenuItem jradiobutton2 = new JRadioButtonMenuItem("Fortgeschrittener");
        JRadioButtonMenuItem jradiobutton3 = new JRadioButtonMenuItem("Profi");
       
        menüleiste.add(menu1);
        menu1.add(menu2);
        menu1.add(item1);
        menu1.add(item2);
        menu2.add(jradiobutton1);
        menu2.add(jradiobutton2);
        menu2.add(jradiobutton3);
        buttongroup1.add(jradiobutton1);
        buttongroup1.add(jradiobutton2);
        buttongroup1.add(jradiobutton3);
        ContentPane.add(button1);
       
        fenster.setJMenuBar(menüleiste);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setSize(600, 450);
        fenster.setVisible(true);
        }
    }
}
Leider habe ich wieder ein Problem mit meinem Quellcode. Ich will nämlich den MenuItems etc. auch Funktionen zuordnen und fange sinnigerweise mit item2 ("Beenden") an :wink:. Hier mein kläglicher Versuch:
Code:
import javax.swing.*;
import java.awt.*;




public class Fenster
{

   

    public void fensterErstellen()
    {

        JFrame fenster = new JFrame("Vocamory");
        Container ContentPane = fenster.getContentPane();
        ContentPane.setLayout (new GridLayout(9,9));
        for (int i=0; i<81; i++)
        {
        JMenuBar menüleiste = new JMenuBar();
        JMenu menu1 = new JMenu("Menü");
        JMenu menu2 = new JMenu("Neues Spiel");
        JMenuItem item1 = new JMenuItem("Hilfe");
        JMenuItem item2 = new JMenuItem("Beenden");
        JButton button1 = new JButton ();
        ButtonGroup buttongroup1 = new ButtonGroup();
        JRadioButtonMenuItem jradiobutton1 = new JRadioButtonMenuItem("Anfänger");
        JRadioButtonMenuItem jradiobutton2 = new JRadioButtonMenuItem("Fortgeschrittener");
        JRadioButtonMenuItem jradiobutton3 = new JRadioButtonMenuItem("Profi");
       
        menüleiste.add(menu1);
        menu1.add(menu2);
        menu1.add(item1);
        menu1.add(item2);
        menu2.add(jradiobutton1);
        menu2.add(jradiobutton2);
        menu2.add(jradiobutton3);
        buttongroup1.add(jradiobutton1);
        buttongroup1.add(jradiobutton2);
        buttongroup1.add(jradiobutton3);
        ContentPane.add(button1);
        
        public void actionPerformed(ActionEvent event)
        {
        String kommando = event.getActionCommand();
        if( kommando.equals( "Beenden" ) )
        	{
        	System.exit( 0 );
        	}
        }
       
        fenster.setJMenuBar(menüleiste);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setSize(600, 450);
        fenster.setVisible(true);
        }
    }
}
Woran liegt es, dass nichts mehr ausgeführt wird? Neu ist nur Zeile 43-50.
 

Shadeo

Mitglied
actionPerformed() ist eine Methode des Interfaces ActionListener. Genau dieses Interface brauchst du hier, dein Versuch war im Ansatz schon ganz gut. Du musst aber eine neue Klasse erstellen, die das Interface ActionListener implementiert.

Also: eine neue Klasse erzeugen (innerhalb deiner Klasse Fenster, aber nicht in der fensterErstellen() Methode)

Code:
    class BeendenListener implements ActionListener{

		public void actionPerformed(ActionEvent arg0) {
		
			System.exit(0);
		}
    }

jetzt musst du diesen Listener noch deinem Item hinzufügen:

Code:
        item2.addActionListener(new BeendenListener());


Hier noch kurz alles zusammen:

Code:
import javax.swing.*;
import java.awt.*;



public class Fenster
{

   

    public void fensterErstellen()
    {

        //.. 


        JMenuItem item2 = new JMenuItem("Beenden");
        
        item2.addActionListener(new BeendenListener());   // dem item einen ActionListener hinzufügen


        //..
    }



    // Listener

    class BeendenListener implements ActionListener{

		public void actionPerformed(ActionEvent arg0) {
		
			System.exit(0);
		}
    }


}
 
A

Andrej1

Gast
Hmm ... Mein Quelltext sieht nun folgendermaßen aus:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;




public class Fenster
{

   

    public void fensterErstellen()
    {

        JFrame fenster = new JFrame("Vocamory");
        Container ContentPane = fenster.getContentPane();
        ContentPane.setLayout (new GridLayout(9,9));
        for (int i=0; i<81; i++)
        {
        JMenuBar menüleiste = new JMenuBar();
        JMenu menu1 = new JMenu("Menü");
        JMenu menu2 = new JMenu("Neues Spiel");
        JMenuItem item1 = new JMenuItem("Hilfe");
        JMenuItem item2 = new JMenuItem("Beenden");
        JButton button1 = new JButton ();
        ButtonGroup buttongroup1 = new ButtonGroup();
        JRadioButtonMenuItem jradiobutton1 = new JRadioButtonMenuItem("Anfänger");
        JRadioButtonMenuItem jradiobutton2 = new JRadioButtonMenuItem("Fortgeschrittener");
        JRadioButtonMenuItem jradiobutton3 = new JRadioButtonMenuItem("Profi");
       
        menüleiste.add(menu1);
        menu1.add(menu2);
        menu1.add(item1);
        menu1.add(item2);
        menu2.add(jradiobutton1);
        menu2.add(jradiobutton2);
        menu2.add(jradiobutton3);
        buttongroup1.add(jradiobutton1);
        buttongroup1.add(jradiobutton2);
        buttongroup1.add(jradiobutton3);
        ContentPane.add(button1);
        item2.addActionListener(new BeendenListener());
        

       
        fenster.setJMenuBar(menüleiste);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setSize(600, 450);
        fenster.setVisible(true);
        }
    }
    class BeendenListener implements ActionListener
      {

        public void actionPerformed(ActionEvent arg0)
        {
        
           System.exit(0);
        }
      }

}
Es wird zwar ein Fenster erzeugt, aber bei "Beenden" hat mein Eclipse-Programm immer noch Probleme. BeendenListener und ActionEvent werden immer noch als fehlerhaft angezeigt, obwohl ich nicht verstehe, warum.
Bei BeendenListener kriege ich
The type Fenster.BeendenListener must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent)
Aber die genannten Bedingungen scheinen doch erfüllt zu sein?
Bei ActionListener lediglich
cannot be resolved to a type
Was mache ich falsch?
 
G

Guest

Gast
Heureka! Ich hab's:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;




public class Fenster
{

   

    public void fensterErstellen()
    {

        JFrame fenster = new JFrame("Vocamory");
        Container ContentPane = fenster.getContentPane();
        ContentPane.setLayout (new GridLayout(9,9));
        for (int i=0; i<81; i++)
        {
        JMenuBar menüleiste = new JMenuBar();
        JMenu menu1 = new JMenu("Menü");
        JMenu menu2 = new JMenu("Neues Spiel");
        JMenuItem item1 = new JMenuItem("Hilfe");
        JMenuItem item2 = new JMenuItem("Beenden");
        JButton button1 = new JButton ();
        ButtonGroup buttongroup1 = new ButtonGroup();
        JRadioButtonMenuItem jradiobutton1 = new JRadioButtonMenuItem("Anfänger");
        JRadioButtonMenuItem jradiobutton2 = new JRadioButtonMenuItem("Fortgeschrittener");
        JRadioButtonMenuItem jradiobutton3 = new JRadioButtonMenuItem("Profi");
       
        menüleiste.add(menu1);
        menu1.add(menu2);
        menu1.add(item1);
        menu1.add(item2);
        menu2.add(jradiobutton1);
        menu2.add(jradiobutton2);
        menu2.add(jradiobutton3);
        buttongroup1.add(jradiobutton1);
        buttongroup1.add(jradiobutton2);
        buttongroup1.add(jradiobutton3);
        ContentPane.add(button1);
        item2.addActionListener(new BeendenListener());
        

       
        fenster.setJMenuBar(menüleiste);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setSize(600, 450);
        fenster.setVisible(true);
        }
    }
    class BeendenListener implements ActionListener
      {

        public void actionPerformed(ActionEvent arg0)
        {
        
           System.exit(0);
        }
      }

}
Importieren müsste man schon können :wink: . Danke für die Hilfe. :)
 

Leroy42

Top Contributor
Warum weist denn niemand den OP daraufhin, daß er hier
unnötigerweise 81-mal immer dieselben Menüs erzeugt? :shock:

Code:
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 




public class Fenster 
{ 

    

    public void fensterErstellen() 
    { 

        JFrame fenster = new JFrame("Vocamory"); 

        JMenuBar menüleiste = new JMenuBar(); 
        JMenu menu1 = new JMenu("Menü"); 
        JMenu menu2 = new JMenu("Neues Spiel"); 
        JMenuItem item1 = new JMenuItem("Hilfe"); 
        JMenuItem item2 = new JMenuItem("Beenden"); 
        item2.addActionListener(new BeendenListener()); 
        ButtonGroup buttongroup1 = new ButtonGroup(); 
        JRadioButtonMenuItem jradiobutton1 = new JRadioButtonMenuItem("Anfänger"); 
        JRadioButtonMenuItem jradiobutton2 = new JRadioButtonMenuItem("Fortgeschrittener"); 
        JRadioButtonMenuItem jradiobutton3 = new JRadioButtonMenuItem("Profi"); 
        
        menüleiste.add(menu1); 
        menu1.add(menu2); 
        menu1.add(item1); 
        menu1.add(item2); 
        menu2.add(jradiobutton1); 
        menu2.add(jradiobutton2); 
        menu2.add(jradiobutton3); 
        buttongroup1.add(jradiobutton1); 
        buttongroup1.add(jradiobutton2); 
        buttongroup1.add(jradiobutton3); 
        fenster.setJMenuBar(menüleiste); 
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        fenster.setSize(600, 450); 

        Container ContentPane = fenster.getContentPane(); 
        ContentPane.setLayout (new GridLayout(9,9)); 
        for (int i=0; i<81; i++) { 
          ContentPane.add(new JButton ()); 
        } 
        fenster.setVisible(true); 
    } 
    class BeendenListener implements ActionListener 
      { 

        public void actionPerformed(ActionEvent arg0) 
        { 
        
           System.exit(0); 
        } 
      } 

}

Frage: Was sollen die 81 Buttons denn überhaupt bewirken, wenn sie
keine Namen haben, geschweige denn ihnen ein ActionListener zugewiesen wird? ???:L
 

merlin2

Top Contributor
Leroy42 hat gesagt.:
Warum weist denn niemand den OP daraufhin, daß er hier
unnötigerweise 81-mal immer dieselben Menüs erzeugt?

Shadeo hat gesagt.:
also dein GUI funktioniert bei mir, wird nichts verdeckt.

aber was soll die Schleife bewirken? Willst du alle 81 Felder mit irgendwas füllen? Du erzeugst mit dem obigen Code 81 mal das Menu..

Code:
        for(int i = 0; i < 81; i++){
        	
        	ContentPane.add( new JLabel( String.valueOf(i) ) );
        }

        //Erzeugt in jedem Feld ein Label mit einer Nummer von 0 - 80
        //nur so als Beispiel
:lol:
 

Shadeo

Mitglied
Hingewiesen hab ich, auch Beispielcode gepostet um es zu ändern. Bin aber nicht sein Lehrer, ob ers anwendet oder nicht muss er selber entscheiden.

Shadeo hat gesagt.:
also dein GUI funktioniert bei mir, wird nichts verdeckt.

aber was soll die Schleife bewirken? Willst du alle 81 Felder mit irgendwas füllen? Du erzeugst mit dem obigen Code 81 mal das Menu..

Code:
        for(int i = 0; i < 81; i++){
        	
        	ContentPane.add( new JLabel( String.valueOf(i) ) );
        }

        //Erzeugt in jedem Feld ein Label mit einer Nummer von 0 - 80
        //nur so als Beispiel

Ich nehme an das wird sowas wie ein Memory-Spiel, aber Leroy hat natürlich Recht, so wird das nicht funktionieren. Die Buttons müssen später noch unterschieden werden können.
 
G

Guest

Gast
Okay ich seh's. Vielen Dank. So richtig?
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;




public class Fenster
{

   

    public void fensterErstellen()
    {

        JFrame fenster = new JFrame("Vocamory");
        Container ContentPane = fenster.getContentPane();
        ContentPane.setLayout (new GridLayout(9,9));

        JMenuBar menüleiste = new JMenuBar();
        JMenu menu1 = new JMenu("Menü");
        JMenu menu2 = new JMenu("Neues Spiel");
        JMenuItem item1 = new JMenuItem("Hilfe");
        JMenuItem item2 = new JMenuItem("Beenden");
 
        ButtonGroup buttongroup1 = new ButtonGroup();
        JRadioButtonMenuItem jradiobutton1 = new JRadioButtonMenuItem("Anfänger");
        JRadioButtonMenuItem jradiobutton2 = new JRadioButtonMenuItem("Fortgeschrittener");
        JRadioButtonMenuItem jradiobutton3 = new JRadioButtonMenuItem("Profi");

        for (int i=0; i<81; i++)
        {
        JButton button1 = new JButton ();
        ContentPane.add(button1);
        }
       
        menüleiste.add(menu1);
        menu1.add(menu2);
        menu1.add(item1);
        menu1.add(item2);
        menu2.add(jradiobutton1);
        menu2.add(jradiobutton2);
        menu2.add(jradiobutton3);
        buttongroup1.add(jradiobutton1);
        buttongroup1.add(jradiobutton2);
        buttongroup1.add(jradiobutton3);
        item2.addActionListener(new BeendenListener());
        
        fenster.setJMenuBar(menüleiste);
        fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fenster.setSize(600, 450);
        fenster.setVisible(true);
    }
    class BeendenListener implements ActionListener
      {

        public void actionPerformed(ActionEvent arg0)
        {
        
           System.exit(0);
        }
      }

}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben