Movimenti in JFrame

di il
4 risposte

Movimenti in JFrame

Ho dei piccoli problemi sul Jframe dopo l'aggiunta del menù, di fatti se vi clicco sopra con il mouse successivamente non legge il movimento del medesimo o lo spostamento verticale del puntatore; tra l'altro o forti curiosità sul come si possa implementare una scelta da tastiera sul frame, io nel codice del programma, sotto illustrato, ho progettato uno switch per il ridimensionamento del frame, però non so come fare a selezionare la risoluzione dal frame, perché con input da tastiera non ci vuole niente, però il problema è la scelta del menù del frame, non fate caso all'unione del menu del ridimensionamento e a quello per l'accesso, perdonatemi se non è in ordine o roba del genere, grazie.

package graficaprogetto;




import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.MenuContainer;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.*;


public class GraficaProgetto extends Canvas implements Runnable,KeyListener,MouseMotionListener,MenuConta iner{
private static int altezza;
private static int larghezza;
private static String nome="CNMS";
public static BufferedImage musica=null;
public static BufferedImage musica2=null;
public static BufferedImage puntatore=null;
private puntatore p;
public static BufferedReader k= new BufferedReader(new InputStreamReader(System.in));
private boolean att;
static JLabel label;
static JMenu menu1,menu2,menu,menu3;
static JMenuBar menuBar, menuBar2;
static JButton bottone;
static JMenuItem menuI1,menuI2,menuI3,menuI4,menuI5,menuI6;




public GraficaProgetto() throws Exception{
caricaRisorse();
inizio();
}


public int getAltezza() {
return altezza;
}


public void setAltezza(int altezza) {
GraficaProgetto.altezza = altezza;
}


public int getLarghezza() {
return larghezza;
}


public void setLarghezza(int larghezza) {
GraficaProgetto.larghezza = larghezza;
}


private void caricaRisorse()throws Exception{
Caricatore log= new Caricatore();
musica=log.caricaImmagini("/immagini/musica.png");
musica2=log.caricaImmagini("/immagini/musica2.png");
puntatore=log.caricaImmagini("/immagini/star.png");
}
private void disegna(){
BufferStrategy b=this.getBufferStrategy();
if(b==null){
createBufferStrategy(2);
return;
}
Graphics g=b.getDrawGraphics();
g.drawImage(musica2, 0, 0,larghezza,altezza,this);
p.dis(g);
g.dispose();
b.show();
}

private void inizio(){
p=new puntatore(puntatore,0,50,50,this);
p.start();
}
public static void main(String[] args) throws Exception {
GraficaProgetto gP=new GraficaProgetto();
JFrame finestra= new JFrame(nome);
altezza= 200;
larghezza= 400;
//menu
menuBar= new JMenuBar();
menu= new JMenu("Opzioni");
menuBar.add(menu);
menu.addSeparator();
menu1=new JMenu("Risoluzione schermo");
menuI1= new JMenuItem("4:3",KeyEvent.VK_T);
menuI1.setAccelerator (KeyStroke.getKeyStroke (
KeyEvent.VK_1, ActionEvent.ALT_MASK));
menuI2= new JMenuItem("16:9",KeyEvent.VK_D);
menuI2.setAccelerator (KeyStroke.getKeyStroke (
KeyEvent.VK_2, ActionEvent.ALT_MASK));
menu1.add(menuI1);
menu1.add(menuI2);
menu.add(menu1);
menu.addSeparator();
menu2=new JMenu("Login");
menuI3= new JMenuItem("Amministatore");
menuI4= new JMenuItem("Utente");
menu3= new JMenu("Registati");
menu2.add(menuI3);
menu2.add(menuI4);
menuI5=new JMenuItem("Admin");
menuI6= new JMenuItem("User");
menu3.add(menuI5);
menu3.add(menuI6);
menu2.add(menu3);
menu.add(menu2);
// fine menu
Dimension dimension= new Dimension(larghezza, altezza);
finestra.setPreferredSize(dimension);
finestra.setMaximumSize(dimension);
finestra.setResizable(false);
finestra.setIconImage(musica);
finestra.setJMenuBar(menuBar);
finestra.addKeyListener(gP);
gP.addMouseMotionListener(gP);
finestra.pack();
finestra.setVisible(true);
int s = 0;
do{
System.out.println("1-4:3");
System.out.println("2-16:9");
System.out.println("3-Uscita");
System.out.print("Risoluzione finestra: ");
s=Integer.parseInt(k.readLine());
switch(s){
case 1:
altezza=640;
larghezza=720;
break;
case 2:
altezza=720;
larghezza=1280;
break;
}
}while(s>=3);
Dimension dimensione= new Dimension(larghezza,altezza);
finestra.setPreferredSize(dimensione);
finestra.setMaximumSize(dimensione);
finestra.setResizable(false);
finestra.setIconImage(musica);
finestra.setDefaultCloseOperation(JFrame.EXIT_ON_C LOSE);
finestra.add(gP);
finestra.addKeyListener(gP);
gP.addMouseMotionListener(gP);
finestra.pack();
finestra.setVisible(true);

Thread gPs= new Thread(gP);
gPs.start();

}


@Override
public void keyTyped(KeyEvent ke) {}
@Override
public void keyPressed(KeyEvent ke) {
int keycode=ke.getKeyCode();
switch(keycode){
case KeyEvent.VK_DOWN:
p.sopra();
break;
case KeyEvent.VK_UP:
p.sotto();
break;
}
}
@Override
public void keyReleased(KeyEvent ke) {}
@Override
public void run() {
att=true;
while(att){
disegna();
}
}
@Override
public void mouseDragged(MouseEvent me) {}
@Override
public void mouseMoved(MouseEvent me) {
int pt=0;
pt=(me.getPoint().y)-(p.geta()/2);
if(pt>=0 && pt+p.geta()<=altezza){
p.sety(pt);
}
}
}

package graficaprogetto;


import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;


public class puntatore extends Thread {
private int largh,x,y;
private int alt;
private boolean att;
private final int vel=10;
BufferedImage image;
GraficaProgetto main;
public puntatore(){}
public puntatore(BufferedImage im, int y,int l, int a, GraficaProgetto m){
x=150;
this.alt=a;
this.largh=l;
this.image=im;
this.y=y;
this.main=m;
}

public void setx(int v){
this.x=v;
}

public void sety(int v){
this.y=v;
}

public void setl(int v){
this.largh=v;
}
public void seta(int v){
this.alt=v;
}

public int getx(){return x;}
public int gety(){return y;}
public int geta(){return alt;}
public int getl(){return largh;}


public void sopra(){
if((y-alt)<main.getAltezza()){
y+=vel;
}
}
public void sotto(){
if((y-alt)<main.getAltezza()){
y-=vel;
}
}
public void dis(Graphics g){
g.drawImage(image, x, y, largh,alt,null);
}
public Rectangle getB(){
return new Rectangle(x,y,largh,alt);
}
}


package graficaprogetto;


import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;




public class Caricatore {
BufferedImage image;

public BufferedImage caricaImmagini(String po) throws IOException{
try{
image=ImageIO.read(getClass().getResource(po));
}
catch(Exception e){
System.out.println("Immagine alla posizione: "+po+" caricata correttamente");
Logger.getLogger(Caricatore.class.getName()).log(L evel.SEVERE,null,e);

}
return image;
}
}

4 Risposte

  • Re: Movimenti in JFrame

    Non ho capito a che ti serve mettere il implements di MenuContainer. Direi niente ... MenuContainer è una interfaccia che non si usa esplicitamente praticamente mai.

    Se vuoi gestire l'azione sui JMenuItem, devi registrare su di essi un ActionListener.
  • Re: Movimenti in JFrame

    Li ho sbagliato io, ma cme faccio a far avviare le scelte da menu?
  • Re: Movimenti in JFrame

    Boss273 ha scritto:


    Li ho sbagliato io, ma cme faccio a far avviare le scelte da menu?
    Te l'ha detto andbin nel messaggio precedente, devi registrare un ActionListener sui JMenuItem.
    Puoi implementare i listener come classi anonime, indipendenti le une dalle altre, o scegliere design diversi. Ad esempio :
    
    menuI3= new JMenuItem("Amministatore");
    menuI3.addActionListener (new ActionListener () {
    	public void actionPerformed (ActionEvent e) {
    		// scegli che fare quando viene premuto il menu item ...
    	}
    });
    
    // Volendo puoi anche scriverlo come :
    menuI3= new JMenuItem (new AbstractAction ("Amministratore") {
    	public void actionPerformed (ActionEvent e) {
    		// scegli che fare quando viene premuto il menu item ...
    	}
    });
    
    
    Quando menuI3 viene cliccato, o quando la combinazione di tasti che hai eventualmente settato con setAccelerator (KeyStroke keyStroke) viene attivata, l'azione che hai stabilito verrà eseguita.
  • Re: Movimenti in JFrame

    I "design" per implementare i listener, detto in generale, sono molti volendo andare a sfruttare le varie varianti di inner-class.
Devi accedere o registrarti per scrivere nel forum
4 risposte