Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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 跨面板的操作侦听器帮助_Java_Swing_Listener - Fatal编程技术网

Java 跨面板的操作侦听器帮助

Java 跨面板的操作侦听器帮助,java,swing,listener,Java,Swing,Listener,好的,这是我的问题。我正在编写一个程序,它将4个面板组合成一个,在西部有一个用户输入,在东部有一个总数,在北部有一个横幅。我的问题是如何实现一个动作侦听器来获取某人在西面板中键入的数字,从而自动显示在东面板中?代码对我来说有点长,我正在接近这一点,只是想把它完成。我必须将事件处理程序类放在用户信息面板中,还是将其全部放在总计面板中?我检查了其他问题,没有找到答案 import java.awt.*; import java.awt.event.ActionEvent; import java.a

好的,这是我的问题。我正在编写一个程序,它将4个面板组合成一个,在西部有一个用户输入,在东部有一个总数,在北部有一个横幅。我的问题是如何实现一个动作侦听器来获取某人在西面板中键入的数字,从而自动显示在东面板中?代码对我来说有点长,我正在接近这一点,只是想把它完成。我必须将事件处理程序类放在用户信息面板中,还是将其全部放在总计面板中?我检查了其他问题,没有找到答案

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
import javax.swing.*;
import javax.swing.border.TitledBorder;


/**
*
* User input panel 
* first panel
* has JTextFields for input of date for the hw/h, hours, and gallons
**/

public class UserInput extends JFrame implements ActionListener
{
    //variables/attributes
    private double kwh;
    private double hours;
    private double gallons;
    public double total;

    //JFrame componants
    private final  JTextField kwhField;
    private final  JTextField hoursField;
    private final  JTextField gallonsField;
    private final JLabel kwhLabel;
    private final JLabel hoursLabel;
    private final JLabel gallonsLabel;


    public UserInput()
    {
        // create the Grid
        setLayout (new GridLayout (3,2));

        //create the fields
        kwhField = new JTextField(15);
        hoursField = new JTextField(15);
        gallonsField = new JTextField(15);

        //create the labels
        kwhLabel = new JLabel ("Kw/H");
        hoursLabel = new JLabel ("Hours");
        gallonsLabel = new JLabel ("Gallons");

        //Add a border
        TitledBorder titled;
        titled = BorderFactory.createTitledBorder("User Input");

        //Add the tiles into the grid
        add(kwhField);
        add(kwhLabel);
        add(hoursField);
        add(hoursLabel);
        add(gallonsField);
        add(gallonsLabel);

        //add action listeners
        kwhLabel.addActionListener(this);
    }

    //The get method to retrieve the user inputs
    Scanner keyboard = new Scanner(System.in);



/**
 *
 * @return
 */
public double getKwh()
    {
        return kwh;
    }

/**
 *
 * @param k
 */
public void setKwh(double k)
    {
        kwh = k;
    }
    public void setHours (double h)
    {
        hours = h;
    }

    public double getHours ()
    {
        return hours;
    }

/**
 *
 * @param g
 */
public void getGallons(double g)
    {
        gallons = g;
    }

public double setGallons()
{
    return gallons;
}

//Now add action listeners??? we will try it


@Override
public void actionPerformed(ActionEvent ae) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of             
}

首先创建一个JLabel并将其添加到east面板中,以写入键入的文本。您可以将keylistener添加到文本字段中。重写键类型化方法并使用event.getKeyChar方法从事件中获取类型化键,然后将其写入JLabel

下面是来自的一些示例代码


希望这有帮助。

您应该在项目中添加一个keyListener。你可以阅读它们。通过输入另一部分来更新UI的一部分通常是通过observer模式完成的。这很好,但现在超出了我的能力范围。是否有其他方法键入用户字段并通过操作侦听器将信息镜像到总计字段?那么动作听者必须在一起吗?我能不能不用吸气剂?代码有一个set方法。也不确定问题的确切位置。对于一个你没有张贴代码。第二,你的描述并不能真正清楚地描述你在说什么。了解如何在不提供所有代码的地方编写一个全新的简单程序,复制您面临的问题。这将有助于我们更清楚地了解您到底想做什么对不起,我第一次来这里,是需要添加另一个问题,还是只需编辑此问题来添加代码?谢谢您的想法。难道我没有一个动作监听器可以自动从用户输入面板获取数据并将其放入总计面板吗?keylistener和focus的功能在我上面。如果你想要一个动作监听器,你可以在面板上添加一个按钮,然后将ActionListener添加到该按钮上。在文本字段中键入文本后。按下按钮,监听器的actionPerformed从textField获取值并将其写入JLabel。谢谢,但它需要自动执行。不使用计算按钮。只需使用KeyListener即可。。ActionListener不是这样工作的。
public class KeyEventDemo ...  implements KeyListener ... {
    ...//where initialization occurs:
        textField = new JTextField(20);
        textField.addKeyListener(this);


    ...
    /** Handle the key typed event from the text field. */
    public void keyTyped(KeyEvent e) {
        // HERE You will Write Your Code

    }

    /** Handle the key-pressed event from the text field. */
    public void keyPressed(KeyEvent e) {

    }

    /** Handle the key-released event from the text field. */
    public void keyReleased(KeyEvent e) {

    }
 }