Announcement

Collapse
No announcement yet.

Menübar nach paint weg

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Menübar nach paint weg

    Hallo Leute!

    Heute habe ich mich zum ersten mal an Java mit GUI gewagt. Naja, schon recht erfolgreich.
    Nun aber folgendes Problem.
    Ich habe zunächst eine Menüleiste mit Items eingefügt. Funktioniert tadellos. Nun wollte ich mittels <b>public void paint(Graphics g)</b> einfache Sachen zeichnen. Beispielsweise mit <b>drawRect</b> irgendwas.
    Sobald ich aber nur <b>public void paint(Graphics g) { }</b> so eingebaut habe und das Programm starte, wird die Menüleiste nicht mehr angezeigt. Ich kann jene zwar noch blind anwählen, doch das ist ja auch nicht das Wahre.
    Ist bestimmt nur ein Anfängerfehler. Doch wie und wo mache ich es besser?

    Fragende Grüße

    Torsten

  • #2
    Hallo!

    Wo malst Du denn so rein? Bzw. in welcher Klasse implementierst Du die main-Methode. Wenn Du bsp. von Frame abgeleitet hast, und die paint-Methode ueberschreibst, kann der Frame nicht mehr seine enthaltenen Komponenten zeichnen. Abbilfe koennte in diesem Fall eine Uberschreibung a la
    <pre>
    public void paint(Graphics g) {
    super.paint(g);
    // Dein Code hier ...
    }
    </pre>
    bringen. Schoen ist das so allerdings auch nicht.

    Herzliche Gruesse,
    Stefa

    Comment


    • #3
      Hallo!

      Besten Dank für die Antwort. Das funktioniert so schon ganz gut, ist aber wohl wirklich nicht das gelbe vom Ei.
      Aber hier mal mein Code.

      <PRE>
      import java.awt.*;
      import java.awt.event.*;
      import java.awt.Component.*;
      import javax.swing.*;

      public class MainFrame extends JFrame implements ActionListener
      {


      public MainFrame()
      {
      super("Mission One");

      /****** Menü-Einträge erstellen ******/

      JMenu dateiMenu, optMenu, aboutMenu;
      JMenuBar mBar;
      JMenuItem mi;

      /* Menüpunkt 1 */
      dateiMenu = new JMenu("Datei");
      mi = new JMenuItem("Neues Spiel");
      mi.addActionListener(this);
      dateiMenu.add(mi);
      dateiMenu.addSeparator(); /* Trennstrich */
      mi = new JMenuItem("Exit");
      mi.addActionListener(this);
      dateiMenu.add(mi);

      /* Menüpunkt 2 */
      optMenu = new JMenu("Optionen");
      mi = new JMenuItem("Mensch vs. Mensch");
      mi.addActionListener(this);
      optMenu.add(mi);
      mi = new JMenuItem("Mensch vs. Computer");
      mi.setEnabled(false);
      mi.addActionListener(this);
      optMenu.add(mi);

      /* Menüpunkt 3 */
      aboutMenu = new JMenu("Info");
      mi = new JMenuItem("About");
      mi.addActionListener(this);
      aboutMenu.add(mi);

      /* alles zusammenklatschen */
      mBar = new JMenuBar();
      mBar.add(dateiMenu);
      mBar.add(optMenu);
      mBar.add(aboutMenu);
      setJMenuBar(mBar);


      /********** Einstellungen für das Frame selbst ******/
      setSize(700, 600);
      setLocation(200,150);
      setVisible(true);
      setResizable(false);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /* sollte man so machen */



      }

      public void actionPerformed(ActionEvent event)
      {
      String cmd = event.getActionCommand();
      if (cmd.equals("Exit"))
      System.exit(0);

      /* AboutBox wird gerufen */
      if(cmd.equals("About"))
      {
      AboutBox aboutDlg = new AboutBox(this);
      aboutDlg.show();
      }
      }

      public void paint(Graphics g)
      {
      //super.paint(g);
      g.drawRect(20,20,500,500);

      }

      /* main */
      public static void main(String[] args)
      {
      MainFrame frame1 = new MainFrame();
      frame1.show();
      frame1.repaint();

      }
      }
      </PRE>

      Fragende Grüße

      Torste

      Comment


      • #4
        Hallo Torsten,

        wenn du in einem Frame zeichnen möchtest, empfehle ich dir dies immer in einer zeichenfläche zu tun (java.awt.Canvas).

        die Zeichenfläche kann dann als komponente dem frame-container hinzugefügt werden und die awt übernimmt das painting.

        <PRE>
        public class MeineZeichenflaeche extends java.awt.Canvas {

        public MeineZeichenflaeche () {}

        public void paint(Graphics g) {
        g.drawRect(20,20,500,500);
        // und andere schöne dinge
        }
        }
        </PRE>

        <PRE>
        public MainFrame()
        {
        super("Mission One");

        ..........

        super.setLayout(new java.awt.BrorderLayout());
        super.add(new MeineZeichenflaeche(), java.awt.BroderLayout.CENTER);
        }
        </PRE>

        gruss andrea

        Comment


        • #5
          Hallo Andreas!

          Genau so dachte ich mir das.
          Ich habe es nun doch etwas anders gelöst. Und zwar zeichne ich zunächst auf einem JPanel und füge jenes dann dem JFrame hinzu.

          Dankende Grüße

          Torste

          Comment

          Working...
          X