简体   繁体   中英

How do I make the toString() for my custom button work with MouseEntered()?

I'm trying to access to toString() for my button to be called in an MouseEntered() event and its not working. Any help is appreciated. Instead of printing the name + " " + x + " " + y on the label it prints something like base.EmptySpace$1@ee2694

public class EmptySpace extends JButton {

    private int x; 
    private static int y;
    private static String name;

    public EmptySpace(String text, int x, int y){
        super(text);
        this.name = text;
        this.x = x;
        this.y = y;

        addMouseListener(new MouseAdapter(){
            @Override
            public void mouseEntered(MouseEvent e){
                Board.toStringText.setText(this.toString());
            }
        });
    }

    public String toString(){
        return name + " " + x + " " + y;

    }

    public class Board extends JFrame{

        private EmptySpace[][] buttons;
        private JPanel toolTips;
        private JPanel toStringPane;
        protected static JLabel toStringText;

        private static int lengthy;
        private static int lengthx;

        public Board(int x, int y){
            lengthy = y;
            lengthx = x;

        }
        public void printBoard(){
            int x;
            int y;
            JPanel pane = new JPanel();
            pane.setLayout(new GridLayout(lengthy, lengthx));
            buttons = new EmptySpace[lengthx][lengthy];
            for (int i = 0; i < lengthx*lengthy; i++) {
                if(i<lengthx){
                    x = i+1;
                }else x = i % lengthx+1;
                if(i<lengthx){
                    y=1;
                }else y = i/lengthx+1;

                String xString = Integer.toString(x);
                String yString = Methods.getChar(y);



                buttons[x-1][y-1] = new EmptySpace(xString+yString,x,y);
                buttons[x-1][y-1].setPreferredSize(new Dimension(25, 25));
                buttons[x-1][y-1].setBackground(Color.WHITE);
                buttons[x-1][y-1].setText("");
                buttons[x-1][y-1].setToolTipText(xString+yString);

                pane.add(buttons[x-1][y-1]);
            }
            System.out.println(buttons[1][9].toString());
            toolTips = new JPanel();
            toolTips.setPreferredSize(new Dimension(200,500));
            toolTips.setBackground(Color.WHITE);

            toStringPane = new JPanel();
            toStringPane.setBackground(Color.GRAY);

            toStringText = new JLabel();
            toStringText.setText("test");
            toStringText.setPreferredSize(new Dimension(175,50));
            toStringText.setForeground(Color.black);
            toolTips.add(toStringPane);

            toStringPane.add(toStringText);

            JFrame frame = new JFrame("Trenches");
            SpringLayout layout = new SpringLayout();
            frame.setLayout(layout);
            layout.putConstraint(SpringLayout.WEST, pane, (1280-lengthx*25)/2, SpringLayout.WEST, frame);
            layout.putConstraint(SpringLayout.NORTH, pane, (720-lengthy*30)/3, SpringLayout.NORTH, frame);
            layout.putConstraint(SpringLayout.WEST, toolTips, ((1280-lengthx*25)-200)/8, SpringLayout.WEST, frame);
            layout.putConstraint(SpringLayout.NORTH, toolTips, (720-lengthy*30)/3, SpringLayout.NORTH, frame);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(pane);
            frame.add(toolTips);
            frame.setSize(1280, 720);

            frame.setVisible(true);

        }

    }

The MouseListener is not using the EmptySpace.toString method - the call toString in the mouseEntered implementation refers to the MouseAdapter instance. To refer to the appropriate JButton instance and call it's toString method, you can get the source of the event:

Board.toStringText.setText(e.getSource().toString());

Or refer to the outer class instance:

Board.toStringText.setText(EmptySpace.this.toString());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM