how to remove two jbuttons that have the same values and same colors by clicking them?












1















I have a matrix of colorful buttons and I need to compare their colors and their values after clicking them. All my code does is removing every button without searching their values or colors.Also i need to add the jlabel without rearranging jbuttons. How can i fix the problem?



public class Legos2 extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;

public JPanel jp = (JPanel)this.getContentPane();
public JButton jb = new JButton[12][24];//my matrix
public static JLabel jl = new JLabel("score",SwingConstants.CENTER);//a jlabel to count the scores every time two buttons are removed

public Legos2() {
super();
this.setSize(2000,2000);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
jp.setLayout(new GridLayout(12, 24));//size of my jpanel

Random rnd = new Random();
Color c = {Color.lightGray, Color.gray, Color.white, Color.cyan};//colored jbuttons
final int MAXCOLOR = c.length;
JButton jb1;

for(int i = 0;i <jb.length;i++) {
for(int j = 0; j<jb[i].length; j++) {
int k = (int) (Math.random()*9+1);//k is a random integer from 1 to 9
jb1 = new JButton(Integer.toString(k));

add(jb1);
jb[i][j]=jb1;
jb[i][j].addActionListener(this);
}
}

for(int i=0; i<jb.length; i++){
for(int j = 0; j<jb[i].length; j++) {
jb[i][j].setBackground(c[rnd.nextInt(MAXCOLOR)]);//i add colors in here
}
}

for (int row = 0; row < jb.length; row++) {
for (int column = 0; column < jb[row].length; column++) {
jb[row][column].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
String buttonText = button.getText();
// now iterate over all the jbuttons you have
for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
String bText = b.getText();
if(e.getSource()==b)
if(buttonText.equals(bText)){
b.setEnabled(false);

jl.setText(Integer.toString(i));
}
}
}
}
}
);
jp.add(jb[row][column]);
}
}
}
}









share|improve this question

























  • What should happen when you click a button ? All buttons with the same color and value should be disabled ?

    – c0der
    Dec 30 '18 at 17:47
















1















I have a matrix of colorful buttons and I need to compare their colors and their values after clicking them. All my code does is removing every button without searching their values or colors.Also i need to add the jlabel without rearranging jbuttons. How can i fix the problem?



public class Legos2 extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;

public JPanel jp = (JPanel)this.getContentPane();
public JButton jb = new JButton[12][24];//my matrix
public static JLabel jl = new JLabel("score",SwingConstants.CENTER);//a jlabel to count the scores every time two buttons are removed

public Legos2() {
super();
this.setSize(2000,2000);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
jp.setLayout(new GridLayout(12, 24));//size of my jpanel

Random rnd = new Random();
Color c = {Color.lightGray, Color.gray, Color.white, Color.cyan};//colored jbuttons
final int MAXCOLOR = c.length;
JButton jb1;

for(int i = 0;i <jb.length;i++) {
for(int j = 0; j<jb[i].length; j++) {
int k = (int) (Math.random()*9+1);//k is a random integer from 1 to 9
jb1 = new JButton(Integer.toString(k));

add(jb1);
jb[i][j]=jb1;
jb[i][j].addActionListener(this);
}
}

for(int i=0; i<jb.length; i++){
for(int j = 0; j<jb[i].length; j++) {
jb[i][j].setBackground(c[rnd.nextInt(MAXCOLOR)]);//i add colors in here
}
}

for (int row = 0; row < jb.length; row++) {
for (int column = 0; column < jb[row].length; column++) {
jb[row][column].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
String buttonText = button.getText();
// now iterate over all the jbuttons you have
for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
String bText = b.getText();
if(e.getSource()==b)
if(buttonText.equals(bText)){
b.setEnabled(false);

jl.setText(Integer.toString(i));
}
}
}
}
}
);
jp.add(jb[row][column]);
}
}
}
}









share|improve this question

























  • What should happen when you click a button ? All buttons with the same color and value should be disabled ?

    – c0der
    Dec 30 '18 at 17:47














1












1








1








I have a matrix of colorful buttons and I need to compare their colors and their values after clicking them. All my code does is removing every button without searching their values or colors.Also i need to add the jlabel without rearranging jbuttons. How can i fix the problem?



public class Legos2 extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;

public JPanel jp = (JPanel)this.getContentPane();
public JButton jb = new JButton[12][24];//my matrix
public static JLabel jl = new JLabel("score",SwingConstants.CENTER);//a jlabel to count the scores every time two buttons are removed

public Legos2() {
super();
this.setSize(2000,2000);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
jp.setLayout(new GridLayout(12, 24));//size of my jpanel

Random rnd = new Random();
Color c = {Color.lightGray, Color.gray, Color.white, Color.cyan};//colored jbuttons
final int MAXCOLOR = c.length;
JButton jb1;

for(int i = 0;i <jb.length;i++) {
for(int j = 0; j<jb[i].length; j++) {
int k = (int) (Math.random()*9+1);//k is a random integer from 1 to 9
jb1 = new JButton(Integer.toString(k));

add(jb1);
jb[i][j]=jb1;
jb[i][j].addActionListener(this);
}
}

for(int i=0; i<jb.length; i++){
for(int j = 0; j<jb[i].length; j++) {
jb[i][j].setBackground(c[rnd.nextInt(MAXCOLOR)]);//i add colors in here
}
}

for (int row = 0; row < jb.length; row++) {
for (int column = 0; column < jb[row].length; column++) {
jb[row][column].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
String buttonText = button.getText();
// now iterate over all the jbuttons you have
for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
String bText = b.getText();
if(e.getSource()==b)
if(buttonText.equals(bText)){
b.setEnabled(false);

jl.setText(Integer.toString(i));
}
}
}
}
}
);
jp.add(jb[row][column]);
}
}
}
}









share|improve this question
















I have a matrix of colorful buttons and I need to compare their colors and their values after clicking them. All my code does is removing every button without searching their values or colors.Also i need to add the jlabel without rearranging jbuttons. How can i fix the problem?



public class Legos2 extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;

public JPanel jp = (JPanel)this.getContentPane();
public JButton jb = new JButton[12][24];//my matrix
public static JLabel jl = new JLabel("score",SwingConstants.CENTER);//a jlabel to count the scores every time two buttons are removed

public Legos2() {
super();
this.setSize(2000,2000);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
jp.setLayout(new GridLayout(12, 24));//size of my jpanel

Random rnd = new Random();
Color c = {Color.lightGray, Color.gray, Color.white, Color.cyan};//colored jbuttons
final int MAXCOLOR = c.length;
JButton jb1;

for(int i = 0;i <jb.length;i++) {
for(int j = 0; j<jb[i].length; j++) {
int k = (int) (Math.random()*9+1);//k is a random integer from 1 to 9
jb1 = new JButton(Integer.toString(k));

add(jb1);
jb[i][j]=jb1;
jb[i][j].addActionListener(this);
}
}

for(int i=0; i<jb.length; i++){
for(int j = 0; j<jb[i].length; j++) {
jb[i][j].setBackground(c[rnd.nextInt(MAXCOLOR)]);//i add colors in here
}
}

for (int row = 0; row < jb.length; row++) {
for (int column = 0; column < jb[row].length; column++) {
jb[row][column].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
String buttonText = button.getText();
// now iterate over all the jbuttons you have
for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
String bText = b.getText();
if(e.getSource()==b)
if(buttonText.equals(bText)){
b.setEnabled(false);

jl.setText(Integer.toString(i));
}
}
}
}
}
);
jp.add(jb[row][column]);
}
}
}
}






java swing jbutton jlabel tiles






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 30 '18 at 17:38









c0der

9,06151846




9,06151846










asked Dec 30 '18 at 17:06









h.zuhairh.zuhair

61




61













  • What should happen when you click a button ? All buttons with the same color and value should be disabled ?

    – c0der
    Dec 30 '18 at 17:47



















  • What should happen when you click a button ? All buttons with the same color and value should be disabled ?

    – c0der
    Dec 30 '18 at 17:47

















What should happen when you click a button ? All buttons with the same color and value should be disabled ?

– c0der
Dec 30 '18 at 17:47





What should happen when you click a button ? All buttons with the same color and value should be disabled ?

– c0der
Dec 30 '18 at 17:47












1 Answer
1






active

oldest

votes


















0














The following is mcve of the required functionality. Please review and ask for clarifications as needed:



import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class Legos2 extends JFrame{

private static final long serialVersionUID = 1L;
private static final int ROWS = 12, COLS =24;
public JButton jb = new JButton[ROWS][COLS];
private int score = 0;
public static JLabel jl;

public Legos2() {
super();
this.setSize(2000,2000);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel jp= new JPanel();
jp.setLayout(new GridLayout(ROWS, COLS));

Random rnd = new Random();
Color c = {Color.lightGray, Color.gray, Color.white, Color.cyan};
final int MAXCOLOR = c.length;
//all can be done in one loop
for(int i = 0;i <jb.length;i++) {
for(int j = 0; j<jb[i].length; j++) {
int k = (int) (Math.random()*9+1);//k is a random integer from 1 to 9
JButton button = new JButton(Integer.toString(k));
button.setBackground(c[rnd.nextInt(MAXCOLOR)]);
button.addActionListener(e -> {
disableTwoMatchingButtons(button);
});
jb[i][j]=button;
jp.add(button);
}
}

add(jp); //add panel at content pane center
jl= new JLabel("",SwingConstants.CENTER);
updateScore(0);
add(jl, BorderLayout.PAGE_END); //add label at content pane bottom
pack();
setVisible(true);
}

private void disableTwoMatchingButtons(JButton button) {

for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
if(b.isEnabled() && button.getText().equals(b.getText()) &&
button.getBackground().equals(b.getBackground())){
b.setEnabled(false);
button.setEnabled(false);
updateScore(2* Integer.valueOf(b.getText()));
return;
}
}
}
}

private void updateScore(int value) {
score += value;
jl.setText("Score: "+ score );
}

public static void main(String args) {
new Legos2();
}
}


If you need to disable all matching button, and not just two, use :



    private void disableAllMatchingButtons(JButton button) {

for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
if(b.isEnabled() && button.getText().equals(b.getText())
&& button.getBackground().equals(b.getBackground())){
b.setEnabled(false);
updateScore(Integer.valueOf(b.getText()));
}
}
}
}


(instead of disableTwoMatchingButtons)


For future post always consider posting an mcve, and stick to one question per post.






share|improve this answer


























  • Thanks so much. But i don't want the buttons to disappear right after running my code i want them to disappear after I click them. Like, I don't know how to compare two buttons that are already clicked and disable them if they're the same amd if they're not they should still be there.

    – h.zuhair
    Dec 31 '18 at 18:27











  • Button are disabled (they do not disappear) after you click them. Did you run the code ? Note that I made small change in disableTwoMatchingButtons and disableAllMatchingButtons. To check if a button is disabled you use button.isEnabled() method. Also see this

    – c0der
    Jan 1 at 5:13













Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53979698%2fhow-to-remove-two-jbuttons-that-have-the-same-values-and-same-colors-by-clicking%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














The following is mcve of the required functionality. Please review and ask for clarifications as needed:



import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class Legos2 extends JFrame{

private static final long serialVersionUID = 1L;
private static final int ROWS = 12, COLS =24;
public JButton jb = new JButton[ROWS][COLS];
private int score = 0;
public static JLabel jl;

public Legos2() {
super();
this.setSize(2000,2000);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel jp= new JPanel();
jp.setLayout(new GridLayout(ROWS, COLS));

Random rnd = new Random();
Color c = {Color.lightGray, Color.gray, Color.white, Color.cyan};
final int MAXCOLOR = c.length;
//all can be done in one loop
for(int i = 0;i <jb.length;i++) {
for(int j = 0; j<jb[i].length; j++) {
int k = (int) (Math.random()*9+1);//k is a random integer from 1 to 9
JButton button = new JButton(Integer.toString(k));
button.setBackground(c[rnd.nextInt(MAXCOLOR)]);
button.addActionListener(e -> {
disableTwoMatchingButtons(button);
});
jb[i][j]=button;
jp.add(button);
}
}

add(jp); //add panel at content pane center
jl= new JLabel("",SwingConstants.CENTER);
updateScore(0);
add(jl, BorderLayout.PAGE_END); //add label at content pane bottom
pack();
setVisible(true);
}

private void disableTwoMatchingButtons(JButton button) {

for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
if(b.isEnabled() && button.getText().equals(b.getText()) &&
button.getBackground().equals(b.getBackground())){
b.setEnabled(false);
button.setEnabled(false);
updateScore(2* Integer.valueOf(b.getText()));
return;
}
}
}
}

private void updateScore(int value) {
score += value;
jl.setText("Score: "+ score );
}

public static void main(String args) {
new Legos2();
}
}


If you need to disable all matching button, and not just two, use :



    private void disableAllMatchingButtons(JButton button) {

for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
if(b.isEnabled() && button.getText().equals(b.getText())
&& button.getBackground().equals(b.getBackground())){
b.setEnabled(false);
updateScore(Integer.valueOf(b.getText()));
}
}
}
}


(instead of disableTwoMatchingButtons)


For future post always consider posting an mcve, and stick to one question per post.






share|improve this answer


























  • Thanks so much. But i don't want the buttons to disappear right after running my code i want them to disappear after I click them. Like, I don't know how to compare two buttons that are already clicked and disable them if they're the same amd if they're not they should still be there.

    – h.zuhair
    Dec 31 '18 at 18:27











  • Button are disabled (they do not disappear) after you click them. Did you run the code ? Note that I made small change in disableTwoMatchingButtons and disableAllMatchingButtons. To check if a button is disabled you use button.isEnabled() method. Also see this

    – c0der
    Jan 1 at 5:13


















0














The following is mcve of the required functionality. Please review and ask for clarifications as needed:



import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class Legos2 extends JFrame{

private static final long serialVersionUID = 1L;
private static final int ROWS = 12, COLS =24;
public JButton jb = new JButton[ROWS][COLS];
private int score = 0;
public static JLabel jl;

public Legos2() {
super();
this.setSize(2000,2000);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel jp= new JPanel();
jp.setLayout(new GridLayout(ROWS, COLS));

Random rnd = new Random();
Color c = {Color.lightGray, Color.gray, Color.white, Color.cyan};
final int MAXCOLOR = c.length;
//all can be done in one loop
for(int i = 0;i <jb.length;i++) {
for(int j = 0; j<jb[i].length; j++) {
int k = (int) (Math.random()*9+1);//k is a random integer from 1 to 9
JButton button = new JButton(Integer.toString(k));
button.setBackground(c[rnd.nextInt(MAXCOLOR)]);
button.addActionListener(e -> {
disableTwoMatchingButtons(button);
});
jb[i][j]=button;
jp.add(button);
}
}

add(jp); //add panel at content pane center
jl= new JLabel("",SwingConstants.CENTER);
updateScore(0);
add(jl, BorderLayout.PAGE_END); //add label at content pane bottom
pack();
setVisible(true);
}

private void disableTwoMatchingButtons(JButton button) {

for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
if(b.isEnabled() && button.getText().equals(b.getText()) &&
button.getBackground().equals(b.getBackground())){
b.setEnabled(false);
button.setEnabled(false);
updateScore(2* Integer.valueOf(b.getText()));
return;
}
}
}
}

private void updateScore(int value) {
score += value;
jl.setText("Score: "+ score );
}

public static void main(String args) {
new Legos2();
}
}


If you need to disable all matching button, and not just two, use :



    private void disableAllMatchingButtons(JButton button) {

for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
if(b.isEnabled() && button.getText().equals(b.getText())
&& button.getBackground().equals(b.getBackground())){
b.setEnabled(false);
updateScore(Integer.valueOf(b.getText()));
}
}
}
}


(instead of disableTwoMatchingButtons)


For future post always consider posting an mcve, and stick to one question per post.






share|improve this answer


























  • Thanks so much. But i don't want the buttons to disappear right after running my code i want them to disappear after I click them. Like, I don't know how to compare two buttons that are already clicked and disable them if they're the same amd if they're not they should still be there.

    – h.zuhair
    Dec 31 '18 at 18:27











  • Button are disabled (they do not disappear) after you click them. Did you run the code ? Note that I made small change in disableTwoMatchingButtons and disableAllMatchingButtons. To check if a button is disabled you use button.isEnabled() method. Also see this

    – c0der
    Jan 1 at 5:13
















0












0








0







The following is mcve of the required functionality. Please review and ask for clarifications as needed:



import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class Legos2 extends JFrame{

private static final long serialVersionUID = 1L;
private static final int ROWS = 12, COLS =24;
public JButton jb = new JButton[ROWS][COLS];
private int score = 0;
public static JLabel jl;

public Legos2() {
super();
this.setSize(2000,2000);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel jp= new JPanel();
jp.setLayout(new GridLayout(ROWS, COLS));

Random rnd = new Random();
Color c = {Color.lightGray, Color.gray, Color.white, Color.cyan};
final int MAXCOLOR = c.length;
//all can be done in one loop
for(int i = 0;i <jb.length;i++) {
for(int j = 0; j<jb[i].length; j++) {
int k = (int) (Math.random()*9+1);//k is a random integer from 1 to 9
JButton button = new JButton(Integer.toString(k));
button.setBackground(c[rnd.nextInt(MAXCOLOR)]);
button.addActionListener(e -> {
disableTwoMatchingButtons(button);
});
jb[i][j]=button;
jp.add(button);
}
}

add(jp); //add panel at content pane center
jl= new JLabel("",SwingConstants.CENTER);
updateScore(0);
add(jl, BorderLayout.PAGE_END); //add label at content pane bottom
pack();
setVisible(true);
}

private void disableTwoMatchingButtons(JButton button) {

for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
if(b.isEnabled() && button.getText().equals(b.getText()) &&
button.getBackground().equals(b.getBackground())){
b.setEnabled(false);
button.setEnabled(false);
updateScore(2* Integer.valueOf(b.getText()));
return;
}
}
}
}

private void updateScore(int value) {
score += value;
jl.setText("Score: "+ score );
}

public static void main(String args) {
new Legos2();
}
}


If you need to disable all matching button, and not just two, use :



    private void disableAllMatchingButtons(JButton button) {

for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
if(b.isEnabled() && button.getText().equals(b.getText())
&& button.getBackground().equals(b.getBackground())){
b.setEnabled(false);
updateScore(Integer.valueOf(b.getText()));
}
}
}
}


(instead of disableTwoMatchingButtons)


For future post always consider posting an mcve, and stick to one question per post.






share|improve this answer















The following is mcve of the required functionality. Please review and ask for clarifications as needed:



import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class Legos2 extends JFrame{

private static final long serialVersionUID = 1L;
private static final int ROWS = 12, COLS =24;
public JButton jb = new JButton[ROWS][COLS];
private int score = 0;
public static JLabel jl;

public Legos2() {
super();
this.setSize(2000,2000);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);

JPanel jp= new JPanel();
jp.setLayout(new GridLayout(ROWS, COLS));

Random rnd = new Random();
Color c = {Color.lightGray, Color.gray, Color.white, Color.cyan};
final int MAXCOLOR = c.length;
//all can be done in one loop
for(int i = 0;i <jb.length;i++) {
for(int j = 0; j<jb[i].length; j++) {
int k = (int) (Math.random()*9+1);//k is a random integer from 1 to 9
JButton button = new JButton(Integer.toString(k));
button.setBackground(c[rnd.nextInt(MAXCOLOR)]);
button.addActionListener(e -> {
disableTwoMatchingButtons(button);
});
jb[i][j]=button;
jp.add(button);
}
}

add(jp); //add panel at content pane center
jl= new JLabel("",SwingConstants.CENTER);
updateScore(0);
add(jl, BorderLayout.PAGE_END); //add label at content pane bottom
pack();
setVisible(true);
}

private void disableTwoMatchingButtons(JButton button) {

for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
if(b.isEnabled() && button.getText().equals(b.getText()) &&
button.getBackground().equals(b.getBackground())){
b.setEnabled(false);
button.setEnabled(false);
updateScore(2* Integer.valueOf(b.getText()));
return;
}
}
}
}

private void updateScore(int value) {
score += value;
jl.setText("Score: "+ score );
}

public static void main(String args) {
new Legos2();
}
}


If you need to disable all matching button, and not just two, use :



    private void disableAllMatchingButtons(JButton button) {

for(int i=0;i<jb.length;i++){
for(int j=0;j<jb[0].length;j++){
JButton b = jb[i][j];
if(b.isEnabled() && button.getText().equals(b.getText())
&& button.getBackground().equals(b.getBackground())){
b.setEnabled(false);
updateScore(Integer.valueOf(b.getText()));
}
}
}
}


(instead of disableTwoMatchingButtons)


For future post always consider posting an mcve, and stick to one question per post.







share|improve this answer














share|improve this answer



share|improve this answer








edited Jan 1 at 5:07

























answered Dec 30 '18 at 18:31









c0derc0der

9,06151846




9,06151846













  • Thanks so much. But i don't want the buttons to disappear right after running my code i want them to disappear after I click them. Like, I don't know how to compare two buttons that are already clicked and disable them if they're the same amd if they're not they should still be there.

    – h.zuhair
    Dec 31 '18 at 18:27











  • Button are disabled (they do not disappear) after you click them. Did you run the code ? Note that I made small change in disableTwoMatchingButtons and disableAllMatchingButtons. To check if a button is disabled you use button.isEnabled() method. Also see this

    – c0der
    Jan 1 at 5:13





















  • Thanks so much. But i don't want the buttons to disappear right after running my code i want them to disappear after I click them. Like, I don't know how to compare two buttons that are already clicked and disable them if they're the same amd if they're not they should still be there.

    – h.zuhair
    Dec 31 '18 at 18:27











  • Button are disabled (they do not disappear) after you click them. Did you run the code ? Note that I made small change in disableTwoMatchingButtons and disableAllMatchingButtons. To check if a button is disabled you use button.isEnabled() method. Also see this

    – c0der
    Jan 1 at 5:13



















Thanks so much. But i don't want the buttons to disappear right after running my code i want them to disappear after I click them. Like, I don't know how to compare two buttons that are already clicked and disable them if they're the same amd if they're not they should still be there.

– h.zuhair
Dec 31 '18 at 18:27





Thanks so much. But i don't want the buttons to disappear right after running my code i want them to disappear after I click them. Like, I don't know how to compare two buttons that are already clicked and disable them if they're the same amd if they're not they should still be there.

– h.zuhair
Dec 31 '18 at 18:27













Button are disabled (they do not disappear) after you click them. Did you run the code ? Note that I made small change in disableTwoMatchingButtons and disableAllMatchingButtons. To check if a button is disabled you use button.isEnabled() method. Also see this

– c0der
Jan 1 at 5:13







Button are disabled (they do not disappear) after you click them. Did you run the code ? Note that I made small change in disableTwoMatchingButtons and disableAllMatchingButtons. To check if a button is disabled you use button.isEnabled() method. Also see this

– c0der
Jan 1 at 5:13






















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53979698%2fhow-to-remove-two-jbuttons-that-have-the-same-values-and-same-colors-by-clicking%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

MongoDB - Not Authorized To Execute Command

How to fix TextFormField cause rebuild widget in Flutter

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith