Java Can';t从其他类中的键/动作侦听器更新我的主JFrame
说到Java编程,我是个新手。希望你能给我一个答案,这个答案可以很容易地实现。我正在写一个代码来记录两个人在一起花了多少钱 我使用一个文本文件作为数据库,并且我已经正确地读取了该文件 我有一个主JFrame,我在其中添加了一个包含两个JPanel的JTabbedPane。JPanel是用我在两个单独的类中编写的两个独立的方法创建的。一个面板有两个jtextfiled,用户可以在其中写入购买后花费的金额。另一个JPanel显示历史记录,并有一个重置按钮,用于删除文本文件中的所有数据 我在JTextFields中添加了一个KeyListener,在JButton中添加了一个ActionListener。每个侦听器都是在单独的类中编写的 除了重新粉刷主框架外,一切正常。现在,我需要重新打开程序以查看更改。我希望能够在侦听器中重新绘制主JFrame,但我无法使其工作 这是主框架:Java Can';t从其他类中的键/动作侦听器更新我的主JFrame,java,Java,说到Java编程,我是个新手。希望你能给我一个答案,这个答案可以很容易地实现。我正在写一个代码来记录两个人在一起花了多少钱 我使用一个文本文件作为数据库,并且我已经正确地读取了该文件 我有一个主JFrame,我在其中添加了一个包含两个JPanel的JTabbedPane。JPanel是用我在两个单独的类中编写的两个独立的方法创建的。一个面板有两个jtextfiled,用户可以在其中写入购买后花费的金额。另一个JPanel显示历史记录,并有一个重置按钮,用于删除文本文件中的所有数据 我在JText
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?
}
}
);
}