Hi all,
need help! The following class doesn't give errors but doesn't draw from this class extending a Jpanel.
Moreover I'd like a multi-level game, so I was thinking to use a Jpanel array in this following class
Here it follows the Java code for a Java game that draws on the just mentioned Jpanel.
The point is that it doesn't work with the just written AreaDiGioco.java and I need to do a multi-level game
so I was thinking to a Jpanel array to be selected via a
need help! The following class doesn't give errors but doesn't draw from this class extending a Jpanel.
Moreover I'd like a multi-level game, so I was thinking to use a Jpanel array in this following class
import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JPanel; public class AreaDiGioco extends JPanel { public static Player player; public AreaDiGioco() { player = new Player(300, 300); } public void paint(Graphics g) { player.x++; g.setColor(Color.white); g.fillRect(player.x, player.y, 32, 32); } public void start(){ loop.start(); } public void gameLoop() { repaint(); } @Override public void paintComponent(Graphics g) { g.setColor(Color.BLACK); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(Color.yellow); g.drawRect(30, 30, 30, 30); } } //..... public void Restart() {*/ // protected void paintComponent (Graphics g, boolean started) // { // if (started = true){ // g.setColor(Color.RED); // GameLogic = new GameBoardLogic(); // removeAll(); // repaint(); // } /* public Boolean StartGame(Boolean B)/>/> { if(started=true) return true; else return false; } protected void paintComponent (Graphics g) { //ImageIcon Pantera = new ImageIcon(this.getClass().getResource("/Pantera-small3.gif"));
Here it follows the Java code for a Java game that draws on the just mentioned Jpanel.
The point is that it doesn't work with the just written AreaDiGioco.java and I need to do a multi-level game
so I was thinking to a Jpanel array to be selected via a
import java.awt.*; // per l'import di EventQueue, getContentPane() import javax.swing.*; // per l'import di JOptionPane, JFrame (e la JMenubar), JButton, JLabel, JTextField, JTextArea; import java.awt.event.*; // per l'import di ActionListener, ItemListener, ActionEvent, ItemEvent; import java.io.*; // per l'import di FileReader, FileWriter, BufferedReader,BufferedWriter, IOException; //import java.util.Observer; import javax.swing.JFileChooser; import javax.swing.filechooser.*; import javax.swing.filechooser.FileFilter; // per l'import di FileNameExtensionFilter; FileSystemView; FileFilter; public class MainControlMarioGUI4 extends JFrame implements ActionListener { /** * La classe principale */ // private static final long serialVersionUID = 1L; // Dichiarazione di variabili public JPanel AreaDiGioco; //private JPanel GameBoard; //private JPanel Tela; private JTextArea AreaDiTesto; private JScrollPane AreaTestoLunga; private JMenuBar MenuBar; private JMenu MenuTendina, JMenu_ApriGioco, JMenu_SalvaGioco, MenuAbout; private JMenuItem MenuItem_NuovoGioco, JMenuItem_ApriPercorsoPredefinito, JMenuItem_ApriDaPercorso, JMenuItem_SalvaPercorsoPredefinito, JMenuItem_SalvaInPercorso, JMenuItem_EsciDaGioco, JMenuItem_About; public JPopupMenu.Separator jSeparator1,jSeparator2,jSeparator3, jSeparator4,jSeparator5; int PopUpAvvio, PopUpUscita; // valore compreso tra 0 e 1 int n = (int)(Math.random()*2); // valore compreso tra 0 e 10 int m = (int)(Math.random() * 10); //--------------------------Definizione delle variabili di giocatore ----------------- private Personaggio personaggio; private boolean playerUp = true; boolean playerDown = false; private boolean playerLeft = false; private boolean playerRight = false; private boolean rightOn = false; private boolean leftOn = false; private boolean upOn = false; private boolean downOn = false; private ImageIcon Pantera; boolean leftTrue = true; boolean rightTrue = true; boolean upTrue = true; boolean downTrue = true; boolean level1 = true; boolean level1wall = true; private int width; private int height; private ComponentListener l; int x,y, dx, dy; private Object Level; //--------------------------------------------------------------------------- /** * La classe crea un JFrame chiamato MainControlMarioGUI * */ public MainControlMarioGUI4() { inizializzoComponenti(); } /** * Questo metodo chiamato inizializza tutti i principali componenti del Frame: * un JPanel comprensivo di Canvas come area di gioco (nominate ripettivamente "AreaDiGioco" e "Tela"), * una JmenuBar per l'interazione con un file che contiene i dati della partita, * una JTextArea per la visualizzazione di cio' che accade ai file-partita creati (Apri, Salva, Esci). * Il Metodo inizializzoComponenti non restituisce alcun valore, ma definisce e aggiunge i vari componenti * all'interno del Frame: L'Area di Gioco e' un JPane e relativa Canvas, * mentre L' Area di Testo e' un JTextArea con relativa JScrollArea associata */ //@SuppressWarnings("unchecked") private void inizializzoComponenti() { GridBagConstraints gridBagConstraints; // dichiarazioni dei componenti del Frame tramite variabili istanza: // Panel e relativa Canvas che verranno poi posizionati a sx del Frame e JTextArea col relativo JScrollPane a dx AreaDiGioco = new JPanel(); AreaTestoLunga = new JScrollPane(); AreaDiTesto = new JTextArea(); personaggio = new Personaggio(); // dichiarazioni dei componenti tramite variabili istanza della MenuBar : // Menu, MenuItem e relativi separatori vengono dichiarati ed associati alla MenuBar del Frame principale MenuBar = new JMenuBar(); MenuTendina = new JMenu(); JMenu_ApriGioco = new JMenu(); JMenu_SalvaGioco = new JMenu(); MenuAbout = new JMenu(); MenuItem_NuovoGioco = new JMenuItem(); JMenuItem_ApriPercorsoPredefinito = new JMenuItem(); JMenuItem_ApriDaPercorso = new JMenuItem(); JMenuItem_SalvaPercorsoPredefinito = new JMenuItem(); JMenuItem_SalvaInPercorso = new JMenuItem(); JMenuItem_EsciDaGioco = new JMenuItem(); JMenuItem_About = new JMenuItem(); jSeparator1 = new JPopupMenu.Separator(); jSeparator2 = new JPopupMenu.Separator(); jSeparator3 = new JPopupMenu.Separator(); jSeparator4 = new JPopupMenu.Separator(); jSeparator5 = new JPopupMenu.Separator(); //definizioni delle proprieta' per il Frame principale setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); setTitle("Pantera 1.0 - Progetto di Mario Profumo matr. 1506204"); setMinimumSize(new Dimension(1200, 600)); setName("frame"); setResizable(false); getContentPane().setLayout(new GridBagLayout()); //definizioni delle proprieta' per il JPanel AreaDiGioco.setBackground(new Color(204, 255, 255)); AreaDiGioco.setAlignmentX(0.0F); AreaDiGioco.setAlignmentY(0.0F); AreaDiGioco.setMaximumSize(new Dimension(800, 600)); AreaDiGioco.setMinimumSize(new Dimension(800, 600)); AreaDiGioco.setFocusable(true); //AreaDiGioco.addKeyListener(this); //definizioni delle proprieta' per il JPanel e del LayoutManager GroupLayout GroupLayout AreaDiGiocoLayout = new GroupLayout(AreaDiGioco); AreaDiGioco.setLayout(AreaDiGiocoLayout); AreaDiGiocoLayout.setHorizontalGroup( AreaDiGiocoLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGap(0, 800, Short.MAX_VALUE) ); AreaDiGiocoLayout.setVerticalGroup( AreaDiGiocoLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGap(0, 610, Short.MAX_VALUE) ); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.anchor = GridBagConstraints.FIRST_LINE_START; getContentPane().add(AreaDiGioco, gridBagConstraints); //definizioni delle proprieta' per il JScrollPane AreaTestoLunga.setMaximumSize(new Dimension(400, 600)); AreaTestoLunga.setMinimumSize(new Dimension(400, 600)); AreaTestoLunga.setPreferredSize(new Dimension(400, 600)); //definizioni delle proprieta' per la JTextArea AreaDiTesto.setColumns(20); AreaDiTesto.setRows(5); AreaDiTesto.setMaximumSize(new Dimension(400, 600)); AreaDiTesto.setMinimumSize(new Dimension(400, 600)); AreaDiTesto.setPreferredSize(new Dimension(400, 600)); AreaDiTesto.setRequestFocusEnabled(false); AreaTestoLunga.setViewportView(AreaDiTesto); // si aggiunge la JtextArea definita in un'area di getContentPane().add(AreaTestoLunga, new GridBagConstraints()); // Aggiungiamo il testo a JMenu, per i controlli su file di gioco MenuTendina.setText("Controlli sul file di gioco"); MenuItem_NuovoGioco.setText("Nuova partita"); MenuItem_NuovoGioco.addActionListener(this); MenuItem_NuovoGioco.setActionCommand("Avvia partita"); JMenu_ApriGioco.setText("Apri partita"); JMenuItem_ApriPercorsoPredefinito.setText("apri da percorso predefinito"); JMenuItem_ApriPercorsoPredefinito.addActionListener(this); JMenuItem_ApriPercorsoPredefinito.setActionCommand("Ricarica partita predefinita"); JMenuItem_ApriDaPercorso.setText("apri da percorso specificato"); JMenuItem_ApriDaPercorso.addActionListener(this); JMenuItem_ApriDaPercorso.setActionCommand("Ricarica partita da percorso"); JMenu_ApriGioco.add(JMenuItem_ApriPercorsoPredefinito); JMenu_ApriGioco.add(jSeparator2); JMenu_ApriGioco.add(JMenuItem_ApriDaPercorso); MenuTendina.add(MenuItem_NuovoGioco); MenuTendina.add(jSeparator1); MenuTendina.add(JMenu_ApriGioco); MenuTendina.add(jSeparator3); JMenu_SalvaGioco.setText("Salva partita"); JMenuItem_SalvaPercorsoPredefinito.setText("salva da percorso predefinito"); JMenuItem_SalvaPercorsoPredefinito.addActionListener(this); JMenuItem_SalvaPercorsoPredefinito.setActionCommand("Salva percorso predefinito"); JMenu_SalvaGioco.add(JMenuItem_SalvaPercorsoPredefinito); JMenu_SalvaGioco.add(jSeparator4); JMenuItem_SalvaInPercorso.setText("salva da percorso specificato"); JMenuItem_SalvaInPercorso.addActionListener(this); JMenuItem_SalvaInPercorso.setActionCommand("Salva percorso specificato"); JMenu_SalvaGioco.add(JMenuItem_SalvaInPercorso); MenuTendina.add(JMenu_SalvaGioco); MenuTendina.add(jSeparator5); JMenuItem_EsciDaGioco.setText("Esci da gioco"); JMenuItem_EsciDaGioco.addActionListener(this); JMenuItem_EsciDaGioco.setActionCommand("Chiudi"); MenuTendina.add(JMenuItem_EsciDaGioco); MenuBar.add(MenuTendina); MenuAbout.setText(" A riguardo..."); JMenuItem_About.setText("Autore & ringraziamenti"); JMenuItem_About.addActionListener(this); JMenuItem_About.setActionCommand("Pop-up Mario"); MenuAbout.add(JMenuItem_About); MenuBar.add(MenuAbout); setJMenuBar(MenuBar); pack(); } // --- Fine Definizione JMenuBar e relativi JMenu/ JMenuitem & Inizio delle ActionPerformed sul file partita ------- // il metodo ActionPerformed della classe ActionListener svolge l'operazione desiderata. // La super-classe ActionEvent (stesse API java.awt.event.*) ne gestisce l'attivazione // il ciclo condizionale sul metodo getActionCommand proviene dalle stesse API appena menzionate // e fa quello che dice public void actionPerformed(ActionEvent evt) { // visualizza a video nella JTextArea le opzioni selezionate dai Jmenu e JmenuItem // tramite il metodo Append di javax.swing.JtextArea AreaDiTesto.append(evt.getActionCommand() + " Selezionato \n"); if(evt.getActionCommand().equals("Avvia partita")) { // confronto tra stringhe // assegna JOptionPane.showConfirmDialog ad una variabile intera // e ne fa un ciclo condizionale piu' interno int PopUpAvvio = JOptionPane.showConfirmDialog(null,"Vuoi iniziare una nuova partita?"); // se premi l'opzione "YES" del pop-up apre un nuovo mondo virtuale if (PopUpAvvio ==JOptionPane.YES_OPTION) { // Avvia la locazione del nuovo mondo virtuale AreaDiGioco=new AreaDiGioco(); //File partitaDefault = new File(this.getClass().getResource("/Pantera1.0.txt").getFile()); /* try { Input input = PanteraFileFormat.readFile(partitaDefault); AreaDiTesto.append("Acquisizione del file partita di default in corso\n"); } catch (IOException ex) { AreaDiTesto.append("L\'operazione appena compiuta ha generato la " + ex +"\n"); ex.printStackTrace(); } */ }if (PopUpAvvio ==JOptionPane.NO_OPTION) { // se premi l'opzione "NO" del pop-up stampa la deselezione del JMenuItem "Avvia partita" AreaDiTesto.append(evt.getActionCommand() + " Deselezionato \n"); } } else if(evt.getActionCommand().equals("Ricarica partita predefinita")) { // confronto tra stringhe JFileChooser chooser = new JFileChooser(); FileSystemView view = chooser.getFileSystemView(); // la lettura del file partita del tipo "Monkey Island.txt", compreso lo scarto dei commenti AreaDiTesto.append("Selezionato <Ricarica Partita> dal percorso " + view.getDefaultDirectory()); AreaDiTesto.append("\n"); try { JFileChooser PrendiFile = new JFileChooser(); PrendiFile.setFileFilter(new TxtFileFilter()); int n = PrendiFile.showOpenDialog(this); if (n == JFileChooser.APPROVE_OPTION) { AreaDiTesto.append("Il file selezionato e\': " + PrendiFile.getSelectedFile().getName()); File partita = PrendiFile.getSelectedFile(); BufferedReader read = new BufferedReader(new FileReader(partita)); String line = read.readLine(); while(line != null) { String LineNoComment = line.split("\\#")[0]; // prende la parte di stringa prima del simbolo "#" // AreaDiTesto.append(LineNoComment); questa riga era stata introdotta per debug tramite AreaDiTesto line = read.readLine(); } read.close(); } } catch (Exception ex) { AreaDiTesto.append("L\'operazione appena compiuta ha generato la " + ex +"\n"); } } else if(evt.getActionCommand().equals("Ricarica partita da percorso")) { // confronto tra stringhe JFileChooser chooser = new JFileChooser(); FileSystemView view = chooser.getFileSystemView(); // la lettura del file partita del tipo "Monkey Island.txt", compreso lo scarto dei commenti AreaDiTesto.append("Selezionato <Ricarica Partita> dal percorso " + view.getDefaultDirectory()+"\n"); try { JFileChooser PrendiFile = new JFileChooser(); PrendiFile.setFileFilter(new TxtFileFilter()); int n = PrendiFile.showOpenDialog(this); if (n == JFileChooser.APPROVE_OPTION) { AreaDiTesto.append("Il file selezionato e\': " + PrendiFile.getSelectedFile().getName()); File partita = PrendiFile.getSelectedFile(); Input input = PanteraFileFormat.readFile(partita); // importante! Acquisizione del file dalla classe PanteraFileFormat BufferedReader read = new BufferedReader(new FileReader(partita)); String line = read.readLine(); while(line != null) { //String LineNoComment = line.split("\\#")[0]; // prende la parte di stringa prima del simbolo "#" // AreaDiTesto.append(LineNoComment); questa riga era stata introdotta per debug tramite AreaDiTesto AreaDiTesto.append("Acquisizione del file in corso"); line = read.readLine(); } read.close(); } } catch (Exception ex) { AreaDiTesto.append("L\'operazione appena compiuta ha generato la " + ex +"\n"); } } else if(evt.getActionCommand().equals("Salva percorso predefinito")) { // confronto tra stringhe JFileChooser chooser = new JFileChooser(); FileSystemView view = chooser.getFileSystemView(); AreaDiTesto.append("Selezionato <Salva Partita> dal percorso " + view.getDefaultDirectory() + "\n"); } else if(evt.getActionCommand().equals("Salva percorso specificato")) { // confronto tra stringhe // xxxx JFileChooser chooser = new JFileChooser(); FileSystemView view = chooser.getFileSystemView(); AreaDiTesto.append("Selezionato <Ricarica Partita> dal percorso " + view.getDefaultDirectory()+"\n"); try { JFileChooser PrendiFile = new JFileChooser(); PrendiFile.setFileFilter(new TxtFileFilter()); int n = PrendiFile.showOpenDialog(this); if (n == JFileChooser.APPROVE_OPTION) { AreaDiTesto.append("Il file selezionato e\': " + PrendiFile.getSelectedFile().getName()); File partita = PrendiFile.getSelectedFile(); Input output = PanteraFileFormat.readFile(partita); // importante! Acquisizione del file dalla classe PanteraFileFormat BufferedReader read = new BufferedReader(new FileReader(partita)); String line = read.readLine(); while(line != null) { //String LineNoComment = line.split("\\#")[0]; // prende la parte di stringa prima del simbolo "#" // AreaDiTesto.append(LineNoComment); questa riga era stata introdotta per debug tramite AreaDiTesto AreaDiTesto.append("Acquisizione del file in corso"); line = read.readLine(); } read.close(); } } catch (Exception ex) { AreaDiTesto.append("L\'operazione appena compiuta ha generato la " + ex +"\n"); } } else if(evt.getActionCommand().equals("Chiudi")) { // confronto tra stringhe // assegna JOptionPane.showConfirmDialog ad una variabile intera // e ne fa un ciclo condizionale pi� interno int PopUpUscita = JOptionPane.showConfirmDialog(null,"Vuoi realmente chiudere il Gioco?"); //se premi l'opzione "YES" del pop-up chiude il JFrame principale // sarebbe possibile far risalvare la partita prima di uscire if (PopUpUscita ==JOptionPane.YES_OPTION) { System.exit(0); } if (PopUpUscita ==JOptionPane.NO_OPTION) { // se premi l'opzione "NO" del pop-up stampa la deselezione del JMenuItem "Chiudi" AreaDiTesto.append(evt.getActionCommand() + " Deselezionato \n"); } } else if (evt.getActionCommand().equals("Pop-up Mario")) { JOptionPane.showMessageDialog(null," Mario \"little Pantera\" Profumo \n matr. 15062042 \n " + "\n"+ " esame di Metodologie di Programmazione \n"+ "primo canale - " + " anno accademico 2012-2013 \n" + "\n"+ " ...si ringrazia per quanto appreso! :)/>/> ", "Autore & ringraziamenti", JOptionPane.PLAIN_MESSAGE); } } // --------- Fine del metodo ActionPerformed della classe ActionListener & ------------------------------------- // --------- Inizio metodi per filtro txt apertura/salvataggio file partita ------------------------------------- private class TxtFileFilter extends FileFilter { public boolean accept(File partita) { // Converte in lower case prima del controllo di estensione return (partita.getName().toLowerCase().endsWith(".txt") || partita.isDirectory()); } public String getDescription() { return "File di testo (*.txt)"; } } //----------------------------- movimenti del giocatore --------------------// // --------- Fine metodi per gestione finestra di gioco & Inizio del Main ------------------------------------------------------- /** * @param args the command line arguments */ public static void main(String args[]) { // Schedula un job per il thread event-dispatching (tramite Java.awt anzich� Swing) // che crea la Graphical User Interface principale. Questo programma cercher�, // per quanto possibile, di usare l' API java.awt.* piuttosto che Javax.Swing // per evitare problemi nella gestione del Java Visual thread. EventQueue.invokeLater(new Runnable() { // si e' appena creata un'interfaccia che implementa Runnable, rendendo il thread principale // quello da cui gli altri thread figlio verranno eventualmente generati public void run() { try {new MainControlMarioGUI4().setVisible(true); }catch(Exception e) { e.printStackTrace(); } } }); } }