Avatar billede Slettet bruger
13. april 2004 - 20:18 Der er 17 kommentarer og
1 løsning

Java Swing til Applet

Hvordan får jeg denne kode til at virke i en applet:

import javax.swing.*;
import javax.swing.event.*;
import java.beans.*;
import java.awt.*;
import java.io.*;


public class BakedBean extends JComponent
implements Externalizable
{
  // Property names (only needed for bound or constrained properties)
  public static final String BEAN_VALUE = "Value";
  public static final String BEAN_COLOR = "Color";

  // Properties
  private Font m_beanFont;          // simple
  private Dimension m_beanDimension; // simple
  private int m_beanValue;          // bound
  private Color m_beanColor;        // constrained
  private String m_beanString;      // change

  // Manages all PropertyChangeListeners
  protected SwingPropertyChangeSupport m_supporter =
    new SwingPropertyChangeSupport(this);

  // Manages all VetoableChangeListeners
  protected VetoableChangeSupport m_vetoer =
    new VetoableChangeSupport(this);

  // Only one ChangeEvent is needed since the event's only
  // state is the source property.  The source of events generated
  // is always "this". -- you’ll see this in lots of Swing code.
  protected transient ChangeEvent m_changeEvent = null;

  // This can manage all types of listeners, as long as we set
  // up the fireXX methods to correctly look through this list.
  // This makes you appreciate the XXSupport classes.
  protected EventListenerList m_listenerList =
    new EventListenerList();

  public BakedBean() {
    m_beanFont = new Font("SanSerif", Font.BOLD | Font.ITALIC, 12);
    m_beanDimension = new Dimension(150,100);
    m_beanValue = 0;
    m_beanColor = Color.black;
    m_beanString = "BakedBean #";
  }

  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.setColor(m_beanColor);
    g.setFont(m_beanFont);
    g.drawString(m_beanString + m_beanValue,30,30);
  }

  public void setBeanFont(Font font) {
    m_beanFont = font;
  }

  public Font getBeanFont() {
    return m_beanFont;
  }

  public void setBeanValue(int newValue) {
    int oldValue = m_beanValue;
    m_beanValue = newValue;

    // Notify all PropertyChangeListeners
    m_supporter.firePropertyChange(BEAN_VALUE,
      new Integer(oldValue), new Integer(newValue));
  }

  public int getBeanValue() {
    return m_beanValue;
  }

  public void setBeanColor(Color newColor)
  throws PropertyVetoException {
    Color oldColor = m_beanColor;

    // Notify all VetoableChangeListeners before making change
    // ...exception will be thrown here if there is a veto
    // ...if not we continue on and make the change
    m_vetoer.fireVetoableChange(BEAN_COLOR, oldColor, newColor);

    m_beanColor = newColor;
    m_supporter.firePropertyChange(BEAN_COLOR, oldColor, newColor);
  }

  public Color getBeanColor() {
    return m_beanColor;
  }

  public void setBeanString(String newString) {
    m_beanString = newString;

    // Notify all ChangeListeners
    fireStateChanged();
  }

  public String getBeanString() {
    return m_beanString;
  }

  public void setPreferredSize(Dimension dim) {
    m_beanDimension = dim;
  }

  public Dimension getPreferredSize() {
    return m_beanDimension;
  }

  public void setMinimumSize(Dimension dim) {
    m_beanDimension = dim;
  }

  public Dimension getMinimumSize() {
    return m_beanDimension;
  }

  public void addPropertyChangeListener(
  PropertyChangeListener l) {
    m_supporter.addPropertyChangeListener(l);
  }
   
  public void removePropertyChangeListener(
  PropertyChangeListener l) {
    m_supporter.removePropertyChangeListener(l);
  }

  public void addVetoableChangeListener(
  VetoableChangeListener l) {
    m_vetoer.addVetoableChangeListener(l);
  }

  public void removeVetoableChangeListener(
  VetoableChangeListener l) {
    m_vetoer.removeVetoableChangeListener(l);
  }

  // Remember that EventListenerList is an array of
  // key/value pairs.
  // key = XXListener class reference
  // value = XXListener instance
  public void addChangeListener(ChangeListener l) {
    m_listenerList.add(ChangeListener.class, l);
  }
   
  public void removeChangeListener(ChangeListener l) {
    m_listenerList.remove(ChangeListener.class, l);
  }

  // This is typical EventListenerList dispatching code.
  // You will see this in lots of Swing source.
  protected void fireStateChanged() {
    Object[] listeners = m_listenerList.getListenerList();
    // Process the listeners last to first, notifying
    // those that are interested in this event
    for (int i = listeners.length-2; i>=0; i-=2) {
      if (listeners[i]==ChangeListener.class) {
      if (m_changeEvent == null)
        m_changeEvent = new ChangeEvent(this);
        ((ChangeListener)listeners[i+1]).stateChanged(m_changeEvent);
      }         
    }
  }

  public void writeExternal(ObjectOutput out) 
    throws IOException
  {
    out.writeObject(m_beanFont);
    out.writeObject(m_beanDimension);
    out.writeInt(m_beanValue);
    out.writeObject(m_beanColor);
    out.writeObject(m_beanString);
  }

  public void readExternal(ObjectInput in)
    throws IOException, ClassNotFoundException
  {
    setBeanFont((Font)in.readObject());
    setPreferredSize((Dimension)in.readObject());
      // Use preferred size for minimum size..
      setMinimumSize(getPreferredSize());
    setBeanValue(in.readInt());
    try {
      setBeanColor((Color)in.readObject());
    }
    catch (PropertyVetoException pve) {
      System.out.println("Color change vetoed..");
    }
    setBeanString((String)in.readObject());
  }

  public static void main(String[] args) {
    JFrame frame = new JFrame("BakedBean");
    frame.getContentPane().add(new BakedBean());
    frame.setVisible(true);
    frame.pack();
  }
}

Jeg skal vel importere JApplet
Der skal vel heller ikke være en main metode. Men vel public void init hvor der vel skal være extends JApplet

Men det er ikke nok...
Avatar billede arne_v Ekspert
13. april 2004 - 20:30 #1
De 2 rettelser + super.paintComponent->super.paintComponents og så compiler
og kører den faktisk:

import javax.swing.*;
import javax.swing.event.*;
import java.beans.*;
import java.awt.*;
import java.io.*;

public class BakedBean extends JApplet implements Externalizable {
    // Property names (only needed for bound or constrained properties)
    public static final String BEAN_VALUE = "Value";
    public static final String BEAN_COLOR = "Color";

    // Properties
    private Font m_beanFont; // simple
    private Dimension m_beanDimension; // simple
    private int m_beanValue; // bound
    private Color m_beanColor; // constrained
    private String m_beanString; // change

    // Manages all PropertyChangeListeners
    protected SwingPropertyChangeSupport m_supporter =
        new SwingPropertyChangeSupport(this);

    // Manages all VetoableChangeListeners
    protected VetoableChangeSupport m_vetoer = new VetoableChangeSupport(this);

    // Only one ChangeEvent is needed since the event's only
    // state is the source property.  The source of events generated
    // is always "this". -- you’ll see this in lots of Swing code.
    protected transient ChangeEvent m_changeEvent = null;

    // This can manage all types of listeners, as long as we set
    // up the fireXX methods to correctly look through this list.
    // This makes you appreciate the XXSupport classes.
    protected EventListenerList m_listenerList = new EventListenerList();

    public BakedBean() {
        m_beanFont = new Font("SanSerif", Font.BOLD | Font.ITALIC, 12);
        m_beanDimension = new Dimension(150, 100);
        m_beanValue = 0;
        m_beanColor = Color.black;
        m_beanString = "BakedBean #";
    }

    public void paintComponent(Graphics g) {
        super.paintComponents(g);
        g.setColor(m_beanColor);
        g.setFont(m_beanFont);
        g.drawString(m_beanString + m_beanValue, 30, 30);
    }

    public void setBeanFont(Font font) {
        m_beanFont = font;
    }

    public Font getBeanFont() {
        return m_beanFont;
    }

    public void setBeanValue(int newValue) {
        int oldValue = m_beanValue;
        m_beanValue = newValue;

        // Notify all PropertyChangeListeners
        m_supporter.firePropertyChange(
            BEAN_VALUE,
            new Integer(oldValue),
            new Integer(newValue));
    }

    public int getBeanValue() {
        return m_beanValue;
    }

    public void setBeanColor(Color newColor) throws PropertyVetoException {
        Color oldColor = m_beanColor;

        // Notify all VetoableChangeListeners before making change
        // ...exception will be thrown here if there is a veto
        // ...if not we continue on and make the change
        m_vetoer.fireVetoableChange(BEAN_COLOR, oldColor, newColor);

        m_beanColor = newColor;
        m_supporter.firePropertyChange(BEAN_COLOR, oldColor, newColor);
    }

    public Color getBeanColor() {
        return m_beanColor;
    }

    public void setBeanString(String newString) {
        m_beanString = newString;

        // Notify all ChangeListeners
        fireStateChanged();
    }

    public String getBeanString() {
        return m_beanString;
    }

    public void setPreferredSize(Dimension dim) {
        m_beanDimension = dim;
    }

    public Dimension getPreferredSize() {
        return m_beanDimension;
    }

    public void setMinimumSize(Dimension dim) {
        m_beanDimension = dim;
    }

    public Dimension getMinimumSize() {
        return m_beanDimension;
    }

    public void addPropertyChangeListener(PropertyChangeListener l) {
        m_supporter.addPropertyChangeListener(l);
    }

    public void removePropertyChangeListener(PropertyChangeListener l) {
        m_supporter.removePropertyChangeListener(l);
    }

    public void addVetoableChangeListener(VetoableChangeListener l) {
        m_vetoer.addVetoableChangeListener(l);
    }

    public void removeVetoableChangeListener(VetoableChangeListener l) {
        m_vetoer.removeVetoableChangeListener(l);
    }

    // Remember that EventListenerList is an array of
    // key/value pairs.
    // key = XXListener class reference
    // value = XXListener instance
    public void addChangeListener(ChangeListener l) {
        m_listenerList.add(ChangeListener.class, l);
    }

    public void removeChangeListener(ChangeListener l) {
        m_listenerList.remove(ChangeListener.class, l);
    }

    // This is typical EventListenerList dispatching code.
    // You will see this in lots of Swing source.
    protected void fireStateChanged() {
        Object[] listeners = m_listenerList.getListenerList();
        // Process the listeners last to first, notifying
        // those that are interested in this event
        for (int i = listeners.length - 2; i >= 0; i -= 2) {
            if (listeners[i] == ChangeListener.class) {
                if (m_changeEvent == null)
                    m_changeEvent = new ChangeEvent(this);
                ((ChangeListener) listeners[i + 1]).stateChanged(m_changeEvent);
            }
        }
    }

    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeObject(m_beanFont);
        out.writeObject(m_beanDimension);
        out.writeInt(m_beanValue);
        out.writeObject(m_beanColor);
        out.writeObject(m_beanString);
    }

    public void readExternal(ObjectInput in)
        throws IOException, ClassNotFoundException {
        setBeanFont((Font) in.readObject());
        setPreferredSize((Dimension) in.readObject());
        // Use preferred size for minimum size..
        setMinimumSize(getPreferredSize());
        setBeanValue(in.readInt());
        try {
            setBeanColor((Color) in.readObject());
        } catch (PropertyVetoException pve) {
            System.out.println("Color change vetoed..");
        }
        setBeanString((String) in.readObject());
    }

    public void init() {
        JFrame frame = new JFrame("BakedBean");
        frame.getContentPane().add(new BakedBean());
        frame.setVisible(true);
        frame.pack();
    }
}
Avatar billede arne_v Ekspert
13. april 2004 - 20:30 #2
(omend den ikke ligefrem gør meget ...)
Avatar billede Slettet bruger
13. april 2004 - 21:23 #3
Rigtigt :)
Men hvad gør, at den ikke åbnes i browseren. Men i eget vindue (som popup)
Avatar billede arne_v Ekspert
13. april 2004 - 21:26 #4
Det at du laver en ny frame !
Avatar billede arne_v Ekspert
13. april 2004 - 21:27 #5
public void init() {
        /*
        JFrame frame = new JFrame("BakedBean");
        frame.getContentPane().add(new BakedBean());
        frame.setVisible(true);
        frame.pack();
        */
        getContentPane().add(new BakedBean());
    }
Avatar billede Slettet bruger
13. april 2004 - 22:09 #6
Ja. Men det er altså så ikke nok hos mig!?
Jeg har slettet .class filen og compileret på ny. Men stadig åbnes applet'en i sit eget vindue. Denne er vel rigtig:
<applet code="BakedBean.class" width=800 height=500>
Avatar billede arne_v Ekspert
13. april 2004 - 22:25 #7
Ja - den er rigtig.

Har du flushet web serveren cache og haft browseren lukket helt ned for
at få dens cache tømt ?
Avatar billede Slettet bruger
13. april 2004 - 22:27 #8
Nej det er sikkert der det er.
Tak for hjælpen arne.
sender du et svar...
Avatar billede Slettet bruger
13. april 2004 - 22:28 #9
PS! Hvad er flushet?
Avatar billede arne_v Ekspert
13. april 2004 - 22:32 #10
Flushet er et udtryk for at tømme en memory cache.
Avatar billede arne_v Ekspert
13. april 2004 - 22:32 #11
svar
Avatar billede _carsten Nybegynder
13. april 2004 - 22:34 #12
Hvis du vil have den i browseren, behøver du kun at smide den bean ind i en applet

<HTML>
<HEAD>
  <TITLE>TestBean</TITLE>
</HEAD>
<BODY>
<P>
<APPLET code="TestBean.class" width="100%" height="100%"></APPLET>
</P>
</BODY>
</HTML>


// Her er appletten
public class TestBean extends javax.swing.JApplet {

    public void init() {
        initComponents();
        getContentPane().add(new BakedBean());
    }
}
Avatar billede _carsten Nybegynder
13. april 2004 - 22:35 #13
Hov - denne metode skal selvfølgelig ikke med:            initComponents();
Avatar billede Slettet bruger
13. april 2004 - 22:51 #14
Jeg ser på det imorgen. Det glæder jeg mig til.
Avatar billede Slettet bruger
14. april 2004 - 19:30 #15
Det fungere. Jeg anvender carstens i denne sammenhæng fordi applet'en i denne sammenhæng blot skal kunne vises i browseren.
Skal du have point giver jeg også gerne dig 30. Men så send et svar carsten.
> arne. Er der en "smart" måden at tømme memory cachen på (uden at slukke computeren). Således at jeg kan være 100% sikker på der ikke ligger noget?
Avatar billede _carsten Nybegynder
14. april 2004 - 19:36 #16
Det må være rimeligt at kun Arne for point her.
Avatar billede Slettet bruger
14. april 2004 - 19:47 #17
OK. Tak for hjælpen.
Avatar billede arne_v Ekspert
14. april 2004 - 22:09 #18
Jeg har selv haft store problemer med cachede applets.

Man kan prøve at finde det sted i browseren hvor man kan slette cache.

Man kan prøve at CTRL + klik refresh i.s.f. bare klik refresh.

Man kan bede web serveren om at flushe cachen.

Men jeg har ikke *LØSNINGEN*.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester