
色を指定するチェックボックスがあり,表示ボタンで指定された色の混色を表示するプログラムです.
このプログラムに,Enterキーの入力に表示ボタンを押したのと同じ効果をもたせたいのですが,どうすればいいでしょうか.
また,requestFocusInWindow()をどこに挿入すればうまくいくのでしょうか.
***************************************************************
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Q1 extends Applet implements ActionListener {
// チェックボックス3つとボタン1つ
Checkbox cbx1, cbx2, cbx3;
int red = -1, green, blue;
Button btn;
public void init() {
cbx1 = new Checkbox("Red");
cbx2 = new Checkbox("Green");
cbx3 = new Checkbox("Blue");
add(cbx1);
add(cbx2);
add(cbx3);
btn = new Button("Paint");
btn.addActionListener(this);
add(btn);
addKeyListener(new KeyAdapter() {
public void KeyPressed(KeyEvent ke) {
if (ke.getKeyCode() != KeyEvent.VK_ENTER) return;
SetColor();
repaint();
}
});
}
// ボタンを押したとき
public void actionPerformed(ActionEvent e) {
SetColor();
repaint();
}
// 色の設定
public void CheckColor() {
if (cbx1.getState()) red = 255;else red = 0;
if (cbx2.getState()) green = 255;else green = 0;
if (cbx3.getState()) blue = 255;else blue = 0;
}
// 色付き長方形の表示
public void paint(Graphics g) {
if (red != -1) {
g.setColor(new Color(red, green, blue));
g.fillRect(10, 50, getSize().width - 20, getSize().height - 40);
}
}
}
*******************************************************************

No.2ベストアンサー
- 回答日時:
質問者様の元のコードがアプレットですので同じアプレットで
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Q2 extends Applet implements ActionListener, FocusListener {
// チェックボックス3つとボタン1つ
Checkbox cbx1, cbx2, cbx3;
int red = -1, green, blue;
Button btn;
public void init() {
FocusWindow(this);
}
public void focusGained(FocusEvent e) {
// アプレットにフォーカスを与える。
this.requestFocusInWindow();
}
public void focusLost(FocusEvent e) {}
public void FocusWindow(FocusListener listener) {
this.addFocusListener(listener);
cbx1 = new Checkbox("Red");
cbx1.addFocusListener(listener);
cbx2 = new Checkbox("Green");
cbx2.addFocusListener(listener);
cbx3 = new Checkbox("Blue");
cbx3.addFocusListener(listener);
add(cbx1);
add(cbx2);
add(cbx3);
btn = new Button("Paint");
btn.addActionListener(this);
btn.addFocusListener(listener);
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent ke) {
if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
CheckColor();
repaint();
System.out.println("repaint");
}else{
char a=ke.getKeyChar();
System.out.println(a);
};
}
});
add(btn);
}
// ボタンを押したとき
public void actionPerformed(ActionEvent e) {
CheckColor();
repaint();
}
// 色の設定
public void CheckColor() {
if (cbx1.getState()) red = 255;else red = 0;
if (cbx2.getState()) green = 255;else green = 0;
if (cbx3.getState()) blue = 255;else blue = 0;
}
// 色付き長方形の表示
public void paint(Graphics g) {
if (red != -1) {
g.setColor(new Color(red, green, blue));
g.fillRect(10, 50, getSize().width - 20, getSize().height - 40);
}
}
}
No.1
- 回答日時:
まず、awt ではなく、拡張版の swing を使いましょう。
swing の方が機能が充実しています。
以下が私が書き直したものです。
import javax.swing.JFrame;
// JFrame はアプリケーションの土台です
// この上に JPanelを追加しましょう
// 紙芝居でイメージすると
// JFrame = 外枠 JPanel = 中の紙となります
public class MainFrame extends JFrame{
private DisplayPanel display;
public MainFrame(){
setSize(408,234);
// ×を押したとき、正常にプログラムを終了するための処理
setDefaultCloseOperation(EXIT_ON_CLOSE);
// レイアウトを null に設定
setLayout(null);
display = new DisplayPanel();
display.setLocation(0,0);
add(display);
}
public static void main(String[] args) {
// MainFrame を可視状態にします
new MainFrame().setVisible(true);
}
}
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
// 色を表示するパネルです
public class DisplayPanel extends JPanel{
private ColorSetPanel colorSet;
private int red;
private int green;
private int brue;
public DisplayPanel(){
setSize(400,200);
setLayout(null);
// ColorSetPanel で DisplayPanel のインスタンスを
// 使うために displayPanel 自身を渡しています
colorSet = new ColorSetPanel(this);
colorSet.setLocation(0,0);
add(colorSet);
}
// swing のペイントメソッドです
// ダブルバッファ(ちらつき防止)が標準仕様です
public void paintComponent(Graphics g){
// このパネルだけに描画するため
super.paintComponent(g);
g.setColor(new Color(red,green,brue));
g.fillRect(0,50,getWidth(),getHeight()-50);
}
// SetColorPanel から色を変更するためのメソッド
public void setRed(int red){this.red=red;}
public void setGreen(int green){this.green=green;}
public void setBrue(int brue){this.brue=brue;}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
// 色を設定するためのパネル
public class ColorSetPanel extends JPanel implements ChangeListener,ActionListener{
// チェックボックスのラベルの文字
// 万が一にも内容が変わってはいけないので定数にしました
private final String[] LABEL = {"red","green","brue"};
// 配列のすることで記述の行数を減らすことができます
private JCheckBox[] check;
private JButton button;
private DisplayPanel display;
// コンストラクタはインスタンス生成時(一番最初)に
// 呼ばれるメソッドです
// ここで DisplayPanel クラスのインスタンスを受け取ります
public ColorSetPanel(DisplayPanel display){
this.display = display;
setSize(400,50);
setLayout(null);
check = new JCheckBox[3];
for(int i=0;i<check.length;i++){
check[i] = new JCheckBox(LABEL[i]);
// ChangeEvent はコンポーネント(部品)の
// 内容が変わったら処理が呼ばれます
check[i].addChangeListener(this);
check[i].setBounds(i*100+10,10,80,30);
add(check[i]);
}
button = new JButton("Paint");
button.addActionListener(this);
// button にキーリスナーを登録
button.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
keyPress(e);
}
});
button.setBounds(310,10,80,30);
add(button);
}
public void stateChanged(ChangeEvent e){
if(check[0].isSelected())display.setRed(255);
else display.setRed(0);
if(check[1].isSelected())display.setGreen(255);
else display.setGreen(0);
if(check[2].isSelected())display.setBrue(255);
else display.setBrue(0);
// チェックボックスが押されたら
// フォーカスをボタンへ
button.requestFocusInWindow();
}
public void actionPerformed(ActionEvent e){
display.repaint();
}
private void keyPress(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_ENTER){
display.repaint();
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TextAreaでの文字の色
-
Enterキーでボタンを押すにはど...
-
ボタンクリック後パネルを再描...
-
JPanelの切り替えと再描画
-
Buttonを押すと画像が表示され...
-
キーボードから入力された全角...
-
JFrameとJPanelの最大化について
-
【Swing】JPanel クラス外から...
-
JPanelの重ね方/OverlayLayout他
-
整数を好きなだけ入力し、個数...
-
ArrayListの使い方について(初...
-
エラーで式の開始が不正ですと...
-
java junit list同士の比較方法
-
TABキーの検出
-
JSPやサーブレットでSystem.out...
-
オブジェクトの中のプロパティ...
-
ORA-01858: 数値を指定する箇所...
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
yyyymmddからyyyy/mm/d...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java junit list同士の比較方法
-
JPanelの重ね方/OverlayLayout他
-
JPanelの切り替えと再描画
-
setPrefferedSizeとsetSize
-
Buttonを押すと画像が表示され...
-
Enterキーでボタンを押すにはど...
-
KeyListenerの使い方について
-
【Swing】JPanel クラス外から...
-
TextAreaでの文字の色
-
JDialogを閉じた時の処理
-
javaで文字数制限するには?
-
Java-Swing TextAreaにスクロー...
-
4択クイズでのランダム出題の...
-
エラーで式の開始が不正ですと...
-
ボタンがマウスオーバーしない...
-
JFrameとJPanelの最大化について
-
あるコンボボックスを選択する...
-
JButton-背景の透明化
-
メインウィンドウ中にサブウィ...
-
JavaでのSwingを使った簡易電卓...
おすすめ情報