Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [JAVA] Strano(?) comporatamento di una finestra con tre JPanel e poco altro.

    Ciao a tutti.
    Ho un problema, probabilmente banale, ma che mi ha già fatto perdere parecchie ore nel tentativo di capire cosa succede.
    Il codice sotto riportato compila senza problemi e apre una finestra con tre pannelli: uno rosso usato come contentPane del JFrame, uno giallo nella parte alta ed uno magenta nella parte bassa del pannello rosso.
    Però quando si preme Enter dopo aver assegnato un numero nella casella di testo del pannello giallo compare un altro pulsante nella zona rossa; manovrando con Tab compare poi anche una casella di testo, prima piccola, poi, assegnando dei valori, più grande e poi, dopo il nuovo Enter, ne compaiono altre.
    Chi mi sa dire a cosa é dovuto lo "strano" comportamento?
    Grazie.
    codice:
    import java.awt.*; import java.awt.event.*; import javax.swing.*;  public class ProvaTrePannelli { 	 	PannelloBase panBase; 	PannelloSuperiore panSup; 	PannelloInferiore panInf; 		     public ProvaTrePannelli() { 	             // Crea e attiva la finestra.         JFrame f = new JFrame("ProvaTrePannelli");         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  		// Crea un pannello rosso da usarsi come pannello dei contenuti.         panBase = new PannelloBase();                  // Definisce panBase come pannello dei contenuti.         f.setContentPane(panBase);                  // Crea un pannello giallo da mettere nella parte alta della finestra.         panSup = new PannelloSuperiore();          		// Ne crea un'altro magenta da mettere nella parte bassa 		panInf = new PannelloInferiore();          // Aggiunge i pannelli al pannello dei contenuti.         panBase.add(panSup, BorderLayout.NORTH);         panBase.add(panInf, BorderLayout.SOUTH);         // e aggiunge una atichetta 		panBase.add(new JLabel("Testo in etichetta centrata.", SwingConstants.CENTER), BorderLayout.CENTER); 		       			         // Visualizza la finestra.         f.pack();         f.setVisible(true);     }      class PannelloBase extends JPanel{ 		/* Dovendo essere usato come pannello dei contenuti è preferibile assegnargli 		   BorderLayout come layout manager (quello predefinito sarebbe FlowLayout) */ 		 	    public PannelloBase()  {	 			setLayout(new BorderLayout());	             	setBackground(Color.RED);         	setPreferredSize(new Dimension(600, 360)); 	    } 	         	public void paintComponent(Graphics g) { 	    	super.paintComponent(g); 			g.drawString("Testo in posizione fissa.", 50, 150);  		} 	    	     	} 	 	class PannelloSuperiore extends JPanel{ 		 		private JTextField txtY; 		private JButton puls; 		private String testo; 		private int y; 		 	    public PannelloSuperiore()  {	 			LayoutManager layout = new FlowLayout(FlowLayout.LEFT); 			setLayout(layout);         	setBackground(Color.YELLOW);         	         	JLabel etichetta = new JLabel("Scegliere la posizione y = ");         	add(etichetta);         	         	txtY = new JTextField();         	txtY.setPreferredSize(new Dimension(60,30));         	txtY.setHorizontalAlignment(JTextField.CENTER);         	AscoltatoreTesto ascTxtY = new AscoltatoreTesto();         	txtY.addActionListener(ascTxtY);         	add(txtY);         	 			puls = new JButton("Premi");         	add(puls); 	    } 	     	    class AscoltatoreTesto implements ActionListener { 			public void actionPerformed (ActionEvent ev) { 				try { 					int ord = Integer.parseInt(txtY.getText()); 					setY(ord); 					puls.requestFocus(); 				} catch (NumberFormatException e) { 					setY(100); 					txtY.setText("100"); 					txtY.requestFocus();		 				} 			}    			 		} // fine classe AscoltatoreTesto 		 		public void setY(int y) { this.y = y; } 			 		public int getY() { return y; } 			 	     	} // fine classe PannelloSuperiore       class PannelloInferiore extends JPanel{ 		 	    public PannelloInferiore()  {	 			LayoutManager layout = new FlowLayout(FlowLayout.RIGHT); 			setLayout(layout);	                 setBackground(Color.MAGENTA);         	         	JButton puls = new JButton("Neutro");         	add(puls); 	    } 	     	}  // fine classe PannelloInferiore 	     public static void main(String[] args) {         SwingUtilities.invokeLater(new Runnable() {             public void run() { new ProvaTrePannelli(); }         });     } } // Fine classe ProvaTrePannelli

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Puoi postare il sorgente in maniera comprensibile?

    [CODE]
    ...codice...
    [/CODE]

    Il pulsante sopra l'editor pare buggato...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Credevo di aver messo il codice in modo corretto. Pardon!
    [CODE]
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    public class ProvaTrePannelli {

    PannelloBase panBase;
    PannelloSuperiore panSup;
    PannelloInferiore panInf;

    public ProvaTrePannelli() {

    // Crea e attiva la finestra.
    JFrame f = new JFrame("ProvaTrePannelli");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // Crea un pannello rosso da usarsi come pannello dei contenuti.
    panBase = new PannelloBase();

    // Definisce panBase come pannello dei contenuti.
    f.setContentPane(panBase);

    // Crea un pannello giallo da mettere nella parte alta della finestra.
    panSup = new PannelloSuperiore();

    // Ne crea un'altro magenta da mettere nella parte bassa
    panInf = new PannelloInferiore();

    // Aggiunge i pannelli al pannello dei contenuti.
    panBase.add(panSup, BorderLayout.NORTH);
    panBase.add(panInf, BorderLayout.SOUTH);
    // e aggiunge una atichetta
    panBase.add(new JLabel("Testo in etichetta centrata.", SwingConstants.CENTER), BorderLayout.CENTER);

    // Visualizza la finestra.
    f.pack();
    f.setVisible(true);
    }

    class PannelloBase extends JPanel{
    /* Dovendo essere usato come pannello dei contenuti è preferibile assegnargli
    BorderLayout come layout manager (quello predefinito sarebbe FlowLayout) */

    public PannelloBase() {
    setLayout(new BorderLayout());
    setBackground(Color.RED);
    setPreferredSize(new Dimension(600, 360));
    }

    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawString("Testo in posizione fissa.", 50, 150);
    }

    }

    class PannelloSuperiore extends JPanel{

    private JTextField txtY;
    private JButton puls;
    private String testo;
    private int y;

    public PannelloSuperiore() {
    LayoutManager layout = new FlowLayout(FlowLayout.LEFT);
    setLayout(layout);
    setBackground(Color.YELLOW);

    JLabel etichetta = new JLabel("Scegliere la posizione y = ");
    add(etichetta);

    txtY = new JTextField();
    txtY.setPreferredSize(new Dimension(60,30));
    txtY.setHorizontalAlignment(JTextField.CENTER);
    AscoltatoreTesto ascTxtY = new AscoltatoreTesto();
    txtY.addActionListener(ascTxtY);
    add(txtY);

    puls = new JButton("Premi");
    add(puls);
    }

    class AscoltatoreTesto implements ActionListener {
    public void actionPerformed (ActionEvent ev) {
    try {
    int ord = Integer.parseInt(txtY.getText());
    setY(ord);
    puls.requestFocus();
    } catch (NumberFormatException e) {
    setY(100);
    txtY.setText("100");
    txtY.requestFocus();
    }
    }
    } // fine classe AscoltatoreTesto

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

    public int getY() { return y; }


    } // fine classe PannelloSuperiore

    class PannelloInferiore extends JPanel{

    public PannelloInferiore() {
    LayoutManager layout = new FlowLayout(FlowLayout.RIGHT);
    setLayout(layout);
    setBackground(Color.MAGENTA);

    JButton puls = new JButton("Neutro");
    add(puls);
    }

    } // fine classe PannelloInferiore

    public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
    public void run() { new ProvaTrePannelli(); }
    });
    }
    } // Fine classe ProvaTrePannelli

    /[CODE]

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 © 2025 vBulletin Solutions, Inc. All rights reserved.