【问题标题】:How to call external method in Java Button (GUI)如何在 Java Button (GUI) 中调用外部方法
【发布时间】:2011-10-12 23:29:32
【问题描述】:

所以我有一段代码看起来像这样......

public IPGUI() {
        setTitle("IP Extractor");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 250, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.CENTER);
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        JButton btnConvertDocuments = new JButton("1. Convert Documents");
        btnConvertDocuments.setAlignmentX(Component.CENTER_ALIGNMENT);
        btnConvertDocuments.setMaximumSize(new Dimension(160, 0));
        btnConvertDocuments.setPreferredSize(new Dimension(0, 50));

        panel.add(btnConvertDocuments);
        btnConvertDocuments.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //FileConverter fc = new FileConverter();
                            //Why wont the above method work?
            }
        });

        JSeparator separator_3 = new JSeparator();
        panel.add(separator_3);

当我点击按钮时,这是产生的错误:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problems: 
    FileConverter cannot be resolved to a type
    FileConverter cannot be resolved to a type

    at IPGUI$2.actionPerformed(IPGUI.java:60)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

所以我实现了监听器和动作执行事件,但我不明白为什么我不能在另一个类中调用该方法?有人可以解释我哪里出错了吗?提前感谢您的任何意见。

【问题讨论】:

  • 为什么它不起作用?什么是确切的编译器错误?你 sn-p 应该可以工作,我没有 FileConverter,但我可以在内部 ActionListener 类中创建任何对象。也许您尝试访问不是最终的外部类的变量?
  • 我认为你编译的方式不对。什么/你是怎么做的?
  • 您能否详细说明“在另一个类中调用该方法”?什么电话?什么方法?什么课?

标签: java user-interface button methods actionlistener


【解决方案1】:

看来您正在使用 Java Swing。不要忘记在类签名的末尾添加“实现 ActionListener”。

试试这个:

public class IPGUI extends JFrame implements ActionListener {

...

public IPGUI() {
        setTitle("IP Extractor");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 250, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.CENTER);
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        JButton btnConvertDocuments = new JButton("1. Convert Documents");
        btnConvertDocuments.setAlignmentX(Component.CENTER_ALIGNMENT);
        btnConvertDocuments.setMaximumSize(new Dimension(160, 0));
        btnConvertDocuments.setPreferredSize(new Dimension(0, 50));

        panel.add(btnConvertDocuments);
        //btnConvertDocuments.addActionListener(new ActionListener() {
        //    public void actionPerformed(ActionEvent e) {
        //        //FileConverter fc = new FileConverter();
        //                    //Why wont the above method work?
        //    }
        //});

        btnConvertDocuments.setActionCommand("x");
        btnConvertDocuments.addActionListener(this);

        JSeparator separator_3 = new JSeparator();
        panel.add(separator_3);
}

public void actionPerformed(ActionEvent event) {
    String command = event.getActionCommand();
    if (command.equals("x")) {
        //FileConverter fc = new FileConverter();
    }
}
...

}

【讨论】:

  • 我确实做到了,但我仍然在“FileConverter fc = new FileConverter();”上遇到编译器错误
  • 您可以将该类粘贴到您的问题中吗?我想看看它长什么样。堆栈中最顶层的错误是什么?
  • 根据您遇到的错误,您可能没有引用 IPGUI 类顶部的库,或者您没有在项目中正确引用 *.jar 文件。所以它不知道该类在哪个库中。
  • 我不知道,我没有添加任何导入语句或任何东西。并且实现 actionlistner 应该只影响程序的运行时,而不是我得到的编译器错误。所以我不知道当我重新启动eclipse时它是如何突然开始工作的。
【解决方案2】:

您是否在开始时导入了其他类?

import FileConverter;

【讨论】:

  • 如果类在同一个项目中,我应该导入类吗?
  • 是的,如果你想在你的类中使用其他文件,你必须使用“import”关键字。如果它在同一个包中,您只需要使用: import CourClassName;否则你使用:mypackagename.anotherpackage.YourClass;
【解决方案3】:

检查文件开头是否有类似

 import bla.bla.FileConverter;

如果不需要,您需要添加它并确保 FileConverter 类实现在类通过。将一个 jar 广告添加到项目的类路径中,无论您使用什么 IDE

【讨论】:

  • 如果类在同一个项目中,我应该导入类吗?
  • 是的,除非它在同一个包中。根据经验,总是做导入。并确保在单独的 .java 文件中定义的所有类都应该是公共的,除非您真的知道自己在做什么。建议:使用一些 Java IDE 这不是必须的,但可以节省时间和精力。例如 Eclipse 有 Ctrl+Shift+O 可以导入清理和修复添加那些缺少的并且可以自动确定或询问您是否有多个选项等。非常方便。
【解决方案4】:

什么鬼? Eclipse 让我大吃一惊。我试图在这里遵循每个人的建议,但没有奏效。但是当我去重启 Eclipse 时……一切正常。

奇怪:/

感谢大家的意见,我真的很感激!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多