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
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
我正在尝试访问toString()以便在MouseEntered()事件中调用我的按钮并且它无法正常工作。任何帮助表示赞赏。而不是在标签上打印名称+“”+ 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);
}
}
1 个解决方案
#1
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:
MouseListener未使用EmptySpace.toString方法 - mouseEntered实现中的toString调用引用MouseAdapter实例。要引用适当的JButton实例并调用它的toString方法,您可以获取事件的来源:
Board.toStringText.setText(e.getSource().toString());
Or refer to the outer class instance:
或者引用外部类实例:
Board.toStringText.setText(EmptySpace.this.toString());
@ee2694I'm trying to access to toString() for my butto