JButton侦听器未触发,为什么? [英] Jbutton listener isn't triggered, why?

查看:108
本文介绍了JButton侦听器未触发,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在尝试对该功能进行编码之前,我试图使我的基本GUI正常工作并设置导航.基本上,我有一个可以使用的登录表单,当用户正确输入登录详细信息时,它会打开我的菜单页面.我有一个AddProperty页面,我想在单击Jbutton时打开(应打开该新页面,并关闭菜单页面).我一直在使用 Head First Java 书来尝试完成此任务.

I'm trying to get my basic GUI working and my navigation set up before attempting the coding for the functionality. Basically I have a login form that work and opens my menu page when the user correctly enters the login details. I have an AddProperty page I wish to open when the click on the Jbutton (this new page should open and the menu page closed). I have been using the Head First Java book to try and complete this task.

当我单击Jbutton时,什么也没有发生.当我还是一个初学者并试图使自己熟悉代码时,可能与代码的结构有关.感谢您的光临!

When I click on the Jbutton, nothing happens. It might be something to do with the structure of my code as I am a beginner and just trying to familiarize myself with the code. Thanks for looking!

这是菜单页面(NavigationMenu.java):

/*
 * NavigationMenu.java
 *
 * Created on 18 May 2011, 12:56
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package Login;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
 *
 * @author Graeme Pearson
 */
public class NavigationMenu {

    /** Creates a new instance of NavigationMenu */
    public void NavigationMenu() 
    {
        JFrame menu = new JFrame("menuframe");
        menu.setVisible(true);
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        menu.setSize(180,240);
        menu.add(panel);

        menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton AddProperty = new JButton("Add A Property");
        panel.add(AddProperty);

        //AddProperty gui = new AddProperty();
                   //gui.AddProperty();

        JButton CreateNewAccount = new JButton("Create New Account");
        panel.add(CreateNewAccount);
        JButton SearchProperty = new JButton("Search Property");
        panel.add(SearchProperty);
        JButton ViewPropertyDetails = new JButton("View Property");
        panel.add(ViewPropertyDetails);
        JButton Logout = new JButton("Logout");
        panel.add(Logout);

    }     
        public void actionPerformed(ActionEvent e)

        { 

        if (e.getActionCommand().equals("Add A Property")) 

                { 
                   AddProperty gui = new AddProperty();
                   gui.AddProperty();
                }
        //the user pressed "Add A Property"; do something
}
}

这是AddProperty.java的内容:

/**
 *
 * @author Graeme
 */
package Login;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.EmptyBorder;

public class AddProperty
{

    public void AddProperty()
    {

        JFrame frame = new JFrame("AddPropertyFrame");
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // having to set sizes of components is rare, and often a sign    
        // of problems with layouts.
        //frame.setSize(800,600);
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 20,20));
        // make it big like the original
        panel.setBorder(new EmptyBorder(100,20,100,20));
        frame.add(panel);
        //panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));

        JLabel HouseNumber = new JLabel("A");
        panel.add(HouseNumber);
        JTextField HouseNumber1 = new JTextField(10);
        panel.add(HouseNumber1);

        JLabel HousePrice = new JLabel("B");
        panel.add(HousePrice);
        JTextField HousePrice1 = new JTextField(10);
        panel.add(HousePrice1);

        JLabel HouseType = new JLabel("C");
        panel.add(HouseType);
        JTextField HouseType1 = new JTextField(5);
        panel.add(HouseType1);

        JButton submit = new JButton("Submit");
        panel.add(submit);
        submit.addActionListener(new Action());

        // tell the GUI to assume its natural (minimum) size.
        frame.pack();
    }

    static class Action implements ActionListener{

        @Override
        public void actionPerformed (ActionEvent e)
        {
            // this should probably be a modal JDialog or JOptionPane.
            JFrame frame2 = new JFrame("Submitted");
            frame2.setVisible(true);
            frame2.setSize(200,200);
            JLabel label = new JLabel("You Have Submitted a New Property");
            JPanel panel = new JPanel();
            frame2.add(panel);
            panel.add(label);
        }
    }
}

推荐答案

首先,您的NavigationMenu菜单的构造器定义错误.

firstly, your constuctor for NavigationMenu menu is wrongly defined.

它不应该返回void.构造函数不返回值

it should not be returning void. constructors do not return values

public NavigationMenu()
{
etc...
}

与AddProperty类相同

same with AddProperty class

现在看看其余的. :)

looking at the rest now. :)

要修复其余的问题,您需要为按钮分配一个动作监听器

to fix the rest you need to assign an action listener to the button

AddProperty.addActionListener(this);

和NavigationMenu必须实现ActionListener接口.即

and the NavigationMenu must implement the ActionListener inteface. i.e.

public class NavigationMenu 
implements ActionListener

这篇关于JButton侦听器未触发,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆