CodeBoy CodeBoy - 1 year ago 60
Java Question

Looping to make JButtons that hold their name values

EDIT: The answer to the button generating part of this question can be found here:
Array that Holds JButton Objects

I used a for loop to generate some JButtons each labeled with their index. Within the loop, I attach an ActionListener to each button. The listener retrieves the label of the button and prints it. Currently, the only button which returns a value is the last one created, which makes sense. I'm wondering if there is a way to do this sort of mass-generation and then individual retrieval in an advantageous way.


Make a bunch of labeled JButtons in a loop.
Print the label when a button is clicked.

Here is a short, executable example of what my current process looks like:

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;

public class calc {
private JFrame mainFrame;
private JPanel mainPanel;
private JButton button;

public calc(){
mainFrame = new JFrame("Calculator");
mainPanel = new JPanel();

for (int i=0; i<10; i++){
int value = i;
String number = Integer.toString(value);
button = new JButton(number);
button.addActionListener(new ButtonListener());
mainFrame.setLayout(new FlowLayout());
mainFrame.setSize(250, 300);
mainPanel.setLayout(new FlowLayout());

class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button) {
System.out.println(((JButton) e.getSource()).getText());

Answer Source

You can create an array of buttons, for example:

JButton[] btns = new JButtons[10];
for(int x=0; x<btns.length; x++)
    btns[x] = new JButton(x + "");

Create your ActionListener:

private class ButtonHandler() implements ActionListener{
    public void actionPerformed(ActionEvent e){
        System.out.println( ((JButton)e.getSource()).getText() );

Add each button to the ActionListener:

ButtonHandler handler = new ButtonHandler();
for(int x=0=; x<btns.length; x++)

When you click any of the buttons, it will trigger the ActionListener and based on the button that was clicked, print the text from the JButton to the console.