0

次の呼び出しを使用して、メインクラスから別のクラスのオブジェクトを作成しています。

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();
        }
    }
}
4

2 に答える 2

1

コンストラクターDFrame内にNEW を作成してから、コンポーネントを IT に追加しました。JSplashこれは必須ではありません。スプラッシュへの参照を削除し、DFrame拡張した を使用するだけです。そして、私が見ている間、スプラッシュにはレイアウトマネージャーがありません。これは役に立ちません。画面に表示されるウィンドウはJSplashではなく、DFrame作成した (スプラッシュと呼ばれる)であるため、ペイント メソッドが呼び出されることはありません。

于 2012-07-23T07:37:03.933 に答える
0

JPanel を拡張する新しいクラスを作成します。ボタンがそのパネルに追加されていることを確認し、そのパネルの paintComponent() メソッドをロジックでオーバーライドします。これはうまくいくはずです。

ここを参照してください。

カスタム ペイントは、paintComponent メソッドで行う必要があります。理想的には、JFrame のペイント メソッドをオーバーライドしないでください。

于 2012-07-23T06:30:42.340 に答える