Java 我怎样才能使这个自定义按钮工作?

Java 我怎样才能使这个自定义按钮工作?,java,swing,jbutton,Java,Swing,Jbutton,我看了这么多线索,但没有一条对我有帮助。 这是我的密码: package myProjects; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.geom.*; import javax.swing.JButton; import javax.swing.

我看了这么多线索,但没有一条对我有帮助。 这是我的密码:

package myProjects;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.*;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class LukeButton extends JButton{
public static void main(String[] args){
    JFrame frame = new JFrame();
    frame.setTitle("Luke");
    frame.setSize(300, 300);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    LukeButton lb = new LukeButton("Text");
    lb.addActionListener(e->{
        System.out.println("Clicked");
    });

    frame.setVisible(true);
}
public LukeButton(String text){

}
public void paint(Graphics g){
    Graphics2D g2 = (Graphics2D)g;

    Shape rec = new Rectangle2D.Float(10, 10, 60, 80);

    g2.setColor(Color.BLACK);
    g2.setStroke(new BasicStroke(2));
    g2.draw(rec);
    g2.setColor(Color.BLUE);
    g2.fill(rec);
    }
}

应该在那里的长方形不是。我不知道在扩展JButton时是否不允许这样做,但如果不允许,我不知道如何修复它。有人有解决方案吗?

一个主要问题:您没有将LukeButton实例添加到GUI中。解决方案:通过容器的
add(lb)
方法添加它

public static void main(String[] args) {
    LukeButton lb = new LukeButton("Text");
    JPanel panel = new JPanel();
    panel.add(lb);

    JFrame frame = new JFrame();
    frame.add(panel);
其他问题:

  • 您应该替代paintComponent方法,而不是paint方法
  • 在覆盖中调用super的paintComponent方法
  • 覆盖组件的getPreferredSize
  • 不要忽略传递到构造函数参数中的字符串。您可能希望将其传递到super的构造函数中
  • 您最好不要使用继承来做任何您想做的事情,也就是说,不要扩展JButton。如果你能给我们更详细的整体问题,我们可以提供帮助

    • 一个主要问题:您没有将LukeButton实例添加到GUI中。解决方案:通过容器的
      add(lb)
      方法添加它

      public static void main(String[] args) {
          LukeButton lb = new LukeButton("Text");
          JPanel panel = new JPanel();
          panel.add(lb);
      
          JFrame frame = new JFrame();
          frame.add(panel);
      
      其他问题:

      • 您应该替代paintComponent方法,而不是paint方法
      • 在覆盖中调用super的paintComponent方法
      • 覆盖组件的getPreferredSize
      • 不要忽略传递到构造函数参数中的字符串。您可能希望将其传递到super的构造函数中
      • 您最好不要使用继承来做任何您想做的事情,也就是说,不要扩展JButton。如果你能给我们更详细的整体问题,我们可以提供帮助

        • 一个主要问题:您没有将LukeButton实例添加到GUI中。解决方案:通过容器的
          add(lb)
          方法添加它

          public static void main(String[] args) {
              LukeButton lb = new LukeButton("Text");
              JPanel panel = new JPanel();
              panel.add(lb);
          
              JFrame frame = new JFrame();
              frame.add(panel);
          
          其他问题:

          • 您应该替代paintComponent方法,而不是paint方法
          • 在覆盖中调用super的paintComponent方法
          • 覆盖组件的getPreferredSize
          • 不要忽略传递到构造函数参数中的字符串。您可能希望将其传递到super的构造函数中
          • 您最好不要使用继承来做任何您想做的事情,也就是说,不要扩展JButton。如果你能给我们更详细的整体问题,我们可以提供帮助

            • 一个主要问题:您没有将LukeButton实例添加到GUI中。解决方案:通过容器的
              add(lb)
              方法添加它

              public static void main(String[] args) {
                  LukeButton lb = new LukeButton("Text");
                  JPanel panel = new JPanel();
                  panel.add(lb);
              
                  JFrame frame = new JFrame();
                  frame.add(panel);
              
              其他问题:

              • 您应该替代paintComponent方法,而不是paint方法
              • 在覆盖中调用super的paintComponent方法
              • 覆盖组件的getPreferredSize
              • 不要忽略传递到构造函数参数中的字符串。您可能希望将其传递到super的构造函数中
              • 您最好不要使用继承来做任何您想做的事情,也就是说,不要扩展JButton。如果你能给我们更详细的整体问题,我们可以提供帮助

              谢谢,它现在可以工作了,我真不敢相信它竟然从我身边消失了!对于构造器中的参数,我本来打算用它来表示按钮上的文本,但现在还没有这样做:)再次感谢。我阅读了你的编辑,我的目标是有一个按钮(我现在有一个按钮很好),我可以用它来代替无聊的JButton。但我真的不知道如何解决这个问题。谢谢,它现在起作用了,我真不敢相信它竟然从我身边消失了!对于构造器中的参数,我本来打算用它来表示按钮上的文本,但现在还没有这样做:)再次感谢。我阅读了你的编辑,我的目标是有一个按钮(我现在有一个按钮很好),我可以用它来代替无聊的JButton。但我真的不知道如何解决这个问题。谢谢,它现在起作用了,我真不敢相信它竟然从我身边消失了!对于构造器中的参数,我本来打算用它来表示按钮上的文本,但现在还没有这样做:)再次感谢。我阅读了你的编辑,我的目标是有一个按钮(我现在有一个按钮很好),我可以用它来代替无聊的JButton。但我真的不知道如何解决这个问题。谢谢,它现在起作用了,我真不敢相信它竟然从我身边消失了!对于构造器中的参数,我本来打算用它来表示按钮上的文本,但现在还没有这样做:)再次感谢。我阅读了你的编辑,我的目标是有一个按钮(我现在有一个按钮很好),我可以用它来代替无聊的JButton。但我真的不知道如何解决这个问题。