如何从JFrame组件Java获取数据



我需要从"Board"组件获取一些数据,但我不知道如何获取。我尝试了Frame.Component.data,但不起作用。代码:

public class window extends JFrame {
public  window() {
add(new Board());
setResizable(true);
pack();
setTitle("Game");
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}
public static void main(String[] args) {

EventQueue.invokeLater(() -> {
JFrame ex = new window();
ex.setVisible(true);
ex.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
//ex.Board.data
System.exit(0);
}
});
});
}}

首先有一个快速答案的小提示:将代码减少到最低限度,以重现您的错误,这更容易理解,尤其是在您的真正目的是在注释中的情况下。。。然后使其可编译。。。

为了回答您的问题:个人而言,我使用专用字段来直接链接到我稍后要处理的对象,原因有两个:第一,字段易于使用,而且不占用太多内存。其次,这个解决方案将不取决于你的框架的组织方式。另一种获得相同结果的方法是第二个片段,问题是如果你改变了你的框架组织,你将不得不修改你的监听器

package so1;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Window extends JFrame {
private static final long serialVersionUID = 3000003489937872937L;
public class Data {
public void doSomethings() {
System.out.println("toto");
}
}
public class Board extends JLabel {
private static final long serialVersionUID = 7362684018638848838L;
private Data data = new Data();
}
private Board board;
public Window() {
board = new Board();
add(board);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
public static void main(String[] args) {
Window ex = new Window();
ex.setVisible(true);
ex.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
ex.board.data.doSomethings();
}
});
}
}

糟糕的解决方案:

public static void main(String[] args) {
Window ex = new Window();
ex.setVisible(true);
ex.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
((Board)((JPanel)((JLayeredPane)((JRootPane)ex.getComponents()[0]).getComponents()[1]).getComponents()[0]).getComponents()[0]).data.doSomethings();;
}
});
}

最新更新