Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305

    NON cambia testo al bottone (java)

    questo è il listato:
    cliccanco su Button1, Label1 dovrebbe cambiare il testo ....... e invece no (poffabacco)



    import java.awt.event.*;
    import javax.swing.*;//importiamo i package di cui abbiamo bisogno
    import java.awt.*;
    import java.awt.Container.*;



    class Interfaccia extends JFrame
    {
    //ButtonHandler bh=new ButtonHandler();

    public JLabel Label1;
    public JTextField Text1;
    public JButton Button1;

    public Container C;

    // Un container e' un insieme di oggetti collegati.
    // I componenti non devono essere aggiunti direttamente al JFrame ma
    // ad un container.
    public Interfaccia()
    {
    C=getContentPane();
    C.setLayout(null);

    // con questa istruzione si imposta il Layout Manager che aiuta un
    // container a posizionare i componenti.Specificando null decidiamo di
    //posizionare i componenti manualmente.

    Label1=new JLabel("Questa e' una Label");
    Label1.setBounds(10,10,220,20);
    //questa istruzione posizione il componente nella posizione
    //di cordinate xy (10,10) con larghezza 120 e altezza 20
    C.add(Label1);//il metodo add di un oggetto container permette di aggiungere un componente al container

    Text1=new JTextField("Area Testo");
    Text1.setBounds(10,40,220,20);
    C.add(Text1);



    Button1=new JButton("Questo e' un pulsante");

    Button1.setBounds(10,70,220,20);
    C.add(Button1);
    ButtonHandler bh=new ButtonHandler();
    Button1.addActionListener(bh);

    setSize(600,320);//impostaiamo la grandezza della finestra

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // associamo l'evento di chiusura al solito bottone di chiusura

    setVisible(true); // rendiamo il frame visibile dato che per default non lo è!

    show(); // rendiamo il tutto visibile


    // if(Opzione1.getState()) MessLabel1.setText("Nonno: ON");
    // else MessLabel1.setText("Nonno: OFF");

    class ButtonHandler implements ActionListener
    {public void actionPerformed(ActionEvent evento)
    // { String testo=evento.getActionCommand();
    { String testo=Button1.getText();
    // { String testo=evento.getText();
    if (testo.equals("Questo e' un pulsante")){ //{"OKAY"}
    Label1.setText("Hai premuto il pulsante");
    //Label1.setText("Hai premuto "+(conta++)+" volt"+(conta<2?"a":"e"));
    }
    if (testo.equals("A2")){ //{"OK"}
    Button1.setText("NON premuto il pulsante");
    }
    Button1.setText("NON premuto il pulsante");
    }

    }





    }
    }



    //Adesso realizziamo la classe che contiene il metodo main e che avra' lo stesso nome del file PrimoEsempio.java il quale contiene le classi realizzate.

    public class PrimoEsempio
    {

    public static void main(String args[])
    {
    Interfaccia App=new Interfaccia();

    }
    }






    ciao amici

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Beh... a me ha dato degli errori in compilazione... in effetti manca una parentesi graffa che chiuda il costruttore.

    Questo è il codice corretto:
    codice:
    import java.awt.event.*; 
    import javax.swing.*;//importiamo i package di cui abbiamo bisogno 
    import java.awt.*; 
    import java.awt.Container.*; 
    
    class Interfaccia extends JFrame { 
    
       public JLabel Label1; 
       public JTextField Text1; 
       public JButton Button1; 
    
       public Container C; 
    
       public Interfaccia()  { 
          C=getContentPane(); 
          C.setLayout(null); 
    
    
          Label1=new JLabel("Questa e' una Label"); 
          Label1.setBounds(10,10,220,20); 
          C.add(Label1);
    
          Text1=new JTextField("Area Testo"); 
          Text1.setBounds(10,40,220,20); 
          C.add(Text1); 
    
    
    
          Button1=new JButton("Questo e' un pulsante"); 
    
          Button1.setBounds(10,70,220,20); 
          C.add(Button1); 
          ButtonHandler bh=new ButtonHandler(); 
          Button1.addActionListener(bh); 
    
          setSize(600,320);
    
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
          setVisible(true);
    
          show();
       }
    
       class ButtonHandler implements ActionListener {
          public void actionPerformed(ActionEvent evento) {
             String testo=Button1.getText(); 
             if (testo.equals("Questo e' un pulsante")) {
                Label1.setText("Hai premuto il pulsante"); 
             } 
    
             if (testo.equals("A2")) {
                Button1.setText("NON premuto il pulsante"); 
             } 
             Button1.setText("NON premuto il pulsante"); 
          }
       } 
    
    }
    Ricordati di usare i tag [*CODE] e [*/CODE] per strutturare il codice, così si legge meglio (ps: senza gli asterischi, premento sul pulsante # quando scrivi i messaggi)

    Poi, un altro consiglio, usa le lettere maiuscole all'inizio dei nomi solo per i nomi delle classi. Per le variabili e i metodi usa le minuscole.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    Grazie

    Ora sto cercando di intercettare la tastiera e questo è l'aggiunta al tuo listato corretto, ma non riesco a catturare l'evento dei tasti!
    tipo premendo q dovrei uscire e premendo il tasto ESC la label1 dovrebbe cambiare text??


    import java.awt.event.*;
    import javax.swing.*;//importiamo i package di cui abbiamo bisogno
    import java.awt.*;
    import java.awt.Container.*;

    class Interfaccia extends JFrame {

    public JLabel Label1;
    public JTextField Text1;
    public JButton Button1;

    public Container C;

    public Interfaccia() {
    C=getContentPane();
    C.setLayout(null);


    Label1=new JLabel("Questa e' una Label");
    Label1.setBounds(10,10,220,20);
    C.add(Label1);

    Text1=new JTextField("Area Testo");
    Text1.setBounds(10,40,220,20);
    C.add(Text1);



    Button1=new JButton("Questo e' un pulsante");

    Button1.setBounds(10,70,220,20);
    C.add(Button1);
    ButtonHandler bh=new ButtonHandler();
    Button1.addActionListener(bh);

    setSize(600,320);
    setTitle(" My prg");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    KeyListener ascoltatore =new ascoltaTastiera();
    addKeyListener(ascoltatore);

    setVisible(true);

    show();
    }

    class ButtonHandler implements ActionListener
    {
    public void actionPerformed(ActionEvent evento)
    {
    String testo=Button1.getText();
    if (testo.equals("Questo e' un pulsante"))
    {
    Label1.setText("Hai premuto il pulsante");
    }

    if (testo.equals("A2"))
    {
    Button1.setText("NON premuto il pulsante");
    }

    }
    }


    /*
    // class JFileChooser implements ActionListener
    //{
    public boolean keyTyped(KeyEvent e, int tasto) {

    if (e.getKeyCode() == KeyEvent.VK_CANCEL) System.exit(0);
    if (tasto == 113) System.exit(0);
    if (tasto == KeyEvent.VK_F1) System.exit(0);
    return false;
    //}
    }
    */



    /////////////


    class ascoltaTastiera extends KeyAdapter //implements KeyListener
    {
    public void keyPressed(KeyEvent k)
    {
    int codiceTasto = k.getKeyCode();
    if (codiceTasto == 27) Label1.setText("Hai premuto ESC");
    if (codiceTasto == 113) System.exit(0);
    }

    public void keyReleased(KeyEvent k)
    {
    int codiceTasto = k.getKeyCode();

    }

    public void keyTyped(KeyEvent k)
    {
    int codiceTasto = k.getKeyCode();

    }

    }


    /////////////

    }


    /*
    String miaStringa = Keyboard.readString();
    if (miaStringa == null) {
    // L'utente ha digitato un CTRL + Z
    } else {
    // L'utente ha digitato qualcos'altro
    }


    JTEditorPane editor = new JEditorPane();
    editor.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent ke) {
    if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
    ke.consume();
    }
    }

    */




    public class PrimoEsempio
    {

    public static void main(String args[])
    {
    Interfaccia App=new Interfaccia();

    }
    }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Ci sono alcune considerazioni:

    1) Anche questa volta mancava una parentesi...

    2) Il listener per la tastiera non lo puoi associare al JFrame in quanto c'è una JTextField che ha sempre lo stato attivo. Quindi devi associare alla JTextField il listener

    3) Per intercettare il tasto Q non puoi servirti sel semplice codice ASCII in quanto Java tratta i caratteri come sequenze a 2 byte e non a 1 byte (o meglio, usa 4 byte, dato che riceve un int). Per questo ti devi servire dei campi statici della classe KeyEvent per intercettare il tasto premuto.

    4) Non serve implementare tutti i metodi di KeyListener se estendi KeyAdapter (li ha già implementati vuoti KeyAdapter, così puoi sottoporre ad override solo quelli che ti interessano, in questo caso keyPressed().


    Questo è il codice corretto:
    (Mi raccomando: ricordati di usare i tag [*CODE] e [*/CODE] per il codice, altrimenti si fa una fatica immane a capire il codice)
    codice:
    import java.awt.event.*; 
    import javax.swing.*;//importiamo i package di cui abbiamo bisogno 
    import java.awt.*; 
    import java.awt.Container.*; 
    
    class Interfaccia extends JFrame { 
    
       public JLabel Label1; 
       public JTextField Text1; 
       public JButton Button1; 
    
       public Container C; 
    
       public Interfaccia() { 
          C=getContentPane(); 
          C.setLayout(null); 
    
    
          Label1=new JLabel("Questa e' una Label"); 
          Label1.setBounds(10,10,220,20); 
          C.add(Label1); 
    
          Text1=new JTextField("Area Testo"); 
          Text1.setBounds(10,40,220,20); 
          C.add(Text1); 
    
    
    
          Button1=new JButton("Questo e' un pulsante"); 
    
          Button1.setBounds(10,70,220,20); 
          C.add(Button1); 
          ButtonHandler bh=new ButtonHandler(); 
          Button1.addActionListener(bh); 
    
          setSize(600,320); 
          setTitle(" My prg"); 
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    
          KeyListener ascoltatore =new ascoltaTastiera(); 
          Text1.addKeyListener(ascoltatore); 
    
          setVisible(true); 
    
          show(); 
       } 
    
       class ButtonHandler implements ActionListener {
          public void actionPerformed(ActionEvent evento) { 
             String testo=Button1.getText(); 
             if (testo.equals("Questo e' un pulsante")) { 
                Label1.setText("Hai premuto il pulsante"); 
             } 
    
             if (testo.equals("A2")) { 
                Button1.setText("NON premuto il pulsante"); 
             } 
    
          } 
       } 
    
    
       class ascoltaTastiera extends KeyAdapter { 
          public void keyPressed(KeyEvent k) { 
             int codiceTasto = k.getKeyCode(); 
             if (codiceTasto == 27) Label1.setText("Hai premuto ESC"); 
             if (codiceTasto == KeyEvent.VK_Q) System.exit(0); 
          } 
       } 
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    LeleFT

    bhè ti ringrazio tanto (sei grande)

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    Ma se il focus non è sulla text ma sulla finestra per intercettare la pressione del tasto devo fare:

    C.addKeyListener(ascoltatore);
    JFrame.addKeyListener(ascoltatore);
    Button1.addKeyListener(ascoltatore);

    ...... ma non mi funziona??

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Perchè il focus rimane nella JTextField e non passa al JFrame... è un problema che ho riscontrato anch'io molte volte e non ho trovato soluzione, per ora, se non quella di disabilitare la JTextField.



    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.