Re: Create JButtons from array
Brian wrote:
Hi all
I'm writing a small program with a lot of buttons. To make it a little
easier to write the code I've tried to create the JButtons from an
array.
I don't work.
I don't get response from the ActionListener
Any ideas?
/Brian
Simple example:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class ButtonPanel extends JPanel {
private Controller controller = new Controller();
private JButton btnOne, btnTwo, btnThree, btnABC, btnFour, btnFive,
btnSix, btnExtra1, btnSeven, btnEight, btnNine, btnExtra2, btnAsterix,
btnZero, btnHash, btnSearch;
private JButton[] buttons = { btnOne, btnTwo, btnThree, btnABC,
btnFour, btnFive, btnSix, btnExtra1, btnSeven, btnEight,
btnNine, btnExtra2, btnAsterix, btnZero, btnHash, btnSearch };
private String[] buttonTxt = { "1", "2", "3", "ABC", "4", "5", "6",
"Extra1", "7", "8", "9", "Extra2", "*", "0", "#", "SHg" };
public ButtonPanel() {
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton(buttonTxt[i]);
buttons[i].setSize(80, 80);
buttons[i].addActionListener(controller);
this.add(buttons[i]);
}
}
private class Controller implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnOne) {
System.out.println("test OK");
}
}
}
See the notes in you code (modified) below. If you are going to post
code, please post an SSCCE (see http://www.physci.org/codes/sscce.html).
It would be really nice if you could develop a neat indentation style.
This should get you going, post back if you have further questions.
//
// it is just easier to include the whole package rather than having all
// those statements
//
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonPanel extends JPanel {
private Controller controller = new Controller();
//
// these are redundant because you reassign them in the loop
//
// private JButton btnOne, btnTwo, btnThree, btnABC, btnFour, btnFive,
// btnSix, btnExtra1, btnSeven, btnEight, btnNine, btnExtra2, btnAsterix,
// btnZero, btnHash, btnSearch;
//
// these are also a problem
// private JButton[] buttons = { btnOne, btnTwo, btnThree, btnABC,
//btnFour, btnFive, btnSix, btnExtra1, btnSeven, btnEight,
//btnNine, btnExtra2, btnAsterix, btnZero, btnHash, btnSearch };
//
private String[] buttonTxt = { "1", "2", "3", "ABC", "4", "5", "6",
"Extra1", "7", "8", "9", "Extra2", "*", "0", "#", "SHg" };
//
// just create an array of JButtons
//
JButton[] buttons = new JButton[buttonTxt.length];
public ButtonPanel() {
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton(buttonTxt[i]);
buttons[i].setSize(80, 80);
buttons[i].addActionListener(controller);
this.add(buttons[i]);
}
}
//
// rather than create another class that implements ActionListener you can
// have your ButtonPanel class implement ActionListener
// to do that just change the first line of the class to;
//
// public class ButtonPanel extends JPanel implements ActionListener {
//
// and add an actionPerformed() method to the class
//
private class Controller implements ActionListener {
public void actionPerformed(ActionEvent e) {
/*
if (e.getSource() == btnOne) {
System.out.println("test OK");
}
*/
// get the action command which is the text of the button unless
// otherwise set and test that for the one you want, that way
you don't
// have to have references to all the buttons here
String actionCommand = e.getActionCommand();
if (actionCommand.equals("1"))
System.out.println("test OK");
else
System.out.println(actionCommand);
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new ButtonPanel());
f.pack();
f.setVisible(true);
}
});
}
}
--
Knute Johnson
email s/nospam/knute/
--
Posted via NewsDemon.com - Premium Uncensored Newsgroup Service
------->>>>>>http://www.NewsDemon.com<<<<<<------
Unlimited Access, Anonymous Accounts, Uncensored Broadband Access