Constant Flickering in Java Applet

I am trying to create a Java applet with a TextField and a Button.
The program is supposed to change a certain text into what I enter in the text field when I press said Button.
That does happen, but then the Button and the TextField start flickering, and I can't use them anymore...

[code]
/**********
 * Basic applet test...
 * Uses an internet page with the code
 * <applet code="AppletTest.class" width="300" height="200"> </applet>
 * inserted in it.
 * All this was done with examples from: http://www.realapplets.com/tutorial/
 **********/

import java.applet.*;  
import java.awt.*;
import java.awt.event.*;

public class AppletTest extends Applet implements ActionListener
{
      Font font;
      Color bgColor;
      Color fontColor;
      TextField command;
      Button okButton;
      
    public void init()
    {
          setLayout(new FlowLayout());
          
          font = new Font("Verdana",Font.PLAIN,10);
          fontColor = Color.black;
          bgColor = Color.white;
          setBackground(bgColor);
          
          command = new TextField("Hello World!",290);
          command.setBounds(5,178,290,20);
          
          okButton = new Button("OK");
          okButton.setBounds(15,60,20,20);
          okButton.addActionListener(this);
    }
   
    public void stop()
    {}
      
    public void paint(Graphics g)
    {
          g.setFont(font);
          g.setColor(fontColor);
          
          g.drawString(": : BIG SHINY LETTERS : :",80,20);
            g.drawLine(5,45,295,45);
            add(okButton);
            g.drawString(command.getText(),5,100);
            g.drawLine(5,163,295,163);
            g.drawString("enter text:",10,174);
            add(command);
    }
   
    public void actionPerformed(ActionEvent evt)
    {
          repaint();
    }
}
[/code]
DüberAsked:
Who is Participating?
 
objectsConnect With a Mentor Commented:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/**
 *Description of the Class
 *
 * @author     protean
 * @created    12 November 2003
 */
public class AppletTest extends Applet implements ActionListener {
  Font font;
  Color bgColor;
  Color fontColor;
  TextField command;
  Button okButton;
  String text = "";

  /**
   *Description of the Method
   */
  public void init() {
    setLayout(null);

    font = new Font("Verdana", Font.PLAIN, 10);
    fontColor = Color.black;
    bgColor = Color.white;
    setBackground(bgColor);

    command = new TextField("Hello World!", 290);
    command.setBounds(5, 178, 290, 20);

    okButton = new Button("OK");
    okButton.setBounds(15, 60, 20, 20);
    okButton.addActionListener(this);

    add(okButton);
    add(command);
  }


  /**
   *Description of the Method
   */
  public void stop() { }

  public void update( Graphics g )
  {
      paint( g ) ;
  }

  /**
   *Description of the Method
   *
   * @param  g  Description of Parameter
   */
  public void paint(Graphics g) {
    g.setFont(font);
    g.setColor(fontColor);

    g.drawString(": : BIG SHINY LETTERS : :", 80, 20);
    g.drawLine(5, 45, 295, 45);

    g.drawString(text, 5, 100);
    g.drawLine(5, 163, 295, 163);
    g.drawString("enter text:", 10, 174);
  }


  /**
   *Description of the Method
   *
   * @param  evt  Description of Parameter
   */
  public void actionPerformed(ActionEvent evt) {
    text = command.getText();
    repaint();
  }
}
0
 
CEHJCommented:
Don't add components in your paint method
0
 
JavatmCommented:
Create an action listener on your button then
add this :

// Use this to change text on your textfiled
command.setText(": : BIG SHINY LETTERS : :");

Hope this helps . . .
JAVATM
0
Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

 
JavatmCommented:
import java.applet.*;  
import java.awt.*;
import java.awt.event.*;

public class AppletTest extends Applet implements ActionListener
{
     Font font;
     Color bgColor;
     Color fontColor;
     TextField command;
     Button okButton;
     
    public void init()
    {
         setLayout(new FlowLayout());
         
         font = new Font("Verdana",Font.PLAIN,10);
         fontColor = Color.black;
         bgColor = Color.white;
         setBackground(bgColor);
         
         command = new TextField("Hello World!",290);
         command.setBounds(5,178,290,20);
         
         okButton = new Button("OK");
         okButton.setBounds(15,60,20,20);
         okButton.addActionListener(this);
    }
   
    public void stop()
    {}
         
    public void actionPerformed(ActionEvent evt)
    {
         command.setText(": : BIG SHINY LETTERS : :");
    }
}
0
 
objectsCommented:
something like:

import java.applet.*;  
import java.awt.*;
import java.awt.event.*;

public class AppletTest extends Applet implements ActionListener
{
     Font font;
     Color bgColor;
     Color fontColor;
     TextField command;
     Button okButton;
     Label entered = new Label();

    public void init()
    {
         setLayout(new FlowLayout());
         
         font = new Font("Verdana",Font.PLAIN,10);
         fontColor = Color.black;
         bgColor = Color.white;
         setBackground(bgColor);
         
         command = new TextField("Hello World!",290);
         
         okButton = new Button("OK");
         okButton.addActionListener(this);

         add(okButton);
         add(command);
         add(label);
    }
   
    public void stop()
    {}
         
    public void actionPerformed(ActionEvent evt)
    {
         label.setText(command.getText());
    }
}
0
 
CEHJCommented:
There's nothing to stop you using your custom paint method - just don't add components in it:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/**
 *Description of the Class
 *
 * @author     protean
 * @created    12 November 2003
 */
public class AppletTest extends Applet implements ActionListener {
  Font font;
  Color bgColor;
  Color fontColor;
  TextField command;
  Button okButton;


  /**
   *Description of the Method
   */
  public void init() {
    setLayout(new FlowLayout());

    font = new Font("Verdana", Font.PLAIN, 10);
    fontColor = Color.black;
    bgColor = Color.white;
    setBackground(bgColor);

    command = new TextField("Hello World!", 290);
    command.setBounds(5, 178, 290, 20);

    okButton = new Button("OK");
    okButton.setBounds(15, 60, 20, 20);
    okButton.addActionListener(this);

    add(okButton);
    add(command);
  }


  /**
   *Description of the Method
   */
  public void stop() { }


  /**
   *Description of the Method
   *
   * @param  g  Description of Parameter
   */
  public void paint(Graphics g) {
    g.setFont(font);
    g.setColor(fontColor);

    g.drawString(": : BIG SHINY LETTERS : :", 80, 20);
    g.drawLine(5, 45, 295, 45);

    g.drawString(command.getText(), 5, 100);
    g.drawLine(5, 163, 295, 163);
    g.drawString("enter text:", 10, 174);
  }


  /**
   *Description of the Method
   *
   * @param  evt  Description of Parameter
   */
  public void actionPerformed(ActionEvent evt) {
    repaint();
  }
}
0
 
TimYatesCommented:
but if you override paint()  make sure you override update too :-)

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/**
 *Description of the Class
 *
 * @author     protean
 * @created    12 November 2003
 */
public class AppletTest extends Applet implements ActionListener {
  Font font;
  Color bgColor;
  Color fontColor;
  TextField command;
  Button okButton;


  /**
   *Description of the Method
   */
  public void init() {
    setLayout(new FlowLayout());

    font = new Font("Verdana", Font.PLAIN, 10);
    fontColor = Color.black;
    bgColor = Color.white;
    setBackground(bgColor);

    command = new TextField("Hello World!", 290);
    command.setBounds(5, 178, 290, 20);

    okButton = new Button("OK");
    okButton.setBounds(15, 60, 20, 20);
    okButton.addActionListener(this);

    add(okButton);
    add(command);
  }


  /**
   *Description of the Method
   */
  public void stop() { }

  public void update( Graphics g )
  {
      paint( g ) ;
  }

  /**
   *Description of the Method
   *
   * @param  g  Description of Parameter
   */
  public void paint(Graphics g) {
    g.setFont(font);
    g.setColor(fontColor);

    g.drawString(": : BIG SHINY LETTERS : :", 80, 20);
    g.drawLine(5, 45, 295, 45);

    g.drawString(command.getText(), 5, 100);
    g.drawLine(5, 163, 295, 163);
    g.drawString("enter text:", 10, 174);
  }


  /**
   *Description of the Method
   *
   * @param  evt  Description of Parameter
   */
  public void actionPerformed(ActionEvent evt) {
    repaint();
  }
}
0
 
objectsCommented:
If you want to handle the painting yourself then the following should do more along the lines that you want, though it still has a variety of problems. I'd still suggest using specific components to handle the display of the various items, a lot more flexible and neater:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/**
 *Description of the Class
 *
 * @author     protean
 * @created    12 November 2003
 */
public class AppletTest extends Applet implements ActionListener {
  Font font;
  Color bgColor;
  Color fontColor;
  TextField command;
  Button okButton;
  String text = "";

  /**
   *Description of the Method
   */
  public void init() {
    setLayout(new FlowLayout());

    font = new Font("Verdana", Font.PLAIN, 10);
    fontColor = Color.black;
    bgColor = Color.white;
    setBackground(bgColor);

    command = new TextField("Hello World!", 290);
    command.setBounds(5, 178, 290, 20);

    okButton = new Button("OK");
    okButton.setBounds(15, 60, 20, 20);
    okButton.addActionListener(this);

    add(okButton);
    add(command);
  }


  /**
   *Description of the Method
   */
  public void stop() { }

  public void update( Graphics g )
  {
      paint( g ) ;
  }

  /**
   *Description of the Method
   *
   * @param  g  Description of Parameter
   */
  public void paint(Graphics g) {
    g.setFont(font);
    g.setColor(fontColor);

    g.drawString(": : BIG SHINY LETTERS : :", 80, 20);
    g.drawLine(5, 45, 295, 45);

    g.drawString(text, 5, 100);
    g.drawLine(5, 163, 295, 163);
    g.drawString("enter text:", 10, 174);
  }


  /**
   *Description of the Method
   *
   * @param  evt  Description of Parameter
   */
  public void actionPerformed(ActionEvent evt) {
    text = command.getText();
    repaint();
  }
}
0
 
DüberAuthor Commented:
All the different code examples result in this:
http://home.no.net/npsycho/applet-test.gif
No matter what values I enter into the Button and TextField setBounds.
0
 
TimYatesCommented:
Try getting rid of:

    setLayout(new FlowLayout());
0
 
CEHJCommented:
>>All the different code examples result in this:

Yes, but what is it that you want the result to be? ;-)
0
 
objectsCommented:
> All the different code examples result in this:

Thats why I suggested using seperate components so you could contol the layout.
0
 
DüberAuthor Commented:
>Yes, but what is it that you want the result to be? ;-)

Sorry... forgot... :P
This is what the original looks like, but when I press OK it flickers like a ...(insert bad word here).
http://home.no.net/npsycho/orig.gif

Sorry if the answer is simple, and I am not getting it.  We have not covered ANY applet coding in school, so I am a newb to the extreme!
0
 
objectsCommented:
The layout manager is (correctly) handling laying out your components.
If you don't want to use a layout manager then set the layout manager to null instead of using FlowLayout:

setLayout(null);

If you do want to use layout managers then you'll need to use appropriate layout managers to achieve the result you desire.
0
 
TimYatesCommented:
> setLayout(null);

Isn't that the same as I suggested?  Just missing out the setLayout() altogether?

I'm not sure if it is ;-)

Tim
0
 
objectsCommented:
> Isn't that the same as I suggested?  Just missing out the setLayout() altogether?

No leaving it out will use the default layout manager for an applet.
0
 
DüberAuthor Commented:
Thanks to everyone who helped out!  I can finally make kickass applets!

Just goes to show, the internet is not only used for porn!

Thanks again!
0
 
objectsCommented:
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.