actionPerformed不工作

时间:2013-05-31 15:25:34

标签: java swing jbutton actionlistener

所以我创建了一个包含三个按钮的菜单,每个按钮都会打开另一个窗口。我将按钮添加到actionListnener,我检查了Source,我做了一切。但它仍然是一个虚拟按钮。

足够说话,我认为如果你们看到代码会更好。 提前谢谢!

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.border.EmptyBorder;

public class MainMenu extends JFrame
{
    private JPanel contentPane;
    private JButton decB;
    private JButton hexB;
    private JButton binB;
    private JLabel label1;

    public MainMenu()
    {
        setTitle("Hello Dear Friend");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 323, 303);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        setLocationRelativeTo( null );

        JButton decB = new JButton("Decimal");
        decB.setFont(new Font("Tahoma", Font.BOLD, 12));
        decB.setBounds(79, 85, 146, 42);
        decB.setBackground( new Color( 212, 208, 199 ) );
        decB.setFocusPainted( false );

        JButton hexB = new JButton("Hexadecimal");
        hexB.setFont(new Font("Tahoma", Font.BOLD, 12));
        hexB.setBounds(79, 138, 146, 42);
        hexB.setBackground( new Color( 212, 208, 199 ) );
        hexB.setFocusPainted( false );

        JButton binB = new JButton("Binary");
        binB.setFont(new Font("Tahoma", Font.BOLD, 12));
        binB.setBounds(79, 191, 146, 42);
        binB.setBackground( new Color( 212, 208, 199 ) );
        binB.setFocusPainted( false );

        JLabel label1 = new JLabel("Select the base you wish to convert: ");
        label1.setFont(new Font("Courier New", Font.BOLD, 12));
        label1.setBounds(20, 11, 277, 63);

        contentPane.add(decB);
        contentPane.add(binB);
        contentPane.add(hexB);
        contentPane.add(label1);

        ButtonHandler bh = new ButtonHandler();
        decB.addActionListener( bh );
        hexB.addActionListener( bh );
        binB.addActionListener( bh );
    }
    private class ButtonHandler implements ActionListener
    {
        DecMenu dm = new DecMenu();
        BinaryMenu bm = new BinaryMenu();
        HexMenu hm = new HexMenu();

        public void actionPerformed( ActionEvent event)
        {
            setVisible( false );

            if( event.getSource() == decB )
                dm.setVisible(true);

            else if( event.getSource() == hexB)
                hm.setVisible( true );

            else if( event.getSource() == binB )
                bm.setVisible( true );
        }
    }
}

2 个答案:

答案 0 :(得分:3)

使用:

event.getSource().equals(decB);

或替换:

JButton decB = new JButton("Decimal");

with:

this.decB = new JButton("Decimal");

等其他领域。


编辑:

Java中对象的==操作检查它们是否是相同的对象。您的局部变量会隐藏字段变量,以便在您调用

event.getSource() == decB

你正在有效地致电

event.getSource() == null

您可以在代码

中使用System.out.println(this.decB)进行检查

答案 1 :(得分:1)

这些菜单对象不会添加到任何地方。只有将组件添加到容器中时,组件才可见。

编辑:

@ medPhys-pl 注明(+1)时,全局按钮实际上与本地(在构造函数中)不同。这导致if测试永远不会通过。

在构造函数中删除“type prefix”(推荐,this不需要),或者使用equals(不鼓励)。