minus
minus

Reputation: 61

how to hide text on JButton in java?

I have some buttons with numbers on them to distinguish between the button but i dont want those numbers to be visible. Is there any way to have text on the buttons and just hiding it or making it invisible?

here is my code:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;

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

public class Start {
    public static int a;
    public static JButton[][] gumbi = new JButton[15][15];

    public static void main(String[] args) {
        JFrame okno = new JFrame("Nonogram");
        okno.setVisible(true);
        okno.setSize(800, 800);
        okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel(new BorderLayout());
        okno.add(panel);

        JPanel polje = new JPanel(new GridLayout(15, 15));
        panel.add(polje, BorderLayout.CENTER);
        a = 0;
        int b = 1;

        for (int i = 0; i < 15; i++) {
            for (int j = 0; j < 15; j++) {
                if (i < 5 && j < 5) {
                    gumbi[i][j] = new JButton();
                    gumbi[i][j].setBackground(Color.GREEN);
                    // gumbi[i][j].addActionListener(new Listener(gumbi));
                    polje.add(gumbi[i][j]);
                } else if (i < 5 || j < 5) {
                    gumbi[i][j] = new JButton();
                    gumbi[i][j].setBackground(Color.YELLOW);

                    // gumbi[i][j].addActionListener(new Listener(gumbi));
                    polje.add(gumbi[i][j]);
                    gumbi[i][j].setEnabled(false);

                } else {
                    if (Math.random() <= 0.6) {
                        a += 1;
                        gumbi[i][j] = new JButton();
                        gumbi[i][j].setBackground(Color.WHITE);
                        // gumbi[i][j].addActionListener(new Listener(gumbi));
                        gumbi[i][j].setText("3");
                        polje.add(gumbi[i][j]);

                    } else {
                        gumbi[i][j] = new JButton();
                        gumbi[i][j].setBackground(Color.WHITE);
                        // gumbi[i][j].addActionListener(new Listener(gumbi));
                        gumbi[i][j].setText("4");
                        polje.add(gumbi[i][j]);
                    }
                }
            }
        }


        for (int i = 0; i < 15; i++) {
            for (int j = 0; j < 15; j++) {
                gumbi[i][j].addActionListener(new Listener(gumbi));
            }
        }

        int [] array = new int[105];
        for (int i = 5; i < 15; i++) {
            for (int j = 5; j < 15; j++) {
                int num = Integer.parseInt(gumbi[i][j].getText());
                array [j + ((i-5)*10) - 5] = num;   
            }
        }

        int [] array2 = new int[105];
        for(int i = 0; i < 100; i++){
            array2[i] = -2;
        }
        array2[0] = -8;

        for(int i = 0; i < 100; i++){
            if(array[i] == array[i + 1] && array[i] == 3 && (i + 1) % 10 != 0){
                b += 1;
            } else if((array[i] == 3 && array[i] != array[i+1] && i < 99) || ((i + 1) % 10 == 0 && array[i] == 3)){
            array2[i] = b;
            b = 1;
            }
            if((i + 1) % 10 == 0){
                b = 1;
            }
        }
        int x = 0;
        int y = 0;
        for(int i = 1 ;i <= 100; i++){
                //if(array2[(i-4) + (10*(j - 5))] != -2){
            if (array2[i] != -2 && array[i] != 0){
                gumbi[x + 5][y].setText("" + array2[i]);
                y++;
            }
            if((i + 1) % 10 == 0){
                x++;
                y = 0;
            }

        }

        for(int i = 0; i < 101; i++){
            //System.out.println(array[i]);
            if(array2[i] != -2)
            System.out.print(array2[i] + " ");
            }
        for (int i = 5; i < 15; i++) {
            for (int j = 5; j < 15; j++) {
                int num = Integer.parseInt(gumbi[j][i].getText());
                array [j + ((i-5)*10) - 5] = num;   
            }
        }
        for(int i = 0; i < 100; i++){
            array2[i] = -2;
        }
        array2[0] = -8;
        b = 1;
        for(int i = 0; i < 100; i++){
            if(array[i] == array[i + 1] && array[i] == 3 && (i + 1) % 10 != 0){
                b += 1;
            } else if((array[i] == 3 && array[i] != array[i+1] && i < 99) || ((i + 1) % 10 == 0 &&             array[i] == 3)){
            array2[i] = b;
            b = 1;
            }
            if((i + 1) % 10 == 0){
                b = 1;
            }

        }
        x = 0;
        y = 0;
        for(int i = 1 ;i <= 100; i++){
            //if(array2[(i-4) + (10*(j - 5))] != -2){
        if (array2[i] != -2 && array[i] != 0){
            gumbi[y][x + 5].setText("" + array2[i]);
            y++;
        }
        if((i + 1) % 10 == 0){
            x++;
            y = 0;
        }

    }
        System.out.println();
        for(int i = 0; i < 105; i++){
            //System.out.println(array[i]);
            if(array2[i] != -2)
            System.out.print(array2[i] + " ");
        }
    }
}

and Action Listener:

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

import javax.swing.JButton;

public class Listener implements ActionListener {
    JButton[][] gumbi = Start.gumbi;

    public Listener(JButton[][] gumbi) {
        this.gumbi = gumbi;

    }

    public void actionPerformed(ActionEvent e) {

        JButton gumb = (JButton) e.getSource();

        if (gumb.getBackground() == Color.WHITE) {
            gumb.setBackground(Color.BLACK);
        } else if (gumb.getBackground() == Color.BLACK) {
            gumb.setBackground(Color.WHITE);
        }
        if (gumb.getBackground() == Color.WHITE && gumb.getText() == "3") {
            Start.a += 1;
            gumbi[0][0].setText("" + Start.a);
        } else if (gumb.getBackground() == Color.BLACK && gumb.getText() == "3") {
            Start.a -= 1;
            gumbi[0][0].setText("" + Start.a);
        }
    }
}

Thanks for your time.

Upvotes: 1

Views: 2358

Answers (3)

Jean-Baptiste Yun&#232;s
Jean-Baptiste Yun&#232;s

Reputation: 36391

What I understand is that you need to store some data in your buttons to distinguish them in your ActionListener. There is a construct for that: action commands. An action command is something that lets you put any text on a button (think about i18n, "Quit'-en, "Quitter"-fr) and associate a given semantic to that button ("QuitCommand" inside your app).

You can associate an action command to a button with setActionCommand(String) at any time and retrieve it with String getActionCommand() in your listener.

Upvotes: 3

Eric
Eric

Reputation: 1297

Don't use the buttons text to identify which button was pressed, set and use the buttons action command instead:

private static final String ACTION_COMMAND = "1";

...

JButton jbutton = new JButton();
jbutton.setActionCommand(ACTION_COMMAND);

...

if ( action.getActionCommand().equals(ACTION_COMMAND) )

Upvotes: 1

Laura
Laura

Reputation: 1602

It's not a very good practice to set the text of a button to use it in comparisons etc, you should find another way to do that; maybe change your gumbi object to a Map.

If you insist on using setText you could set the same color for the backgroud and the text.

gumbi[i][j].setBackground(Color.WHITE);
gumbi[i][j].setForeground(Color.WHITE);

Upvotes: 0

Related Questions