Just nu i M3-nätverket
Gå till innehåll

Meny-problem...


Rikard Nilsson

Rekommendera Poster

Rikard Nilsson

Jag har lite problem med att få min menu att visa sig i lvcMainWindow, och jag kommer inte på nåt sätt att lägga till den så att den inte genererar massa fel...

Här kommer filerna i alla fall:

 

//lvc.java
/**	lvc - LedningsVakt Central
*	
*	Version: 0.0.1alpha1
*
*/
/**
*	lvc - The name of the game
*/
class lvc {
/**
*	Main Class
*/
public static void main(String[] args) {
	/**
	*	call the main window
	*/
	new lvcMainWindow();
}
}

 

//lvcMainWindow.java
/* Import AWT & SWING for graphics components */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

//public class lvcMainWindow extends JFrame implements ActionListener {
public class lvcMainWindow extends JFrame {

   /** lvcMainWindow Constructor   */
   public lvcMainWindow() {
       /** Construct a JDesktopPane named: lvcMW  */
       JDesktopPane lvcMW = new JDesktopPane();

       /*  lvcMW Title: LedningsVakt Central   */
       setTitle("LedningsVakt Central");

       /*  lvcMW Bounderies and Size   */
       setBounds(15, 15, 600, 440);

       /*  Make lvcMW Visible  */
       setVisible(true);

       /*  not sure what this does */
       setContentPane(lvcMW);

       /*  Make a nice colored background  */
       lvcMW.setBackground(new Color(50, 50, 50));

       /*  Add operation for exit  */
       addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent eaEvent) {
               exitApp(eaEvent);
           }
       });

       /** Add the menubar */
       //lvcMenuBar();
   }

   /** lvcMenuBar Constructor  */
   public void lvcMenuBar() {
       /** Call for the menubar    */
       new lvcMenuBar();
   }

   /** Exit the Application    */
   private void exitApp(WindowEvent eaEvent) {
       System.exit(0);
   }
}

 

//lvcMenuBar.java
/* Import AWT & SWING for graphics components */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class lvcMenuBar {
   public lvcMenuBar() {
       JMenuBar    lvcMB       = new JMenuBar();
       JMenu       lvcMenuFile = new JMenu();
       JMenuItem   mbFileExit  = new JMenuItem();

       lvcMenuFile.setText("Arkiv");
       mbFileExit.setText("Avsluta");
       mbFileExit.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent mbEvent) {
               mbFileExit(mbEvent);
           }
       });

       lvcMenuFile.add(mbFileExit);
       lvcMB.add(lvcMenuFile);
   }

   private void mbFileExit(ActionEvent mbEvent) {
       /**
        *  When Arkiv(File)/Avsluta(Exit) is pressed, exit application.
        */
       System.exit(0);        // Add your handling code here:
   }
}

 

 

Jag har säkert missat nåt basic bara...

 

Som hur jag får lvcMenuBar att lägga sig i min JDesktopPane i lvcMainWindow...

 

De flesta saker jag testat ger mig unresolved symbols, eller declaration type missing.

 

Den koden som är ovan, kompilerar utan errors, körs ok, men uten menuBaren...

 

Länk till kommentar
Dela på andra webbplatser

-Patrik Johansson-

Hej

Detta beror på flera saker, bland annat anropar du inte någon metod för att fixa menyn och i vilket fall skulle inte menyn känna till referensen till JFrame(ej DesktopPane).

I lvc.java har jag inte ändrat något.

 

I lvcMainWindow.java har jag tagit bort

/** Add the menubar */
//lvcMenuBar();

vilket också innebär att jag inte använder metoden med samma namn:

/** lvcMenuBar Constructor */
public void lvcMenuBar() {
/** Call for the menubar */
new lvcMenuBar();
}

.

Istället har jag lagt till dessa två rader:

new lvcMenuBar(this);
pack();

under listenerdeklarationen.

Den första raden skapar en ny lvcMenuBar och skickar med referensen till den aktuella JFramen, därav this.

 

Detta medför lite ändringar i lvcMenuBar:

Först måste konstruktorn ta emot en JFrame:

public lvcMenuBar(JFrame frame)

Sedan kommer denna rad av kod fixar menyn på plats:

frame.setJMenuBar(lvcMB)

 

Här är koden i helhet:

lvcMenuBar:

//lvcMenuBar.java
/* Import AWT & SWING for graphics components */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class lvcMenuBar {

public lvcMenuBar(JFrame frame) {
JMenuBar lvcMB = new JMenuBar();
JMenu lvcMenuFile = new JMenu();
JMenuItem mbFileExit = new JMenuItem();

lvcMenuFile.setText("Arkiv");
mbFileExit.setText("Avsluta");
mbFileExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent mbEvent) {
mbFileExit(mbEvent);
}
});

lvcMenuFile.add(mbFileExit);
lvcMB.add(lvcMenuFile);

frame.setJMenuBar(lvcMB);
}


private void mbFileExit(ActionEvent mbEvent) {
/**
* When Arkiv(File)/Avsluta(Exit) is pressed, exit application.
*/
System.exit(0); // Add your handling code here:
}
}

 

lvcMainWindow:

//lvcMainWindow.java
/* Import AWT & SWING for graphics components */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

//public class lvcMainWindow extends JFrame implements ActionListener {
public class lvcMainWindow extends JFrame {

/** lvcMainWindow Constructor */
public lvcMainWindow() {
/** Construct a JDesktopPane named: lvcMW */
JDesktopPane lvcMW = new JDesktopPane();

/* lvcMW Title: LedningsVakt Central */
setTitle("LedningsVakt Central");

/* lvcMW Bounderies and Size */
setBounds(15, 15, 600, 440);

/* Make lvcMW Visible */
setVisible(true);

/* not sure what this does */
setContentPane(lvcMW);

/* Make a nice colored background */
lvcMW.setBackground(new Color(50, 50, 150));

/* Add operation for exit */
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent eaEvent) {
exitApp(eaEvent);
}
});
new lvcMenuBar(this);
pack();
}

/** Exit the Application */
private void exitApp(WindowEvent eaEvent) {
System.exit(0);
}
}

 

/Neox -(Patrik J)

"Gravitation can not be held responsible for people falling in love"
- citat av Albert Einstein

 

Länk till kommentar
Dela på andra webbplatser

Rikard Nilsson

Nu funkar menyn i mainWindow...

 

Så till lite följdfrågor:

Innan menyn sattes på plats, så blev fönstrets storlek enl setBounds värden, men när menyn kom på plats, så blir fönstret bara så stort som meny-texten är, dvs "Arkiv" och underliggande "Avsluta".

 

Om jag manuellt resizar fönstret, så får jag hela menyn på toppen, och min desktopåane mörkgrå som det var tänkt från början...

 

setSize funkar inte.

 

Några ideer?

Btw, vad är skillnaden mellan en JDesktopPane och en JFrame? (Så man lär sig nåt på köpet).

 

Tack för hjälpen så länge...

 

Länk till kommentar
Dela på andra webbplatser

-Patrik Johansson-

JFrame är så att säga ramen/fönstret med pane är det som finns i fönstret.....

Lite dåligt förklarat men jag är inte säker själv.

 

Hur skall du då fixa detta.

Jo, ta bort DesktopPane. Du klarar dig nog med den färdiga.

Testa denna kod för lvcMainWindow:

//lvcMainWindow.java
/* Import AWT & SWING for graphics components */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

//public class lvcMainWindow extends JFrame implements ActionListener {
public class lvcMainWindow extends JFrame {

/** lvcMainWindow Constructor */
public lvcMainWindow() {
/** Construct a JDesktopPane named: lvcMW */
//JDesktopPane lvcMW = new JDesktopPane();

/* lvcMW Title: LedningsVakt Central */
this.setTitle("LedningsVakt Central");

//Skapar en panel som skall fylla ut tomrummet som gör fönstret litet.
JPanel p = new JPanel();
//Sätter storleken på panelen.
p.setPreferredSize(new Dimension( 600,400));
//lägger till panelen till det pane som finns.
this.getContentPane().add(p);
//Sätter gränserna för pane.
this.setBounds(15, 15, 600, 440);
//Sätter bakgrundsfärgen.
this.setBackground(new Color(50, 50, 150));

/* Add operation for exit */
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent eaEvent) {
exitApp(eaEvent);
}
});
new lvcMenuBar(this);
setVisible(true);
this.pack();
}

/** Exit the Application */
private void exitApp(WindowEvent eaEvent) {
System.exit(0);
}
}

Som du ser använder jag också this för att visa att det är denna JFrames metoder man anropar vilket skulle hända ändå(utan this).

 

 

/Neox -(Patrik J)

"Gravitation can not be held responsible for people falling in love"
- citat av Albert Einstein

[inlägget ändrat 2003-04-19 22:45:52 av Patrik J Johansson]

Länk till kommentar
Dela på andra webbplatser

Rikard Nilsson

Jag tackar och bugar för hjälpen ytterligare.

 

Jag moddade din kod lite granna å efter mycket om å men, slitandes bland api-doc's länkar tills musen glödde rött, fick jag för mig att helt enkelt testa lägga till setPreferredSize till lvcMW...

Här är koden till lvcMainWindow.java

/* Import AWT & SWING for graphics components */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

//public class lvcMainWindow extends JFrame implements ActionListener {
public class lvcMainWindow extends JFrame {

   /*  lvcMainWindow Constructor   */
   public lvcMainWindow() {
       /*  Construct a JDesktopPane named: lvcMW  */
       JDesktopPane lvcMW = new JDesktopPane();
[color="#ff0000"] Jag har fortfarande kvar min desktoppane här.[/color]
       /*  lvcMW Title: LedningsVakt Central   */
       this.setTitle("LedningsVakt Central");

       /*  lvcMW Bounderies and Size   */
       this.setBounds(15, 15, 600, 440);
[color="#ff0000"]
       /*  lvcMW Preferred Size    */
//Detta är tillagt
       lvcMW.setPreferredSize(new Dimension(600, 440));
[/color]

       /*  Make lvcMW Visible  */
       this.setVisible(true);

       /*  not sure what this does */
       this.setContentPane(lvcMW);

       /*  Make a nice colored background  */
       lvcMW.setBackground(new Color(50, 50, 50));

       /*  Add MenuBar to the main window  */
       new lvcMenuBar(this);
       this.pack();

       /*  Add operation for exit  */
       addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent eaEvent) {
               exitApp(eaEvent);
           }
       });
   }

   /*  Exit the Application    */
   private void exitApp(WindowEvent eaEvent) {
       System.exit(0);
   }
}

 

 

Jag försökte även att lägga menyn i en egen panel först, men jag fick inte riktigt till det med contentPane och flera olika panels i den...

 

Men, nu funkar det i alla fall som det är tänkt (hoppas jag i alla fall) och tackar än en gång för hjälpen.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...