我需要从“板”组件中获取一些数据,但我不知道如何。我尝试了Frame.Component.data,但无法正常工作。 代码:
fragment
答案 0 :(得分:0)
首先提供一个快速解答的小技巧:最小化代码以重现您的bug,使其更易于理解,特别是在您的真实目的是在注释中的情况下...然后使其可编译...
要回答您的问题:个人而言,我使用专用字段来直接链接到稍后要处理的对象,这有两个原因,首先是字段易于使用且不占用大量内存。其次,此解决方案将不取决于框架的组织方式。获得相同结果的另一种方法是该探针的第二个片段,即如果您更改框架组织,则必须修改您的监听器
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();;
}
});
}