java - How get data from JFrame Component Java?
问题描述
I need get some data from "Board" Component but i dont know how. I tried Frame.Component.data but is doesn't work. Code:
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();;
}
});
}
推荐阅读
- python - Django中的口音问题
- xaml - XAML 中的 UWP 动画阴影
- ruby-on-rails - 单击引导下拉菜单时没有任何反应。怎么修?
- python - Python Pandas:使用条件从数据框中迭代提取列值
- swift - 为什么 didSet 不更改自定义 Struct 中的变量?
- javascript - 此 JavaScript 函数应在新的 Microsoft Edge 窗口中打开一个 URL。Edge 中的“Internet Explorer 模式”导致它在新选项卡中打开
- ruby-on-rails - 我想发布使用该方法获得的信息
- azure - Azure:将设备孪生报告值发送到 cosmos 数据库
- python-3.x - 所以我尝试制作一个递归函数,但它导致无限循环
- javascript - Express request.body 为空