(new rewritten code).. I just know that "b" will always the last box that i created.So i can't use b as the equals in actionPerformed. How to include all the buttons? Anyone can help me with this? import java.awt.; import javax.swing.; import java.awt.event.*;
public class Lat1 extends JFrame implements ActionListener
{
final int ROWS = 12;
final int COLS = 12;
final static int topLeftNum[][]= {
{-1, 1, 0, 2, 0, 0, 3, -1, 4, 0, 5, 0},
{6, 0, 0, 0, -1, -1, 0, -1, -1, -1, 0, -1},
{-1, 0, -1, 0, -1, 7, 0, 0, 8, -1, 0, -1},
{9, 0, 0, 0, 10, -1, -1, -1, 11, 0, 0, -1},
{0, -1, -1, 12, 0, 0, 13, -1, 0, -1, -1, -1},
{0, -1, 14, -1, 0, -1, 0, -1, 15, 0, 0, 16},
{17, 0, 0, 18, 0, -1, 19, 20, 0, -1, -1, 0},
{0, -1, 0, 0, -1, 21, 0, 0, 0, -1, -1, 0},
{22, 23, 0, 0, -1, 0, -1, 0, -1,24, 0, 0},
{-1, 0, -1, 25, 0, 0, -1, 0, -1, 0, -1, -1},
{26, 0, 0, -1, -1, 0, -1, 27, 0, 0, 0, -1},
{-1, -1, -1, -1, -1, 0, -1, 0, -1, 0, -1, -1}
};
Box b;
JTextField t;
char answer;
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run(){ new Lat1(); }
});
}
/*--------------------------------------------------------*/
public Lat1()
{
this.setSize(1000,1000);
this.setVisible(true);
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(ROWS,COLS));
for (int j=0; j<ROWS; j++) {
for (int i=0; i<COLS; i++) {
b = new Box(i, //the boxes index
(topLeftNum[j][i] < 0) ? Color.BLACK : Color.WHITE, //pick the color
topLeftNum[j][i], //the topleft number
answer, //the char inside
this); //the action listener for the button
p1.add(b);
}
}
p1.setVisible(true);
this.getContentPane().add(p1,BorderLayout.CENTER);
this.pack();
JPanel p2 = new JPanel();
t = new JTextField(10);
p2.add(t);
p2.setVisible(true);
this.getContentPane().add(p2,BorderLayout.SOUTH);
}
/*-----------------------------------------------------------*/
public void actionPerformed(ActionEvent e)
{
for (int j=0; j<ROWS; j++) {
for (int i=0; i<COLS; i++) {
String numstr = String.valueOf(topLeftNum[j][i]);
if(e.getSource() == numstr && (t.getText()).length() == 1)
answer = t.getText().charAt(0);
b.setText(""+ answer);
//b.setText(String.valueOf(t.getText().charAt(0));
}
}
}
}
/*------------------------------------------------------------*/
class Box extends JButton
{
public int index;
private String topLeftNum;
public Box(int index, Color color, int topLeftNum, char c, ActionListener al)
{
this.setBackground(color);
if (color != Color.BLACK) {
this.setFont(new Font("SansSerif", Font.ITALIC, 20));
this.setText(""+ c);
this.addActionListener(al);
this.index = index;
if (topLeftNum != 0)
this.topLeftNum = topLeftNum+""; }
else {
this.setText("");
this.setEnabled(false);
return; }
}
public void paintComponent(Graphics g)
{
super.paintComponent(g); // paints background
g.setFont(new Font("SansSerif", Font.PLAIN, 8));
if (topLeftNum != null) g.drawString(topLeftNum, 5, 10);
}
}
/*----------------------------------------------------------*/