|
| Opdatering af JPanel Fra : Mette Dencker |
Dato : 30-04-03 09:27 |
|
Er der nogen der ved, hvordan man opdaterer en værdi på et Jpanel, når
værdien bliver beregnet et andet sted i programmet - dvs. i en anden klasse?
Jeg har et helt projekt i JCreator, hvor mit Jpanel er oprettet i én klasse,
og en anden klasse foretager nogle beregninger, hvor resultatet med
mellemrum skal opdateres på panelet...
Mvh. Mette
| |
Søren Berg Glasius (30-04-2003)
| Kommentar Fra : Søren Berg Glasius |
Dato : 30-04-03 09:49 |
|
> Er der nogen der ved, hvordan man opdaterer en værdi på et Jpanel, når
> værdien bliver beregnet et andet sted i programmet - dvs. i en anden
klasse?
> Jeg har et helt projekt i JCreator, hvor mit Jpanel er oprettet i én
klasse,
> og en anden klasse foretager nogle beregninger, hvor resultatet med
> mellemrum skal opdateres på panelet...
Hej Mette
Benyt et observer pattern.
Lad klassen som laver beregninger benytte PropertyChangeSupport f.eks:
public class Calculator {
/** Holds value of property value. */
private int value;
/** Utility field used by bound properties. */
private java.beans.PropertyChangeSupport propertyChangeSupport = new
java.beans.PropertyChangeSupport(this);
/** Adds a PropertyChangeListener to the listener list.
* @param l The listener to add.
*
*/
public void addPropertyChangeListener(java.beans.PropertyChangeListener
l) {
propertyChangeSupport.addPropertyChangeListener(l);
}
/** Removes a PropertyChangeListener from the listener list.
* @param l The listener to remove.
*
*/
public void
removePropertyChangeListener(java.beans.PropertyChangeListener l) {
propertyChangeSupport.removePropertyChangeListener(l);
}
/** Getter for property value.
* @return Value of property value.
*
*/
public int getValue() {
return this.value;
}
/** Setter for property value.
* @param value New value of property value.
*
*/
public void setValue(int value) {
int oldValue = this.value;
this.value = value;
propertyChangeSupport.firePropertyChange("value", new
Integer(oldValue), new Integer(value));
}
}
og lad dit GUI registrere sig som property change listener :
public class CalcGUI extends javax.swing.JFrame implements
PropertyChangeListener{
/** Creates new form CalcGUI */
public CalcGUI() {
initComponents();
Calculator calc = new Calculator();
calc.addPropertyChangeListener(this);
}
public void propertyChange(PropertyChangeEvent evt) {
if(evt.getPropertyName().equals("value")) {
jValueField.setText(evt.getNewValue().toString());
}
}
/** metoder til initialisering af gui er fjernet **/
}
Håber det giver en ide om, hvordan det kan laves.
/Søren Berg Glasius
| |
Mette Dencker (30-04-2003)
| Kommentar Fra : Mette Dencker |
Dato : 30-04-03 10:32 |
|
Den nemme løsning, som jeg fandt på api'en var at kalde metoden updateUI()
på mit JLabel-objekt... Det duer - men måske er det ikke så kønt!
/Mette
Søren Berg Glasius <spamfree@privat-post.dk> skrev i en
nyhedsmeddelelse:b8o2lr$1dr0$1@news.cybercity.dk...
> > Er der nogen der ved, hvordan man opdaterer en værdi på et Jpanel, når
> > værdien bliver beregnet et andet sted i programmet - dvs. i en anden
> klasse?
> > Jeg har et helt projekt i JCreator, hvor mit Jpanel er oprettet i én
> klasse,
> > og en anden klasse foretager nogle beregninger, hvor resultatet med
> > mellemrum skal opdateres på panelet...
>
> Hej Mette
>
> Benyt et observer pattern.
>
> Lad klassen som laver beregninger benytte PropertyChangeSupport f.eks:
>
> public class Calculator {
>
> /** Holds value of property value. */
> private int value;
>
> /** Utility field used by bound properties. */
> private java.beans.PropertyChangeSupport propertyChangeSupport = new
> java.beans.PropertyChangeSupport(this);
>
> /** Adds a PropertyChangeListener to the listener list.
> * @param l The listener to add.
> *
> */
> public void
addPropertyChangeListener(java.beans.PropertyChangeListener
> l) {
> propertyChangeSupport.addPropertyChangeListener(l);
> }
>
> /** Removes a PropertyChangeListener from the listener list.
> * @param l The listener to remove.
> *
> */
> public void
> removePropertyChangeListener(java.beans.PropertyChangeListener l) {
> propertyChangeSupport.removePropertyChangeListener(l);
> }
>
> /** Getter for property value.
> * @return Value of property value.
> *
> */
> public int getValue() {
> return this.value;
> }
>
> /** Setter for property value.
> * @param value New value of property value.
> *
> */
> public void setValue(int value) {
> int oldValue = this.value;
> this.value = value;
> propertyChangeSupport.firePropertyChange("value", new
> Integer(oldValue), new Integer(value));
> }
>
> }
>
> og lad dit GUI registrere sig som property change listener :
>
> public class CalcGUI extends javax.swing.JFrame implements
> PropertyChangeListener{
>
> /** Creates new form CalcGUI */
> public CalcGUI() {
> initComponents();
> Calculator calc = new Calculator();
> calc.addPropertyChangeListener(this);
> }
>
> public void propertyChange(PropertyChangeEvent evt) {
> if(evt.getPropertyName().equals("value")) {
> jValueField.setText(evt.getNewValue().toString());
> }
> }
>
> /** metoder til initialisering af gui er fjernet **/
> }
>
> Håber det giver en ide om, hvordan det kan laves.
>
> /Søren Berg Glasius
>
>
| |
|
|