简体   繁体   English

如何使自定义按钮的toString()与MouseEntered()一起使用?

[英]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. 我正在尝试访问toString(),以便在MouseEntered()事件中调用我的按钮,但该按钮不起作用。 Any help is appreciated. 任何帮助表示赞赏。 Instead of printing the name + " " + x + " " + y on the label it prints something like base.EmptySpace$1@ee2694 而不是在标签上打印名称+“” + x +“” + y,它打印的内容类似于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. MouseListener没有使用EmptySpace.toString方法mouseEntered实现中对toString的调用引用了MouseAdapter实例。 To refer to the appropriate JButton instance and call it's toString method, you can get the source of the event: 要引用适当的JButton实例并调用它的toString方法,您可以获取事件的源:

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

Or refer to the outer class instance: 或参考外部类实例:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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