Volevo mettere sul forum la mia soluzione di un precedente esercizio secondo il modello MVC.
L'esercizio consisteva nel creare un'applicazione che mostrava una finestra contenente tre controlli scorrevoli, un pannello, un pulsante reset e le label opportune, e tre selettori Red, Green, Blue.
Ad ogni momento, a seconda della posizione dei selettori, il pannello mostrava il colore formato dalla combinazione RGB relativa.
Volevo chiedere al forum un consiglio sulle cose che possono essere migliorate nella stesura del programma.
http://latemar.science.unitn.it:8000/segue_userfiles/2006prog2/slidercolore.zip
Grazie
Buongiorno al forum, volevo chiedere gentilmente delucidazioni relativamente al metodo getSize. In particolare, se ho la seguente classe:
public class Rettangolo extends JPanel { Color colore, colore1; Dimension coordinate, coordinate1, area, area1; public void paintComponent (Graphics g) { super.paintComponent(g); g.setColor(colore); g.fillRect(coordinate.width,coordinate.height,area.width,area.height); g.setColor(colore1); g.fillRect(coordinate1.width,coordinate1.height,area1.width,area1.height); } public Rettangolo() { //set the default color of the rectangles Color colore = Color.YELLOW; this.colore = colore; Color colore1 = Color.BLUE; this.colore1 = colore1; //set the default dimension of the rectangles Dimension area = new Dimension(75, 75); this.area = area; Dimension area1 = new Dimension(75, 75); this.area1 = area1; //set the default coordinates of the rectangles Dimension coordinate = new Dimension(0,0); this.coordinate = coordinate; Dimension coordinate1 = new Dimension(250,250); this.coordinate1 = coordinate1; }}
nell'istruzione evidenziata in rosso, come posso impostare coordinate1 utilizzando il metodo getSize() ?
Io ho provato ad eseguirlo sul pannello, ma non ottengo il valore desiderato. E' corretto utilizzare getSize() su un oggetto di tipo JPanel?
Mi sono accorto che setVisible() sul JFrame non prima non è settato a true, mi impedisce di ottenere la dimensione del JPanel.
Grazie per l'eventuale gradita risposta.
Giampaolo
Ciao, se c'è qualcuno che ha fatto il compito d'esame dell'anno scorso ( quello del bersaglio ) potrebbe mettere sul forum il codice cosi per vedere come lo ha fatto?
Grazio a tutti
JFrame frame = new JFrame("FlowLayoutDemo") { public Dimension getMinimumSize() { Dimension prefSize = getPreferredSize(); return new Dimension(100, prefSize.height); } };cioè va impostata una dimensione minima? ma stando a quanto detto in classe non si arrangiava da solo il Layout Manager a capire quando andare a capo?Il mio problema non è che capita perchè ho posizionato questo pannello a nord di un borderLayout,e quindi viene tutto minimizzato?oltretutto ho notato che con questo metodo non si fa altro che avere una minima dimensione della finestra,impossibilitando l'utente a rimpicciolirla oltre.In questo caso non c'è un metodo piu veloce,tipo frame.setMinimumSize() ? bisogna sempre fare questo procedimento?
Buongiorno a tutti e scusate se pongo una domanda banale.
Sul tema d'esame di giugno 2005 si chiede di disegnare un punto quando viene premuto un pulsante. Si deve reimplementare la paintComponents?
E come si chiama in modo che venga eseguita solo quando si preme il pulsante? Non capisco come si deve gestire e se posso in qualche modo
chiamarla dal metodo che gestisce il click del mouse sul bottone.
public int getWidth()
Salve a tutti, ho fatto una semplice applicazione contenente due bottoni. La pressione del primo crea altri bottoni ( che si dispongono ordinanatamente secondo il Flowlayout ) mentre la pressione del secondo li cancella ( partendo dall'ultimo creato ).
I problemi sono due:
- Il primo bottone mi crea si il bottone ma si vede soltanto se ingrandisco la finestra, il prof mi ha detto di fare la repaint ma non funziona lo stesso.
-Il secondo bottone non cancella niente....Ho usato una remove..non sò se è giusto...se qualcuno sa come fare vi ringrazio. Ciao
ECCO IL CODICE ( Non ho messo la classe che crea il JFrame perchè non serve nelle spiegazione dell'esercizio )
package ex_mio_1;import javax.swing.*;import java.awt.*;import java.awt.event.*;
public class Contenuto extends JFrame{ JPanel contentPane; JPanel nord = new JPanel(); JPanel centro = new JPanel(); JButton bottone_1 = new JButton("Crea bottone"); JButton bottone_2 = new JButton("Cancella bottone");
private void settingJPanel() throws Exception { contentPane=(JPanel)this.getContentPane(); this.setSize(400,300);
contentPane.setLayout(new BorderLayout()); contentPane.add(nord,BorderLayout.NORTH); contentPane.add(centro,BorderLayout.CENTER); nord.setLayout(new FlowLayout()); nord.setBackground(Color.RED); centro.setLayout(new FlowLayout()); centro.setBackground(Color.RED); nord.add(bottone_1); nord.add(bottone_2); Eventi ascoltatore = new Eventi(bottone_1,bottone_2,centro); bottone_1.addActionListener(ascoltatore); bottone_2.addActionListener(ascoltatore); }
public Contenuto() //costruttore della classe che però richiama JbInit... { try { settingJPanel(); //inizializza la finestra } catch(Exception e) { e.printStackTrace(); } } public static void main (String args[]) { new Contenuto(); }}
EVENTI:package ex_mio_1;import javax.swing.*;import java.awt.*;import java.awt.event.*;
class Eventi implements ActionListener{ JButton b_1 = new JButton(); JButton b_2 = new JButton(); JPanel p = new JPanel();
public Eventi (JButton bot_1 , JButton bot_2 , JPanel pan) { this.b_1=bot_1; this.b_2=bot_2; this.p=pan; }
public void actionPerformed (ActionEvent e) { JButton oggetto = (JButton)(e.getSource()); JButton newBotton = new JButton("Nuovo");
if (oggetto==b_1) { p.add(newBotton); } if ( oggetto==b_2) { p.remove(newBotton); } }}
Salve a tutti, ho un problema...Io ho fatto un'applicazione, in particolare un orologio....Ora vi spiego il mio problema:
Ho disegnato le lancette con la " fillArc" con lo stesso meccanismo dell'esercizio fatto in classe dal prof che ad ogni click
del mouse si spostava in senso orario il "quarto all'interno del cerchio" ( Il primo dell'animazione) , ovviamente ho aggiunto
un MouseListener che come azione decrementa il grado dell'Arco (la nostra lancetta)...Fino a qui tutto apposto.
-Vorrei modificare l' esercizio: vorrei che lancetta non si spostasse con il click del mouse, cioè usando gli eventi ma
vorrei usare la " Thread.sleep(millisec) " ( messa all'interno del blocco try catch e ad un ciclo while(true) come nell'esempio
del professore riguardante l'esercizio in cui il contentPane cambiava colore da solo dopo 800 Millisec)
Io ho già provato a farlo ma non mi viene giusto, anzi non si vede più niente nel contentPane ( come se fosse = null )
Qualcuno mi potrebbe aiutare?
Grazie, se volete vi posto il codice sorgente.