有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

框架上使用java绘制时的swing问题

我正在使用以下调用从主类创建另一个类的对象:

JSplash splash = new JSplash();

但是,当我创建这个对象时,它会执行JSplash类的构造函数,并给出我的窗口和按钮。但它不会在框架上作画。你能帮我做这件事吗

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

/**
 *
 * @author Curtis
 */
public class JSplash extends DFrame implements ActionListener {
//declaration of variable objects
    Font myFont = new Font("Arial", Font.BOLD, 20);
    JButton myButton = new JButton("Click Me!");
    Color bgColor = new Color(0, 0, 255);
    Color firstColor = new Color(255, 255, 255);
    String first = "Welcome to DaemoDynamics!";
    String last = "Click the Button";
    String middle = "";
    String middle2 = "";
    private static int count = 1;
    DFrame splash = new DFrame();
//Constructor
    public JSplash() {
        setDefaultLookAndFeelDecorated(true);
        System.out.println("Hello");
        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
        splash.add(myButton);
        getContentPane().setBackground(bgColor);
        //adds action listener
        myButton.addActionListener(this);
        splash.setVisible(true);
    }
//Paint method
    @Override
    public void paint(Graphics e) {
        System.out.println("paint is being reached");
        super.paint(e);
        e.setFont(myFont);
        e.setColor(firstColor);
        e.drawString(first, 14, 80);
        e.drawString(last, 70, 240);
        e.drawString(middle, 75, 150);
        e.drawString(middle2, 60, 175);
    }

//Listener Method
    @Override
    public void actionPerformed(ActionEvent e) {
        //First Time button hit
        if (count == 1) {
            middle = "Brighter Business";
            middle2 = "for A Brighter Future";
            last = "Click Again to Begin";
            repaint();
            //increases button count
            count++;
        } else//if button count is not 1
        {
            splash.setVisible(false);
            FinalProject app = new FinalProject();
        }
    }
}

共 (2) 个答案

  1. # 1 楼答案

    创建一个扩展JPanel的新类。确保将按钮添加到该面板,并用逻辑覆盖该面板的paintComponent()方法。这应该行得通

    Refer here.

    自定义绘制应在paintComponent方法中完成。理想情况下,不应重写JFrame的绘制方法

  2. # 2 楼答案

    您已经在JSplash构造函数中创建了一个新的DFrame,然后将组件添加到其中。这根本不是必需的。删除对splash的引用,只需使用扩展的DFrame。当我在看的时候,splash没有布局管理器,这是没有帮助的。永远不会调用paint方法,因为屏幕上显示的窗口永远不是JSplash,而是您创建的DFrame(称为splash)