【问题标题】:Java Package - To create a button and import one when neededJava 包 - 创建一个按钮并在需要时导入一个
【发布时间】:2011-02-06 09:09:49
【问题描述】:

这更像是一个包/导入测试。我们将从位于 .../javaf/test.java 的基本文件夹开始

我的目标是创建子类别并创建一个带有按钮的类,我可以在需要按钮时将其导入 test.java。我觉得我做对了,我知道按钮现在没有做任何事情,但我只想让整个事情工作并在之后扩展代码。所以这里 - 这是test.java

import paket.*;  // importing classes from subcategory paket!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;


public class test {

    public test() {
        JFrame myFrame;
        JPanel myPanel;
        myFrame = new JFrame("Hello FramWorld");
        myPanel = new JPanel();

        // Here I want to add the object created in paket/myButts.java
        // The problem is how to make these two lines work.
        myButts myButton = new myButts();
        myPanel.add(myButton);


        myFrame.setVisible(true);
        myFrame.getContentPane().add(myPanel, BorderLayout.CENTER);
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.pack(); 
    }

    public static void main(String args[]) {
        new test();
    }
}

这是我的 .../javaf/paket/myButts.java

package paket; // Here is the package function (ought to work like a link)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

// This class should only create a button.

public class myButts {  
    public myButts() {
        JButton myButt = new JButton();
    }
}

我已经编译了 myButts.java,没有任何错误。但是后来我编译了 test.java,它给了我以下错误:

test.java:19: 找不到符号 符号:方法添加(paket.myButts) 位置:类 javax.swing.JPanel myPanel.add(myButton);

感谢阅读, Z

【问题讨论】:

    标签: java import package jbutton


    【解决方案1】:

    错误是:

    test.java:19: cannot find symbol symbol : method add(paket.myButts) location: class javax.swing.JPanel myPanel.add(myButton);
    

    这意味着 JPanel 类没有采用 paket.myButts 参数的方法 add。让我们看看JPanel documentation,看看它有哪些add 方法。 从 Container 继承的 add 方法有 5 个,从 Component 继承的方法有 1 个。 This method 和大多数一样,要求您传递一个 Component 对象。这需要您传递一个 PopupMenu 对象。

    因此,您的 paket.myButts 对象似乎不是 Component 或 PopupMenu,而是必须如此。让您的 myButts 扩展组件可能很诱人。所以看看Component documentation,看看你会得到什么。请注意,已经提供了几个子类:

    按钮、画布、复选框、选择、容器、标签、列表、滚动条、文本组件

    既然您实际上想要一个按钮,您可能会猜到 myButts 扩展 Button 是有意义的。这会起作用,你会得到一个awt.Button。但是,如果您进一步探索,Container 的一些子类是 swing 类,包括 JButton。我会推荐使用这些摇摆课程。

    一旦你这样做了,你的构造函数应该采用这种形式:

    public class myButts extends JButton {  
      public myButts() {
        super();
        // here put any myButts-specific construction code, such as:
        setText("Press me!");
      }
    }
    

    对于使用swing组件的更一般的介绍,我强烈推荐优秀的swing tutorial

    【讨论】:

      【解决方案2】:

      我想你想要:

      public class myButts extends JButton {  
      
      }
      

      如果您想将您的类的实例直接添加到 Swing 控件,它必须扩展 Swing 或 AWT 类型(在本例中为 JButton)。

      之前,您只是在构造函数中创建了一个本地 JButton,它在其他任何地方都未使用且无法访问。

      请注意,最好尝试关注Java style guide,尤其是naming conventions。建议使用大小写混合的类,例如我的按钮。

      【讨论】:

      • 谢谢你,伙计!太容易了,我为此沮丧了一整天!所以,每当我想使用摇摆控件进行打包/导入时,我必须告诉它扩展?
      • 是的,如果你想让你的班级成为一个挥杆控制,那就是这样做的方式。
      • 明白!我一定会通过该指南,谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2016-06-09
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多