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?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

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
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
Become a Certified Penetration Testing Engineer

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

Mick BarryJava DeveloperCommented:
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
Mick BarryJava DeveloperCommented:
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
Mick BarryJava DeveloperCommented:
> 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
Mick BarryJava DeveloperCommented:
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
Mick BarryJava DeveloperCommented:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
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
Mick BarryJava DeveloperCommented:
> 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
Mick BarryJava DeveloperCommented:
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Fonts Typography

From novice to tech pro — start learning today.