2

シンプルなポモドーロタイマーを使用していますが、サウンド/スピーカーがないので、指定した色で画面を空白にしてから、別の色で数回切り替えることで、タイマーの終了を通知したいと思います。まるでモニターを左折車の信号にしたかのように。そのようにモニターを制御するにはどうすればよいですか?このためのwin32コードはありますか?

私はJavaに精通しており、c#やC++にはあまり精通していません。

ここに画像の説明を入力してください

4

1 に答える 1

7

画面全体を制御する動機が何なのかわかりません。おそらく、システムトレイに通知を表示するのがより適切でしょう。

JFrameとにかく、Javaを使用すると、フルスクリーンモードでポップアップすることができます。タイマーを数回使用して背景を変更してから閉じます。これは、似たようなものをデモする簡単な例です。

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.Timer;

class FullScreenFrame extends JFrame{
    private static final int MAX_COUNT = 3;
    private static final int PERIOD = 1000;
    private JPanel panel;
    private int count;

    public FullScreenFrame(){
        super();

        setUndecorated(true);

        getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false), "ESCAPE");
        getRootPane().getActionMap().put("ESCAPE", new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });

        panel = new JPanel();
        panel.setBackground(Color.GREEN);
        add(panel);

        new Timer(PERIOD, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (count < MAX_COUNT) {
                    if (count % 2 == 0){
                        panel.setBackground(Color.BLACK);           
                    } else {
                        panel.setBackground(Color.GREEN);
                    }
                    count++;

                } else {
                    ((Timer) e.getSource()).stop();
                    dispose();
                }
            }

        }).start();
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                FullScreenFrame frame = new FullScreenFrame();
                frame.setBounds(GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration().getBounds());
                frame.setAlwaysOnTop(true);
                frame.setVisible(true);
            }
        });
    }
}
于 2012-04-21T04:48:28.403 に答える