Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t从其他类中的键/动作侦听器更新我的主JFrame_Java - Fatal编程技术网

Java Can';t从其他类中的键/动作侦听器更新我的主JFrame

Java Can';t从其他类中的键/动作侦听器更新我的主JFrame,java,Java,说到Java编程,我是个新手。希望你能给我一个答案,这个答案可以很容易地实现。我正在写一个代码来记录两个人在一起花了多少钱 我使用一个文本文件作为数据库,并且我已经正确地读取了该文件 我有一个主JFrame,我在其中添加了一个包含两个JPanel的JTabbedPane。JPanel是用我在两个单独的类中编写的两个独立的方法创建的。一个面板有两个jtextfiled,用户可以在其中写入购买后花费的金额。另一个JPanel显示历史记录,并有一个重置按钮,用于删除文本文件中的所有数据 我在JText

说到Java编程,我是个新手。希望你能给我一个答案,这个答案可以很容易地实现。我正在写一个代码来记录两个人在一起花了多少钱

我使用一个文本文件作为数据库,并且我已经正确地读取了该文件

我有一个主JFrame,我在其中添加了一个包含两个JPanel的JTabbedPane。JPanel是用我在两个单独的类中编写的两个独立的方法创建的。一个面板有两个jtextfiled,用户可以在其中写入购买后花费的金额。另一个JPanel显示历史记录,并有一个重置按钮,用于删除文本文件中的所有数据

我在JTextFields中添加了一个KeyListener,在JButton中添加了一个ActionListener。每个侦听器都是在单独的类中编写的

除了重新粉刷主框架外,一切正常。现在,我需要重新打开程序以查看更改。我希望能够在侦听器中重新绘制主JFrame,但我无法使其工作

这是主框架:

public class Frame extends JFrame {

static JTabbedPane tabs = new JTabbedPane();
static JFrame frame = new JFrame("Reimbursment Control");   

public Frame() throws FileNotFoundException {

    JPanel c = ControlTab.getControlTab();
    JPanel h = HistoryTab.getHistoryTab();

    JTabbedPane tabs = new JTabbedPane();
    tabs.addTab("Overview", c);
    tabs.addTab("History", h);

    frame.getContentPane().add(tabs);

    //...
这就是我如何将侦听器添加到JTextFields和JButton的方法:

ButtonClicked.addActionListener(button);
KeyPressed.addKeyListener(textfield);
这些类包含上面调用的侦听器方法:

public class ButtonClicked {

public static void addActionListener(JButton button) {

    button.addActionListener (new ActionListener() {

        public void actionPerformed(ActionEvent click) {

                    //Here's code that deletes all the data in the file
                    //and it should be displayed right away but I don't 
                    //know how to update the main JFrame from here?

        }
    }
    );
}


基本上,您需要某种模型,两个面板都可以与之交互

“控制”面板将使用新信息更新模型,“历史”面板将侦听模型的更改并相应地更新其视图

这是一个基本而复杂的问题


以您当前的示例为例。将侦听器附加到组件并收到更改通知。这是观察者模式的一个示例。

在哪个类中添加侦听器?不要在文本字段上使用
keysister
,请使用
ActionListener
。有些平台可能不使用[Enter]作为操作触发器,因为我有两个类,每个类都包含一个方法,用于创建我在JFrame中实现的JPanel。我就是在这些方法中添加侦听器的。
public class KeyPressed {

public static void addKeyListener(final JTextField textfield) {

    textfield.addKeyListener(new KeyAdapter() { 

        public void keyReleased(KeyEvent key) {

                    //When pressing enter the value written 
                    //in one of the JTextFields will be entered in 
                    //the file which works but how can the repainting
                    //of the main JFrame be implemented here?                       

        }
    }
    );
}