当前位置:  开发笔记 > 编程语言 > 正文

JButton不会打开JDialog

如何解决《JButton不会打开JDialog》经验,为你挑选了2个好方法。

我正在构建一个简单的程序.我有一个从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 附加到多个按钮时,您只需要这种类型的检查!



1> josivan..:

您需要在按钮中定义actionListener.

konec.addActionListener(al);


`pridejPacienta.addActionListener(人)`.您需要根据您的上下文理解并使用答案.josivan可以简单地说`mybutton.addActionListener(myActionListener)`.你应该明白该怎么做.

2> GhostCat say..:

仅仅定义ActionListener是不够的.

为了完成它的工作,必须注册该监听器一些实际上向该侦听器发送事件的组件.

所以你可以将它添加到相应的按钮,例如:

pridejPacienta.addActionListener(al);

另外:当你这样做,你就不会需要的是if (source ==你的行动侦听器内检查.你看,当每个按钮有一个独特的监听器时,就没有不同的源.

当您想要将相同的 ActionListener 附加到多个按钮时,您只需要这种类型的检查!

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有