所以我创建了一个包含三个按钮的菜单,每个按钮都会打开另一个窗口。我将按钮添加到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 );
}
}
}
答案 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(不鼓励)。