Solved

Constant Flickering in Java Applet

Posted on 2003-11-12
18
849 Views
Last Modified: 2013-12-03
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]
0
Comment
Question by:Düber
  • 7
  • 3
  • 3
  • +2
18 Comments
 
LVL 86

Expert Comment

by:CEHJ
ID: 9735443
Don't add components in your paint method
0
 
LVL 15

Expert Comment

by:Javatm
ID: 9735575
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
 
LVL 15

Expert Comment

by:Javatm
ID: 9735579
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
 
LVL 92

Expert Comment

by:objects
ID: 9735625
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
 
LVL 86

Expert Comment

by:CEHJ
ID: 9735676
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
 
LVL 35

Expert Comment

by:TimYates
ID: 9735958
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
 
LVL 92

Expert Comment

by:objects
ID: 9736030
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
 

Author Comment

by:Düber
ID: 9738499
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
 
LVL 35

Expert Comment

by:TimYates
ID: 9738600
Try getting rid of:

    setLayout(new FlowLayout());
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 86

Expert Comment

by:CEHJ
ID: 9738794
>>All the different code examples result in this:

Yes, but what is it that you want the result to be? ;-)
0
 
LVL 92

Expert Comment

by:objects
ID: 9742149
> All the different code examples result in this:

Thats why I suggested using seperate components so you could contol the layout.
0
 

Author Comment

by:Düber
ID: 9744834
>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
 
LVL 92

Expert Comment

by:objects
ID: 9744863
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
 
LVL 92

Accepted Solution

by:
objects earned 100 total points
ID: 9744886
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
 
LVL 35

Expert Comment

by:TimYates
ID: 9746027
> 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
 
LVL 92

Expert Comment

by:objects
ID: 9751314
> 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
 

Author Comment

by:Düber
ID: 9752502
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
 
LVL 92

Expert Comment

by:objects
ID: 9752685
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

Suggested Solutions

Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now