Torna indietro   Hardware Upgrade Forum > Software > Programmazione

AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-02-2009, 09:42   #1
s0nnyd3marco
Senior Member
 
L'Avatar di s0nnyd3marco
 
Iscritto dal: Aug 2006
Città: Trieste
Messaggi: 5558
[java swing] repaint del jframe

Salve a tutti, vi illustro subito il mio problema. Ho una classe che estende un jframe, in cui metto un JScrollPane e un JPanel (che ho chiamato buttonPane). Nel JScrollPane inserisco un JPanel per lo sfondo a cui dovranno essere aggiunti, quando premo un pulsante contenuto nel buttonPane, degli altri JPanel conteneti delle informazioni ricavate tramite metodi remoti. Il problema è questo: dopo aver premuto il pulsante che crea il JPanel da inserire nel JPanel inserito nel JScrollPane, questo non compare, e compare solamente quando clicco con il mouse sul JPanel che contiene i bottoni. Ho provato ad inserire un repaint() nel ActionPerformed del bottone ma nulla. C'è un modo per passare un evento alla classe base per poi fare un refresh()?
Grazie a tutti
__________________
You should never let your fears become the boundaries of your dreams.
s0nnyd3marco è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2009, 10:10   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Prova a postare un po' di codice, così possimao capire che problema c'è e dove.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2009, 10:21   #3
s0nnyd3marco
Senior Member
 
L'Avatar di s0nnyd3marco
 
Iscritto dal: Aug 2006
Città: Trieste
Messaggi: 5558
Codice:
public class BaseFrame extends JFrame{

	

	BaseFrame(){

		super();

		

		setTitle("MASTER");

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		setPreferredSize(new Dimension(800,450));

		setResizable(false);

		setVisible(true);

	}
Codice:
public class Master extends BaseFrame{
		
	public static void main(String[] args){
		Set<String> listaIP = new TreeSet<String>();
		listaIP.addAll(ParameterFileImporter.LeggiFile(args));
		
		if(!listaIP.isEmpty()){
			Master master = new Master();	
			JTabbedPane tab = new JTabbedPane();
			tab.setPreferredSize(new Dimension(550,450));
			
			for(String indirizzo : listaIP){
				tab.add("SLAVE: " + indirizzo,new TabElement(indirizzo));
			}
			
			master.add(tab);
			master.pack();
		}
	}//fine main
Codice:



public class TabElement extends JPanel implements ActionListener{

	private String indirizzo;

	private JScrollPane scrollPane;

	private JPanel buttonPane;

	private JPanel leftButtonPane;

	private JPanel rightButtonPane;

	private JPanel stanzePane;

	private JButton creaStanzaButton;

	private JButton inizializzaButton;

	private JLabel statoLabel;

	private JComboBox istanzaBox;

	private JTextField nomeStanzaField;

	private NominabileFactory stub;

	private Set<String> listaNominabili = new TreeSet<String>();

	private Boolean isConnected = false;

	private String nomeStanza = "DefaultName";

	

	TabElement(String indirizzo){

		super(new BorderLayout());

		this.indirizzo = indirizzo;

		this.setBorder(BorderFactory.createTitledBorder("Elenco Stanze"));

		

		stanzePane = new JPanel();

		stanzePane.setBackground(Color.LIGHT_GRAY);

		scrollPane = new JScrollPane(stanzePane);

		scrollPane.setPreferredSize(new Dimension(600,310));

		this.add(scrollPane, BorderLayout.NORTH);

		

		buttonPane = new JPanel(new GridLayout(1,2));

		this.add(buttonPane, BorderLayout.SOUTH);

		

		leftButtonPane = new JPanel();

		leftButtonPane.setBorder(BorderFactory.createTitledBorder("Gestione connessione"));

		inizializzaButton = new JButton("Connetti");

		inizializzaButton.setSize(new Dimension(100,40));

		inizializzaButton.setActionCommand("inizializza");

		inizializzaButton.addActionListener(this);

		leftButtonPane.add(inizializzaButton);		

		statoLabel = new JLabel("Disconnesso");

		leftButtonPane.add(statoLabel);

		buttonPane.add(leftButtonPane);

		

		rightButtonPane = new JPanel();

		rightButtonPane.setBorder(BorderFactory.createTitledBorder("Gestione stanze"));

		istanzaBox = new JComboBox();

		istanzaBox.setEnabled(false);

		istanzaBox.setPreferredSize(new Dimension(130,27));

		rightButtonPane.add(istanzaBox);

		nomeStanzaField = new JTextField("nome stanza");

		nomeStanzaField.setEnabled(false);

		nomeStanzaField.setPreferredSize(new Dimension(100,27));

		rightButtonPane.add(nomeStanzaField);

		creaStanzaButton = new JButton("Nuova stanza");

		creaStanzaButton.setEnabled(false);

		creaStanzaButton.setSize(new Dimension(100,40));

		creaStanzaButton.setActionCommand("crea_stanza");

		creaStanzaButton.addActionListener(this);

		rightButtonPane.add(creaStanzaButton);		

		buttonPane.add(rightButtonPane);

		

	}//fine main

	

	

	public void actionPerformed(ActionEvent e){

		if(e.getSource() instanceof JButton){

			if(e.getActionCommand() == "inizializza"){

				if(isConnected){

					statoLabel.setText("Disconnesso");

					creaStanzaButton.setEnabled(false);

					istanzaBox.setEnabled(false);

					nomeStanzaField.setEnabled(false);

					inizializzaButton.setText("Connetti");

					isConnected = false;

				}else{

					stub = RegistryManager.connect(indirizzo);

					if(stub != null){

						statoLabel.setText("Connesso");

						creaStanzaButton.setEnabled(true);

						istanzaBox.setEnabled(true);

						nomeStanzaField.setEnabled(true);

						inizializzaButton.setText("Disconnetti");

						isConnected = true;

						try{

							listaNominabili.addAll(stub.elencaClassiDiNominabili());

							for (String istanza : listaNominabili){

								istanzaBox.addItem(istanza);

							}

						}catch(RemoteException re){

							re.printStackTrace();

						}

					}else{

						statoLabel.setText("ERRORE");

					}		

				}

			}// fine inizializza

			if(e.getActionCommand() == "crea_stanza"){

				try {

					Stanza stanza = stub.createStanza((String)istanzaBox.getSelectedItem());

					if(nomeStanzaField.getText().length() != 0){

						nomeStanza = nomeStanzaField.getText();

					}

					stanza.setName(nomeStanza);

					stanzePane.add(new StanzaManager(stanza, stub, listaNominabili, (String)istanzaBox.getSelectedItem()));

				} catch (RemoteException re) {

					re.printStackTrace();

				}

			}// fine crea_stanza

		}//fine JButton handler

	}//fine ActionPerformed

	

}// fine classe
Codice:

public class StanzaManager extends JPanel implements ActionListener{

	private Boolean luceAccesa = true;

	private JPanel gestioneStanzaPane; 

	private JPanel gestionePersonaggioPane;

	private JPanel creaPersonaggioPane;

	private JComboBox tipiPersonaggioBox;

	private JComboBox personaggiBox;

	private JCheckBox isAngryBox;

	private JButton isLightedButton;

	private JButton creaPersonaggioButton;

	private JTextField nomeField;

	private JLabel illuminazioneLabel;

	private String nomeStanza = "Default";

	private ImageIcon lightbulb_on;

	private ImageIcon lightbulb_off;

	

	public StanzaManager(Stanza stanza, NominabileFactory stub, Set<String> listaNominabili, String tipoStanza){

		super(new BorderLayout());

		setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));

		setPreferredSize(new Dimension(350,280));





		

		

	}



	

	public void actionPerformed(ActionEvent e) {

		
	}

	

}
Il problema è questo: quando da tabElement (che gestisce i vari slave) premo il pulsante per far comparire a schermo il stanzamanger, devo premere con il mouse vicino al bottone o attivare il Combobox perciò che sul JScrollPane compaia lo stanza manager. Penso che dovrei forzare il repaint() e il validate() nella classe Master ma non so come passare l'evento.
__________________
You should never let your fears become the boundaries of your dreams.
s0nnyd3marco è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2009, 10:34   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Rispondo un pezzetto alla volta perchè sono di fretta (ufficio).

Leggendo il tuo codice ho visto questo:
Codice:
...
for(String indirizzo : listaIP) {
    tab.add("SLAVE: " + indirizzo,new TabElement(indirizzo));
}
con tab che è un'istanza di JTabbedPane.
Ora leggendo la documentazione ufficiale per la classe JTabbedPane, si trova spiegato questo:
Quote:
Tabs/components are added to a TabbedPane object by using the addTab and insertTab methods. A tab is represented by an index corresponding to the position it was added in, where the first tab has an index equal to 0 and the last tab has an index equal to the tab count minus 1.
Intanto comincia col correggere questo, poi io non ho letto tutto il codice e potrebbero esserci altri errori.
Se ti serve sapere altro di "ufficiale" sui TabbedPane vedi qui.

Appena posso finisco di guardare con calma il codice.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2009, 10:49   #5
s0nnyd3marco
Senior Member
 
L'Avatar di s0nnyd3marco
 
Iscritto dal: Aug 2006
Città: Trieste
Messaggi: 5558
Grazie per la risposta
Io utilizzavo il metodo:
Codice:
	add(String title, Component component)
          Adds a component with the specified tab title.
invece di
Codice:
 void 	addTab(String title, Component component)
          Adds a component represented by a title and no icon.
Il tutto funzionava anche prima... Il problema rimane come forzare il repaint del JScrollPane dopo la pressione del pulsante "crea stanza"
__________________
You should never let your fears become the boundaries of your dreams.
s0nnyd3marco è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2009, 10:57   #6
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Solo una cosa, nell'evento "crea_stanze":
Codice:
...
if(e.getActionCommand() == "crea_stanza")
{
    try
    {
        Stanza stanza = stub.createStanza((String)istanzaBox.getSelectedItem());

    if (nomeStanzaField.getText().length() != 0)
    {
        nomeStanza = nomeStanzaField.getText();
    }
    stanza.setName(nomeStanza);

    stanzePane.add(new StanzaManager(stanza, stub, listaNominabili, (String)istanzaBox.getSelectedItem()));

} 
catch 
(RemoteException re)
{
    re.printStackTrace();
}
...
stanzePane è un JPanel, e ogni volta che viene lanciato l'evento "crea_stanza" gli viene aggiunto un nuovo StanzaManager: però bisogna anche che quello vecchio venga rimosso, succede da qualche parte?


Comunque quando aggiungi un nuovo componente all'interno di un Container che è già visibile (come quando invochi il metodo add sul tuo JPanel "stanzePane.add") devi subito dopo invocare il metodo validate sul quel container perchè il nuovo componente venga visualizzato.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2009, 11:09   #7
s0nnyd3marco
Senior Member
 
L'Avatar di s0nnyd3marco
 
Iscritto dal: Aug 2006
Città: Trieste
Messaggi: 5558
No, io non voglio che venga rimosso quello vecchio, ma che venga visualizzato contemporaneamente entramebi o quanti io decido di aggiungerne (e fino a qua ci sono). I JPanel hanno delle dimensioni fisse e nel JScrollPane c'è spazio per visualizzarne due.
Probabilmente mi mancava di invocare il metodo validate dopo aver aggiunto al container già visibile un altro elemento. Proverò a richiamare tale metodo nell'evento creastanze.
Grazie mille per l'aiuto. Questa sera appena torno a casa dall'ufficio provo e ti dico come va...
__________________
You should never let your fears become the boundaries of your dreams.
s0nnyd3marco è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2009, 11:14   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Sì, te lo chiesto solo perchè non avevo chiaro se quello che volevi era appunto aggiungere JPanel a cascata o averne solo uno da sostituire di volta in volta.

Per via del metodo add() invece di addTab(): hai ragione tu, ho preso una svista.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2009, 11:25   #9
s0nnyd3marco
Senior Member
 
L'Avatar di s0nnyd3marco
 
Iscritto dal: Aug 2006
Città: Trieste
Messaggi: 5558
Ti ringrazio ancora per l'aiuto... sta sera/notte provo, e se va male ci sentiamo domani

Ciau
__________________
You should never let your fears become the boundaries of your dreams.
s0nnyd3marco è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Cloudflare annuncia un ricorso alla sanz...
Questo robot usa l'anca per chiudere i c...
Il piano Google AI Plus arriva in Italia...
Sembra un foglio di carta, ma è u...
Amazon Seconda Mano (ex Warehouse), nuov...
MSI Prestige 13 AI+ ...
NVIDIA supera Apple: sarà lei il ...
MediaTek potrebbe essere una delle azien...
Rimodulazione in arrivo per Vodafone: ri...
La crisi delle memorie colpirà an...
Il tuo smartphone può misurare le...
Tutti i Kindle Scribe in sconto, ma prop...
Booking.com e OpenAI annunciano SME AI A...
Xiaomi SU7 Ultra: da domani tutti i gioc...
Sharp Inspire Expo 2026: da produttore d...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:38.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v