如何从JFrame Component Java获取数据?

时间:2018-07-20 14:54:29

标签: java swing jframe

我需要从“板”组件中获取一些数据,但我不知道如何。我尝试了Frame.Component.data,但无法正常工作。 代码:

fragment

1 个答案:

答案 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();;
            }
        });
    }