Java:同一个类中有多个ActionListener?
我目前正在为我的软件工程课程模拟股票市场。我正在使用actionlistener为我当前的每个菜单项打开新窗口。然而,似乎每个类只能使用一个ActionListener,因此我只能为所有菜单选项设置一个窗口。有没有其他方法来实现多个动作侦听器?还有别的办法吗 这是我的密码:Java:同一个类中有多个ActionListener?,java,swing,actionlistener,Java,Swing,Actionlistener,我目前正在为我的软件工程课程模拟股票市场。我正在使用actionlistener为我当前的每个菜单项打开新窗口。然而,似乎每个类只能使用一个ActionListener,因此我只能为所有菜单选项设置一个窗口。有没有其他方法来实现多个动作侦听器?还有别的办法吗 这是我的密码: import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.Beve
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableModel;
public class GUIroughdraft implements Runnable, ActionListener
{
private JFrame frame;
private JMenuBar menuBar;
private JMenu FileMenu;
private JMenu ActionMenu;
private JMenu HelpMenu;
private JMenuItem SaveMenuItem;
private JMenuItem LoadMenuItem;
private JMenuItem ExitMenuItem;
private JMenuItem BuyMenuItem;
private JMenuItem SellMenuItem;
private JMenuItem AboutMenuItem;
private JMenuItem UserManualMenuItem;
public static void main(String[] args)
{
// needed on mac os x
System.setProperty("apple.laf.useScreenMenuBar", "true");
// the proper way to show a jframe (invokeLater)
SwingUtilities.invokeLater(new GUIroughdraft());
}
private JFrame frmBgszStockSimulator;
/**
* @wbp.nonvisual location=53,14
*/
//private final JLabel lblBgszStockSimulator = DefaultComponentFactory.getInstance().createTitle("BGSZ Stock Simulator");
private JTextField searchBar;
private JTable table;
/**
* Launch the application. Testing Comment
*/
/*
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
GUIroughdraft window = new GUIroughdraft();
window.frmBgszStockSimulator.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
});
}
*/
/**
* Create the application.
*/
/*
public GUIroughdraft()
{
run();
}
*/
/**
* Initialize the contents of the frame.
*/
public void run()
{
frmBgszStockSimulator = new JFrame("BGSZ Stock Simulator");
frmBgszStockSimulator.getContentPane().setBackground(Color.GRAY);
frmBgszStockSimulator.setTitle("BGSZ Stock Simulator");
frmBgszStockSimulator.setBounds(100, 100, 775, 510);
frmBgszStockSimulator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmBgszStockSimulator.setVisible(true);
//Builds menu bar
menuBar = new JMenuBar();
//Builds the File menu
FileMenu = new JMenu("File");
SaveMenuItem = new JMenuItem("Save");
LoadMenuItem = new JMenuItem("Load");
ExitMenuItem = new JMenuItem("Exit");
SaveMenuItem.addActionListener(this);
LoadMenuItem.addActionListener(this);
ExitMenuItem.addActionListener(this);
FileMenu.add(SaveMenuItem);
FileMenu.add(LoadMenuItem);
FileMenu.add(ExitMenuItem);
//Builds the Actions menu
ActionMenu = new JMenu("Actions");
BuyMenuItem = new JMenuItem("Buy");
SellMenuItem = new JMenuItem("Sell");
ActionMenu.add(BuyMenuItem);
ActionMenu.add(SellMenuItem);
//Builds the Help menu
HelpMenu = new JMenu("Help");
AboutMenuItem = new JMenuItem("About");
UserManualMenuItem = new JMenuItem("User Manual");
HelpMenu.add(AboutMenuItem);
HelpMenu.add(UserManualMenuItem);
menuBar.add(FileMenu);
menuBar.add(ActionMenu);
menuBar.add(HelpMenu);
frmBgszStockSimulator.setJMenuBar(menuBar);
JScrollBar scrollBar = new JScrollBar();
scrollBar.setBackground(Color.LIGHT_GRAY);
scrollBar.setBounds(323, 47, 21, 317);
frmBgszStockSimulator.getContentPane().add(scrollBar);
JTextArea displayBox = new JTextArea();
displayBox.setEditable(false);
displayBox.setLineWrap(true);
displayBox.setWrapStyleWord(true);
displayBox.setText("This will be a text field that displays all your actions and information about stocks, purchases, sales, errors, etc.");
//when the user clicks the search button that is not there anymore
//create a new instance of the getStockData class
//get the data from the input line something like String userInput = searchBar.getText()
//pass that to the getData(userInput);
//set the displayBox.setText(the return from getData());
displayBox.setBounds(12, 47, 312, 317);
frmBgszStockSimulator.getContentPane().add(displayBox);
searchBar = new JTextField();
searchBar.setText("Enter your text here");
searchBar.setBounds(12, 377, 733, 22);
frmBgszStockSimulator.getContentPane().add(searchBar);
searchBar.setColumns(10);
JProgressBar progressBar = new JProgressBar();
progressBar.setStringPainted(true);
progressBar.setValue(75);
progressBar.setBounds(78, 412, 586, 14);
frmBgszStockSimulator.getContentPane().add(progressBar);
table = new JTable();
table.setModel(new DefaultTableModel(
new Object[][] {
{"Stock Name", "Stock Value", "Amount Owned", "Total Value"},
{" BAC", "$13.48", "4", "$53.92"},
{" RIG", "$8.89", "0", "$0.00"},
{" SUNE", "$0.59", "12", "$7.08"},
{" FCX", "$10.29", "2", "$20.58"},
{" PBR", "$5.86", "0", "$0.00"},
{" GE", "$31.83", "0", "$0.00"},
{" VALE", "$4.24", "24", "$101.76"},
{" VRX", "$27.07", "0", "$0.00"},
{" PFE", "$30.07", "0", "$0.00"},
{" CRC", "$1.05", "8", "$8.40"},
{" GGB", "$1.82", "0", "$0.00"},
{" CHK", "$4.01", "6", "$24.06"},
{" T", "$39.37", "0", "$0.00"},
{" F", "$13.35", "5", "$66.75"},
{" WLL", "$7.66", "0", "$0.00"},
},
new String[] {
"New column", "New column", "New column", "New column"
}
));
table.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
table.setBounds(350, 51, 395, 313);
frmBgszStockSimulator.getContentPane().add(table);
JTextArea txtrValue = new JTextArea();
txtrValue.setText("Displays Cash Value");
txtrValue.setLineWrap(true);
txtrValue.setEditable(false);
txtrValue.setBounds(99, 12, 172, 22);
frmBgszStockSimulator.getContentPane().add(txtrValue);
JTextArea txtrCurrentPortfolioValue = new JTextArea();
txtrCurrentPortfolioValue.setText("Display Portfolio Value");
txtrCurrentPortfolioValue.setLineWrap(true);
txtrCurrentPortfolioValue.setEditable(false);
txtrCurrentPortfolioValue.setBounds(376, 12, 206, 22);
frmBgszStockSimulator.getContentPane().add(txtrCurrentPortfolioValue);
JLabel lblCashValue = new JLabel("Cash Value:");
lblCashValue.setBounds(24, 15, 111, 16);
frmBgszStockSimulator.getContentPane().add(lblCashValue);
JLabel lblPortfolioValue = new JLabel("Portfolio Value:");
lblPortfolioValue.setBounds(283, 15, 123, 16);
frmBgszStockSimulator.getContentPane().add(lblPortfolioValue);
}
public void actionPerformed(ActionEvent ev)
{
SaveDialog dialog = new SaveDialog();
dialog.setModal(true);
dialog.setVisible(true);
}
private class SaveDialog extends JDialog implements ActionListener
{
private JButton okButton = new JButton("Your File has been saved!");
private SaveDialog()
{
super(frame, "Save", true);
JPanel panel = new JPanel(new FlowLayout());
panel.add(okButton);
getContentPane().add(panel);
okButton.addActionListener(this);
setPreferredSize(new Dimension(250, 75));
pack();
setLocationRelativeTo(frame);
}
public void actionPerformed(ActionEvent ev)
{
setVisible(false);
}
}
public void actionPerformed2(ActionEvent ev)
{
LoadDialog dialog = new LoadDialog();
dialog.setModal(true);
dialog.setVisible(true);
}
private class LoadDialog extends JDialog implements ActionListener
{
private JButton LoadButton = new JButton("Your File has successfully loaded!");
private LoadDialog()
{
super(frame, "Load", true);
JPanel panel = new JPanel(new FlowLayout());
panel.add(LoadButton);
getContentPane().add(panel);
LoadButton.addActionListener(this);
setPreferredSize(new Dimension(250, 75));
pack();
setLocationRelativeTo(frame);
}
public void actionPerformed(ActionEvent ev)
{
setVisible(false);
}
}
}
您不需要实现ActionListener接口,而是创建匿名类,为任何JButton或其他对象提供所需的不同功能。示例如下所示:
myButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// do whatever you want in here
}
});
在GUI草稿类中,将此代码放在actionPerformed方法中
public void actionPerformed(ActionEvent ev)
{
if(ev.getActionCommand().equalsIgnoreCase("Save"){
SaveDialog dialog = new SaveDialog();
dialog.setModal(true);
dialog.setVisible(true);
}
else if(ev.getActionCommand().equalsIgnoreCase("Load")){
LoadDialog dialog = new LoadDialog();
dialog.setModal(true);
dialog.setVisible(true);
}
else if(ev.getActionCommand().equalsIgnoreCase("Exit")){
// Do whatever you like
}
}
而且根据编码标准,变量名应该以小写字母开头
私有JMenuItem SaveMenuItem---错
私有JMenuItem saveMenuItem---正确是的,您只需简单地执行<代码>comp.addActionListener(新ActionListener(){public void actionPerformed(ActionEvent e){//put code here and stuff}})代码>和用于替换多个窗口。您甚至可以使用
JDesktopPane
,有关更多信息,请参阅details@3kings如果我要做的是在动作侦听器中的JPane中创建窗口,该怎么办。我试过你说的去做,但没有成功。@AndrewThompson我修复了吊架的错误。我会试试看它是否有效,然后给你回复。谢谢你回答我的问题,非常感谢。对不起,我已经有一段时间没有用Java编写代码了。我会尝试一下,然后再给你回复。感谢您的帮助,我尝试使用您提供的代码,但是,即使单击菜单栏上的“加载”菜单项,我仍然会看到相同的“保存”对话框。我是如何在代码中定义某些内容的?是否可能是我的某个方法导致了此冲突?好的,在actionPerformed方法System.out.println(ev.getActionCommand())中添加这一行作为第一条语句;单击“保存”时应打印“保存”,单击“加载”时应打印“加载”。