Re: Applet - Creating new objects from a Button Listener
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/