Problema JMenuBar e grafica...

di il
2 risposte

Problema JMenuBar e grafica...

Salve a tutti, sono Gianmarco e studio informatica!
Sto preparando il progetto di programmazione II, il testo chiede di implementare un sistema di prenotazioni posti per il cinema.
Gli ultimi problemi che mi sorgono, riguardano l'implementazione di una semplice finestra grafica con una barra dei menu... gli elementi devono essere "load..","save","save as.." e "exit".
La barra deve essere implementata in un frame, ho provato per 3 giorni senza raggiungere alcun risultato!
Inoltre dovrei inserire una parte grafica nella quale vengono mostrati i posti come tanti piccoli quadratini (tipo la schermata di prenotazione dell'uci cinemas http://img140.imageshack.us/i/cinemah.jpg).
Il tutto dovrebbe venire una cosa del genere(piu' la menuBar): http://img225.imageshack.us/i/framep.jpg
Qualcuno puo' darmi spiegazioni su come fare? Magari piu' tardi posto la traccia dell'esercizio e se servono i codici che ho sviluppato fino ad ora!
Grazie in anticipo!

2 Risposte

  • Re: Problema JMenuBar e grafica...

    Ciao, ti posto del codice che forse può aiutarti, costruisce un menu per il frame e poi c'e' una possibile soluzione per disegnare i posti (ho usato delle JLabel ma si possono usare anche immagini):

    import java.awt.Color;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;

    import javax.swing.*;

    public class JMenuBarDemo {

    public static void main(String[] args) {

    JFrame frame = new JFrame("Menu");

    JMenuBar mbar = new JMenuBar(); // Create menu bar

    JMenu fileMenu = new JMenu("File"); // Create file menu
    fileMenu.add(new JMenuItem("Nuovo"));
    fileMenu.add(new JMenuItem("Esci"));
    mbar.add(fileMenu);

    JMenu sampleMenu = new JMenu("Impostazioni"); // Create sample menu
    sampleMenu.add(new JMenuItem("Carica"));
    sampleMenu.insertSeparator(1);
    sampleMenu.add(new JMenuItem("Carica"));

    JMenu subMenu = new JMenu("Sottomenu");
    subMenu.add(new JMenuItem("Es1"));
    subMenu.add(new JMenuItem("Es2"));

    sampleMenu.add(subMenu);
    mbar.add(sampleMenu);

    frame.setJMenuBar(mbar); // Install menu bar
    frame.setSize(350, 250);
    frame.setVisible(true);


    JPanel panel = new JPanel();

    panel.setLayout(new GridBagLayout());

    GridBagConstraints c = new GridBagConstraints();


    int posx=0;
    int posy=0;

    for(int i=0;i<59;i++){

    c.gridx = posx;
    c.gridy = posy;
    c.insets=new Insets(3,3,3,3);

    JLabel q = new JLabel(" ");

    q.setBackground(new Color(1,22,22));
    q.setOpaque(true);

    panel.add(q,c);

    posx++;

    if(posx==9){
    posx=0;
    posy++;
    }
    }
    frame.add(panel);
    frame.setSize(350, 250);

    frame.setVisible(true);


    }
    }
  • Re: Problema JMenuBar e grafica...

    Ok, questi sono i due codici che ho sviluppato...
    l'unica cosa che devo ancora fare è usare il menù per caricare i dati in entrata da file e salvare quelli in uscita...
    mi spiego meglio:
    se uso load, il programma dovrà caricarmi i dati dei posti occupati che ho salvato in precedenza con save/save as.
    qualche idea?
    :spy:
    
    package cinema;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.Scanner;
    
    import javax.swing.JFileChooser;
    
    public class Cinema {
    	public Cinema()
    	{
    		 posti=new boolean[ROWS][COLUMNS];
    		 for (int i=0; i<ROWS; i++)
    			 for (int j=0;j<COLUMNS;j++)
    				 posti[i][j]=false;
    		 fila=new String[ROWS];
    		 fila[0]="A";
    		 fila[1]="B";
    		 fila[2]="C";
    		 fila[3]="D";
    		 fila[4]="E";
    		 fila[5]="F";
    		 fila[6]="G";
    		 fila[7]="H";
    		 fila[8]="I";
    		 fila[9]="J";
    	}
    	
    	public String prenota(int i, int j)
    	{
    		if(posti[i-1][j-1]!=false)
    		{	
    			return("Il posto è già prenotato!");
    		}
    		else
    		{
    			i-=1;
    			j-=1;
    			posti[i][j]=true;
    			return("Hai prenotato il posto "+(j+1)+" in fila "+fila[i]+".");
    		}
    
    		
    		
    	}
    	
    	public String prenotaAbbonamento(int i, int j, String cliente, String indirizzo)
    	{
    		if(posti[i-1][j-1]!=false)
    		{	
    			return("Il posto è già prenotato!");
    		}
    		else
    		{
    			i-=1;
    			j-=1;
    			posti[i][j]=true;
    			return("Hai prenotato il posto "+(j+1)+" in fila "+fila[i]+" per una stagione!");
    		}
    
    	}
    
    	
    	public void load()
    	{
    		JFileChooser chooser=new JFileChooser();
    		FileReader in=null;
    		if(chooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION)
    		{
    			File selectedFile=chooser.getSelectedFile();
    			try {
    				in=new FileReader(selectedFile);
    			} catch (FileNotFoundException e) {
    				
    				e.printStackTrace();
    			}
    		}
    	}
    	
    	public void saveas()
    	{
    		JFileChooser chooser=new JFileChooser();
    		PrintWriter out=null;
    		if(chooser.showSaveDialog(null)==JFileChooser.APPROVE_OPTION)
    		{
    			File selectedFile=chooser.getSelectedFile();
    			try {
    				out=new PrintWriter(selectedFile);
    			} catch (FileNotFoundException e) {
    				
    				e.printStackTrace();
    			}
    		}
    		
    	}
    	
    	
    	ArrayList<Posto> postiCinema=new ArrayList<Posto>();
    	private String fila[];
    	private boolean[][] posti;
    	private static final int ROWS=10;
    	private static final int COLUMNS=10;
    }
    
    
    package cinema;
    
    import java.awt.Color;
    import java.awt.GridBagConstraints;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JSeparator;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;
    
    public class CinemaField extends JFrame{
    
    	public CinemaField()
    	{
    		nuovoCinema=new Cinema();
    		resultArea=new JTextArea(AREA_ROWS, AREA_COLUMNS);
    		resultArea.setEditable(false);
    		setTitle("Cinema");
    								
    		createTextFieldFila();
    		createTextFieldPosto();
    		createButtonPrenota();
    		createTextFieldNome();
    		createTextFieldIndirizzo();
    		createButtonPrenotaAbbonamento();
    		createPanel();
    		createPosti();
    		createSeparator();
    		createMenu();
    								
    		setSize(FRAME_WIDTH, FRAME_HEIGHT);
    		
    	}
    
    
    	private void createTextFieldFila()
    	{
    		filaLabel=new JLabel("Fila: ");
    		
    		final int FIELD_WIDTH=2;
    		filaField= new JTextField(FIELD_WIDTH);
    	}
    
    	private void createTextFieldPosto()
    	{
    		postoLabel=new JLabel("Posto: ");
    
    		final int FIELD_WIDTH=2;
    		postoField= new JTextField(FIELD_WIDTH);
    	}
    	private void createTextFieldNome()
    	{
    		nomeLabel=new JLabel("Nome: ");
    		
    		final int FIELD_WIDTH=18;
    		nomeField= new JTextField(FIELD_WIDTH);
    	}
    	private void createTextFieldIndirizzo()
    	{
    		indirizzoLabel=new JLabel("Indirizzo: ");
    		
    		final int FIELD_WIDTH=18;
    		indirizzoField= new JTextField(FIELD_WIDTH);
    	}
    
    	private void createButtonPrenota()
    	{
    		prenotaButton= new JButton("Prenota");
    
    		class prenotaListener implements ActionListener
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				int fila= Integer.parseInt(filaField.getText());
    				int posto= Integer.parseInt(postoField.getText());
    				resultArea.setText("Stato prenotazione: "+nuovoCinema.prenota(fila, posto));
    			}
    		}
    		ActionListener listener = new prenotaListener();
    		prenotaButton.addActionListener(listener);
    	}
    
    	private void createButtonPrenotaAbbonamento()
    	{
    		prenotaAbbonamentoButton= new JButton("Prenota Abbonamento");
    
    		class prenotaListener implements ActionListener
    		{
    			public void actionPerformed(ActionEvent event)
    			{
    				int fila= Integer.parseInt(filaField.getText());
    				int posto= Integer.parseInt(postoField.getText());
    				String nome=nomeField.getText();
    				String indirizzo=indirizzoField.getText();
    				resultArea.setText("Stato prenotazione: "+nuovoCinema.prenotaAbbonamento(fila, posto, nome, indirizzo));
    			}
    		}
    		ActionListener listener = new prenotaListener();
    		prenotaAbbonamentoButton.addActionListener(listener);
    	}
    
    	private void createSeparator()
    	{
    		sep = new JSeparator();
    		panel.add(sep);
    	}
    	
    	private void createPosti()
    	{	
    		GridBagConstraints c = new GridBagConstraints();
    
    		int posx=0;
    		int posy=0;
    
    		for(int i=0;i<10;i++){
    		c.gridx = posx; 
    		c.gridy = posy;
    				
    		JLabel q = new JLabel("o");
    				
    		q.setBackground(new Color(1,22,22));
    		q.setOpaque(true);
    
    		panel.add(q,c);
    
    		posx++;
    
    		if(posx==5){
    		posx=0;
    		posy++;
    		}
    		} 
    	}
    	private void createMenu()
    	{
    		MenuBar = new JMenuBar();
    		fileMenu = new JMenu("File");
    		load=new JMenuItem("Load..");
    		fileMenu.add(load);
    		save=new JMenuItem("Save");
    		fileMenu.add(save);
    		saveas=new JMenuItem("Save as..");
    		fileMenu.add(saveas);
    		fileMenu.insertSeparator(3);
    		exit=new JMenuItem("Exit");
    		fileMenu.add(exit);
    		MenuBar.add(fileMenu);
    		setJMenuBar(MenuBar);
    		
    		class LoadListener implements ActionListener
    		{
    			
    		public void actionPerformed(ActionEvent event)
    			{ 
    				nuovoCinema.load();
    			}
    		}
    
    		ActionListener loadlistener = new LoadListener();
    		load.addActionListener(loadlistener);
    		
    		class SaveasListener implements ActionListener
    		{
    			
    		public void actionPerformed(ActionEvent event)
    			{ 
    				nuovoCinema.saveas();
    			}
    		}
    
    		ActionListener saveaslistener = new SaveasListener();
    		saveas.addActionListener(saveaslistener);
    		
    		class ExitListener implements ActionListener
    		{
    			
    		public void actionPerformed(ActionEvent event)
    			{ 
    				System.exit(NORMAL);
    			}
    		}
    
    		ActionListener exitlistener = new ExitListener();
    		exit.addActionListener(exitlistener);
    
    		
    				
    	}
    	private void createPanel()
    	{
    		panel=new JPanel();
    		panel.add(filaLabel);
    		panel.add(filaField);
    
    		panel.add(postoLabel);
    		panel.add(postoField);
    		
    		panel.add(prenotaButton);
    		
    		JScrollPane scrollPane=new JScrollPane(resultArea);
    		panel.add(scrollPane);
    		add(panel);
    		
    		panel.add(nomeLabel);
    		panel.add(nomeField);
    
    		panel.add(indirizzoLabel);
    		panel.add(indirizzoField);
    		
    		panel.add(prenotaAbbonamentoButton);
    						
    	}
    
    	private JLabel filaLabel;
    	private JLabel postoLabel;
    	private JLabel indirizzoLabel;
    	private JLabel nomeLabel;
    	private JTextField filaField;
    	private JTextField postoField;
    	private JTextField indirizzoField;
    	private JTextField nomeField;
    	private JButton prenotaButton;
    	private JButton prenotaAbbonamentoButton;
    	private JPanel panel;
    	private Cinema nuovoCinema;
    	private JTextArea resultArea;
    	private JSeparator sep;
    	private JMenuBar MenuBar;
    	private JMenu fileMenu;
    	private JMenuItem load;
    	private JMenuItem saveas;
    	private JMenuItem save;
    	private JMenuItem exit;
    			
    	private static final int FRAME_WIDTH=220;
    	private static final int FRAME_HEIGHT=500;
    	
    	private static final int AREA_ROWS=10;
    	private static final int AREA_COLUMNS=15;
    }
    
Devi accedere o registrarti per scrivere nel forum
2 risposte