Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > Applet - Creating new objects from a Button Listener

Reply
Thread Tools

Applet - Creating new objects from a Button Listener

 
 
theneb
Guest
Posts: n/a
 
      04-22-2007
Hello everyone, I'm attempting to create JComponents from when a
button is clicked. However I'm assuming I'm missing something? (Or
it's not possible)

This is some quick prototype code which shows my intentions.

import java.awt.*;
import javax.swing.*;
import java.applet.*;
import java.awt.event.*;
import java.util.*;

public class myApplet extends Applet implements ActionListener{

private JPanel buttonPanel;
private HashMap<String,testButton> buttons;

private testButton myButton, secondButton, thirdButton;

public void init(){
buttonPanel = new JPanel();
buttons = new HashMap<String,testButton>();
buttons.put(String.valueOf(buttons.size()),new testButton());
buttonPanel.add(buttons.get(String.valueOf(buttons .size()-1)));
add(buttonPanel);
}//end init

public void start(){
System.out.println("START");
}

public void actionPerformed(ActionEvent event) {
System.out.println("Action");
}


private class testButton extends JButton implements ActionListener{


public testButton(){
setText("Button "+buttons.size());
addActionListener(this);
}

public void actionPerformed(ActionEvent event) {
System.out.println("Adding New Button");
buttons.put(String.valueOf(buttons.size()),new testButton());
buttonPanel.add(buttons.get(String.valueOf(buttons .size()-1)));
}

}

}//end myApplet


Example here: http://www.theneb.co.uk/applet-test/test.html

Cheers

 
Reply With Quote
 
 
 
 
Tom Hawtin
Guest
Posts: n/a
 
      04-22-2007
theneb wrote:
> Hello everyone, I'm attempting to create JComponents from when a
> button is clicked. However I'm assuming I'm missing something? (Or
> it's not possible)


From the java.awt.Container.add API docs:

"Note: If a component has been added to a container that has been
displayed, validate must be called on that container to display the new
component. If multiple components are being added, you can improve
efficiency by calling validate only once, after all the components have
been added."


> public class myApplet extends Applet implements ActionListener{


Much better to use anonymous inner classes for listeners, otherwise you
will have a mess. (And initial caps for type names.)

> private HashMap<String,testButton> buttons;


This can just be Map.

> buttons.put(String.valueOf(buttons.size()),new testButton());
> buttonPanel.add(buttons.get(String.valueOf(buttons .size()-1)));


That's just confusing.

> public void actionPerformed(ActionEvent event) {


Never used...

> private class testButton extends JButton implements ActionListener{


Again, don't do listeners like that. And you don't need to extend
JButton at all.

public class MyApplet extends Applet {

private final Map<String,JButton> buttons =
new HashMap<String,JButton>();

private JPanel buttonPanel;

public void init() {
buttonPanel = new JPanel();
addButton();
}

private void addButton() {
String id = String.valueOf(buttons.size());
JButton button = new JButton(id);
button.addActionListener(new ActionListener {
public void actionPerformed(ActionEvent event) {
addButton();
}
});
buttons.put(id, button);
buttonPanel.add(button);
buttonPanel.validate();
}
}


(Disclaimer: Not compiled or tested.)

Tom Hawtin
 
Reply With Quote
 
 
 
 
SadRed
Guest
Posts: n/a
 
      04-22-2007
On Apr 23, 7:20 am, theneb <(E-Mail Removed)> wrote:
> Hello everyone, I'm attempting to create JComponents from when a
> button is clicked. However I'm assuming I'm missing something? (Or
> it's not possible)
>
> This is some quick prototype code which shows my intentions.
>
> import java.awt.*;
> import javax.swing.*;
> import java.applet.*;
> import java.awt.event.*;
> import java.util.*;
>
> public class myApplet extends Applet implements ActionListener{
>
> private JPanel buttonPanel;
> private HashMap<String,testButton> buttons;
>
> private testButton myButton, secondButton, thirdButton;
>
> public void init(){
> buttonPanel = new JPanel();
> buttons = new HashMap<String,testButton>();
> buttons.put(String.valueOf(buttons.size()),new testButton());
> buttonPanel.add(buttons.get(String.valueOf(buttons .size()-1)));
> add(buttonPanel);
> }//end init
>
> public void start(){
> System.out.println("START");
> }
>
> public void actionPerformed(ActionEvent event) {
> System.out.println("Action");
> }
>
> private class testButton extends JButton implements ActionListener{
>
> public testButton(){
> setText("Button "+buttons.size());
> addActionListener(this);
> }
>
> public void actionPerformed(ActionEvent event) {
> System.out.println("Adding New Button");
> buttons.put(String.valueOf(buttons.size()),new testButton());
> buttonPanel.add(buttons.get(String.valueOf(buttons .size()-1)));
> }
>
> }
> }//end myApplet
>
> Example here:http://www.theneb.co.uk/applet-test/test.html
>
> Cheers


import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;

public class MyApplet extends JApplet{
private JPanel buttonPanel;
private HashMap<String,TestButton> buttons;
private TestButton myButton, secondButton, thirdButton;

public void init(){
buttonPanel = new JPanel();
buttons = new HashMap<String, TestButton>();
buttons.put(String.valueOf(buttons.size()), new TestButton());
buttonPanel.add(buttons.get(String.valueOf(buttons .size()-1)));
getContentPane().add(buttonPanel, BorderLayout.CENTER);
}//end init

private class TestButton extends JButton implements ActionListener{

public TestButton(){
setText("Button " + buttons.size());
addActionListener(this);
}

public void actionPerformed(ActionEvent event) {
System.out.println("Adding New Button");
buttons.put(String.valueOf(buttons.size()), new TestButton());
buttonPanel.add(buttons.get(String.valueOf(buttons .size() -
1)));
buttonPanel.revalidate();
}
}
}//end MyApplet

 
Reply With Quote
 
Knute Johnson
Guest
Posts: n/a
 
      04-22-2007
theneb wrote:
> Hello everyone, I'm attempting to create JComponents from when a
> button is clicked. However I'm assuming I'm missing something? (Or
> it's not possible)
>
> This is some quick prototype code which shows my intentions.
>
> import java.awt.*;
> import javax.swing.*;
> import java.applet.*;
> import java.awt.event.*;
> import java.util.*;
>
> public class myApplet extends Applet implements ActionListener{
>
> private JPanel buttonPanel;
> private HashMap<String,testButton> buttons;
>
> private testButton myButton, secondButton, thirdButton;
>
> public void init(){
> buttonPanel = new JPanel();
> buttons = new HashMap<String,testButton>();
> buttons.put(String.valueOf(buttons.size()),new testButton());
> buttonPanel.add(buttons.get(String.valueOf(buttons .size()-1)));
> add(buttonPanel);
> }//end init
>
> public void start(){
> System.out.println("START");
> }
>
> public void actionPerformed(ActionEvent event) {
> System.out.println("Action");
> }
>
>
> private class testButton extends JButton implements ActionListener{
>
>
> public testButton(){
> setText("Button "+buttons.size());
> addActionListener(this);
> }
>
> public void actionPerformed(ActionEvent event) {
> System.out.println("Adding New Button");
> buttons.put(String.valueOf(buttons.size()),new testButton());
> buttonPanel.add(buttons.get(String.valueOf(buttons .size()-1)));
> }
>
> }
>
> }//end myApplet
>
>
> Example here: http://www.theneb.co.uk/applet-test/test.html
>
> Cheers
>


After you add or remove components from a container you need to call
validate() and usually repaint(). This will cause the LayoutManager to
re-layout your components. If your containers are JComponents (which
JApplet is not) you can call revalidate() on the container to have the
LayoutManager re-layout the component.

Also, you are using JButtons and an Applet. You should not mix AWT and
Swing components. If you are going to use JButtons, use a JApplet.

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

public class test extends JApplet {
public void init() {
setLayout(new FlowLayout());

JButton add = new JButton("Add a Button");
add.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
test.this.add(new Tutton("Press Me"));
test.this.validate();
test.this.repaint();
}
});
add(add);
}

class Tutton extends JButton implements ActionListener {
public Tutton(String text) {
super(text);
addActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
test.this.remove((JComponent)ae.getSource());
test.this.validate();
test.this.repaint();
}
}
}

--

Knute Johnson
email s/nospam/knute/
 
Reply With Quote
 
theneb
Guest
Posts: n/a
 
      05-05-2007
On 23 Apr, 00:34, Knute Johnson <(E-Mail Removed)>
wrote:
> thenebwrote:
> > Hello everyone, I'm attempting to create JComponents from when a
> > button is clicked. However I'm assuming I'm missing something? (Or
> > it's not possible)

>
> > This is some quick prototype code which shows my intentions.

>
> > import java.awt.*;
> > import javax.swing.*;
> > import java.applet.*;
> > import java.awt.event.*;
> > import java.util.*;

>
> > public class myApplet extends Applet implements ActionListener{

>
> > private JPanel buttonPanel;
> > private HashMap<String,testButton> buttons;

>
> > private testButton myButton, secondButton, thirdButton;

>
> > public void init(){
> > buttonPanel = new JPanel();
> > buttons = new HashMap<String,testButton>();
> > buttons.put(String.valueOf(buttons.size()),new testButton());
> > buttonPanel.add(buttons.get(String.valueOf(buttons .size()-1)));
> > add(buttonPanel);
> > }//end init

>
> > public void start(){
> > System.out.println("START");
> > }

>
> > public void actionPerformed(ActionEvent event) {
> > System.out.println("Action");
> > }

>
> > private class testButton extends JButton implements ActionListener{

>
> > public testButton(){
> > setText("Button "+buttons.size());
> > addActionListener(this);
> > }

>
> > public void actionPerformed(ActionEvent event) {
> > System.out.println("Adding New Button");
> > buttons.put(String.valueOf(buttons.size()),new testButton());
> > buttonPanel.add(buttons.get(String.valueOf(buttons .size()-1)));
> > }

>
> > }

>
> > }//end myApplet

>
> > Example here:http://www.theneb.co.uk/applet-test/test.html

>
> > Cheers

>
> After you add or remove components from a container you need to call
> validate() and usually repaint(). This will cause the LayoutManager to
> re-layout your components. If your containers are JComponents (which
> JApplet is not) you can call revalidate() on the container to have the
> LayoutManager re-layout the component.
>
> Also, you are using JButtons and an Applet. You should not mix AWT and
> Swing components. If you are going to use JButtons, use a JApplet.
>
> import java.awt.*;
> import java.awt.event.*;
> import javax.swing.*;
>
> public class test extends JApplet {
> public void init() {
> setLayout(new FlowLayout());
>
> JButton add = new JButton("Add a Button");
> add.addActionListener(new ActionListener() {
> public void actionPerformed(ActionEvent ae) {
> test.this.add(new Tutton("Press Me"));
> test.this.validate();
> test.this.repaint();
> }
> });
> add(add);
> }
>
> class Tutton extends JButton implements ActionListener {
> public Tutton(String text) {
> super(text);
> addActionListener(this);
> }
> public void actionPerformed(ActionEvent ae) {
> test.this.remove((JComponent)ae.getSource());
> test.this.validate();
> test.this.repaint();
> }
> }
>
> }
>
> --
>
> Knute Johnson
> email s/nospam/knute/




Appoligies for a late reply, thanks to all. My code now fully works.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
creating garbage collectable objects (caching objects) News123 Python 7 06-29-2009 04:12 PM
class objects, method objects, function objects 7stud Python 11 03-20-2007 06:05 PM
Opening a new window and attaching an onload event listener. Daz Javascript 5 02-10-2007 05:31 PM
Action Listener, Determing which button was pressed Ben Java 22 02-17-2006 03:46 PM
SocketServer and a Java applet listener google@phaedro.com Python 4 08-29-2005 09:48 PM



Advertisments