私は現在 Java を勉強しており、スクリーン セーバー プログラムを作成しようとしています。最も重要なルールは、ループを使用しないことです。もう 1 つの重要な基準は、'x' を使用してプログラムを終了し、'z' を使用してフルスクリーンからハーフスクリーンに変更することです。私の最初の傾向は、setDefaultCloseOperation を keylistener と共に使用してプログラムを終了することでしたが、それを行う方法が見つかりませんでした。ループを使用せずにこれを行う方法を理解するのを手伝ってください。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ScreenSaver1 extends JPanel {
private JFrame frame = new JFrame("FullSize");
private Rectangle rectangle;
boolean full;
ScreenSaver1() {
// Remove the title bar, min, max, close stuff
frame.setUndecorated(true);
// Add a Key Listener to the frame
frame.addKeyListener(new KeyHandler());
// Add this panel object to the frame
frame.add(this);
// Get the dimensions of the screen
rectangle = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration().getBounds();
// Set the size of the frame to the size of the screen
frame.setSize(rectangle.width, rectangle.height);
frame.setVisible(true);
// Remember that we are currently at full size
full = true;
}
// This method will run when any key is pressed in the window
class KeyHandler extends KeyAdapter {
public void keyPressed(KeyEvent e) {
// Terminate the program.
System.exit(0);
}
}
public static void main(String[] args) {
ScreenSaver1 obj = new ScreenSaver1();
}
}
- このプログラムでは、いかなる種類のループも使用できません。
- メンバー変数は非公開にする必要があります。
- スクリーン セーバー クラスは JPanel クラスから継承する必要があり、JFrame メンバー変数が必要です。
- プログラムは、画面に描画する図形の数を追跡する必要があり、30 個の図形が描画されたら、画面をクリアする必要があります。これは、基本クラス (JPanel) の paintComponent メソッドを呼び出すことによって最も簡単に実行できます。
- Timer オブジェクトを使用して ActionEvents を生成し、スクリーン セーバーを駆動する必要があります。500 ミリ秒ごとに 1 回 ActionEvent を発生させるようにタイマーを設定します。これにより、actionPerformed メソッドが実行され、repaint メソッドが呼び出されるだけです。repaint メソッドを呼び出すと、paintComponent メソッドが実行されます。
- paintComponent メソッドは、パネルの境界内でランダムな色、ランダムな形状、ランダムな位置を選択し、その形状を描画し、描画された形状の数を数えるためのすべての作業を行います。
- 呼び出されるたびにランダムな色を返すプライベート メソッドを作成します。任意のランダムな色の値を指定できます。このメソッドは、以下で説明するように、paintComponent メソッドおよび KeyListener イベント ハンドラから呼び出されます。
- paintComponent メソッドでは、楕円、長方形、塗りつぶされた楕円、塗りつぶされた長方形、多角形、線などからランダムに選択した少なくとも 4 つの異なる形状を使用する必要があります。
- 描画する図形のサイズと位置は、画面のサイズによって異なります。描画された各形状の少なくとも一部が画面に表示されている必要があります。
- スクリーン セーバーを画面のフル サイズにします。
- フレームに KeyListener を追加します。KeyListener は KeyPressed イベントを処理する必要があります。
- 「x」キーが押されたときに、KeyListener は System.exit を呼び出す必要があります。
- 「z」キーが押されると、KeyListener はウィンドウのサイズを全画面サイズから半分のサイズ (画面の幅と高さの半分) に変更するか、半分のサイズから全画面サイズに戻す必要があります。つまり、「z」キーを押すたびに、表示のサイズがフル サイズとハーフ サイズの間で切り替わります。これには、フレームのサイズを変更し、再描画を呼び出す必要があります。ヒント: 背景を再描画するには、count を 0 に戻す必要があることに注意してください。
- 「r」キーが押されると、KeyListener はディスプレイの背景の色をランダムな色に変更する必要があります。これは、新しいランダム カラーを取得し、新しいランダム カラーでパネルの setBackground を呼び出す必要があることを意味します。その後、repaint も呼び出す必要があります。ヒント: 背景を再描画するには、count を 0 に戻す必要があることに注意してください。