我正在构建一个简单的程序.我有一个从JDialog扩展的类和从JFrame扩展的类,它是应用程序的GUI.我实现了ActionListener,它应该在单击JButton后打开对话框.没有任何事情发生,我无法弄清楚为什么.
GUI
package nemocnice_sam; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.HeadlessException; import java.awt.ScrollPane; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; public class App extends JFrame { JTable tbl = new JTable(); JButton pridejPacienta = new JButton("P?idej pacienta"); JButton smazPacienta = new JButton("Smaž pacienta"); JButton export = new JButton("Export"); JButton konec = new JButton("Konec"); JPanel panel = new JPanel(); PacientDialog novyPacient; ActionListener al = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == pridejPacienta){ novyPacient = new PacientDialog(); novyPacient.setModal(true); novyPacient.setVisible(true); } } }; SeznamPacientu pacienti = new SeznamPacientu(); ModelPacientu model = new ModelPacientu(pacienti); public static void main(String[] args) { new App(); } public App() { setLayout(new BorderLayout()); panel.setLayout(new FlowLayout(FlowLayout.LEFT)); panel.add(pridejPacienta); panel.add(smazPacienta); panel.add(export); panel.add(konec); add(panel,BorderLayout.NORTH); tbl.setModel(model); add(new JScrollPane(tbl), BorderLayout.CENTER); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); pack(); } }
DIALOG CLASS
package nemocnice_sam; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JTextField; public class PacientDialog extends JDialog { JTextField jmeno = new JTextField(); JTextField prijmeni = new JTextField(); JTextField rc = new JTextField(); JTextField cp = new JTextField(); JButton ok = new JButton("OK"); public PacientDialog(){ setLayout(new GridLayout(5,2)); add(new JLabel("Jméno:")); add(jmeno); add(new JLabel("P?íjmení:")); add(prijmeni); add(new JLabel("R?:")); add(rc); add(new JLabel("?P:")); add(cp); pack(); } }
josivan.. 6
您需要在按钮中定义actionListener.
konec.addActionListener(al);
`pridejPacienta.addActionListener(人)`.您需要根据您的上下文理解并使用答案.josivan可以简单地说`mybutton.addActionListener(myActionListener)`.你应该明白该怎么做. (4认同)
GhostCat say.. 5
仅仅定义ActionListener是不够的.
为了完成它的工作,必须注册该监听器一些实际上向该侦听器发送事件的组件.
所以你可以将它添加到相应的按钮,例如:
pridejPacienta.addActionListener(al);
另外:当你这样做,你就不会需要的是if (source ==
你的行动侦听器内检查.你看,当每个按钮有一个独特的监听器时,就没有不同的源.
当您想要将相同的 ActionListener 附加到多个按钮时,您只需要这种类型的检查!
您需要在按钮中定义actionListener.
konec.addActionListener(al);
仅仅定义ActionListener是不够的.
为了完成它的工作,必须注册该监听器一些实际上向该侦听器发送事件的组件.
所以你可以将它添加到相应的按钮,例如:
pridejPacienta.addActionListener(al);
另外:当你这样做,你就不会需要的是if (source ==
你的行动侦听器内检查.你看,当每个按钮有一个独特的监听器时,就没有不同的源.
当您想要将相同的 ActionListener 附加到多个按钮时,您只需要这种类型的检查!