[英]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.