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;
}
}