最初にテキストフィールド、名前提出ボタン、送信ボタン、目、鼻、口のチェックボックスを含むフレームを含めます。ボタンをクリックすると、送信された名前を顔の下に表示して、顔を表示します。目と鼻だけがチェックされている場合は、それぞれのサイズを設定し、それらの機能を表すコンポーネントを描画します。JCheckBoxを選択した後にイベントを作成し、グラフィックフレームをGUIフレームに出力します。
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.FlowLayout;
import javax.swing.JCheckBox; import javax.swing.JTextArea;
import javax.swing.JTextField; import java.awt.Color;
import java.awt.Graphics; import java.awt.SystemColor;
import javax.swing.JButton; import javax.swing.SwingConstants;
import java.awt.Font; import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JLabel;import javax.swing.JSplitPane;
import java.awt.Canvas;
import java.awt.GridLayout;import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.BoxLayout;
public class FACE extends JFrame {
private JFrame frame;
private JTextField textField;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FACE window = new FACE();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}});
}
public FACE() {
initialize();
}
//Initialize the contents of the frame & set layout, meets requirement 5.5,
//Use layout managers to arrange user-interface components in a container
//Requirement 5.2 Add buttons, text fields, and other components to a frame window
private void initialize() {
FaceGraphic component = new FaceGraphic(rootPaneCheckingEnabled, rootPaneCheckingEnabled, rootPaneCheckingEnabled);
frame = new JFrame();
frame.setTitle("Face O Matic");
frame.setBounds(100, 100, 352, 310);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextArea txtrName = new JTextArea();
txtrName.setBounds(69, 5, 51, 26);
txtrName.setFont(new Font("Comic Sans MS", Font.PLAIN, 15));
txtrName.setEditable(false);
txtrName.setBackground(SystemColor.control);
txtrName.setText("Name :");
JLabel label = new JLabel("");
label.setBounds(125, 18, 0, 0);
textField = new JTextField();
textField.setBounds(130, 8, 126, 20);
textField.setColumns(15);
JLabel lblPlease = new JLabel("Please choose from the following to create a face!");
lblPlease.setBounds(5, 36, 305, 19);
lblPlease.setFont(new Font("Comic Sans MS", Font.PLAIN, 13));
// create check boxes
JCheckBox chckbxEyes = new JCheckBox("Eyes");
chckbxEyes.setBounds(17, 76, 51, 27);
chckbxEyes.setFont(new Font("Comic Sans MS", Font.PLAIN, 12));
chckbxEyes.setSelected(false);
JCheckBox chckbxNose = new JCheckBox("Nose");
chckbxNose.setBounds(69, 76, 53, 27);
chckbxNose.setFont(new Font("Comic Sans MS", Font.PLAIN, 12));
chckbxNose.setSelected(false);
JCheckBox chckbxMouth = new JCheckBox("Mouth");
chckbxMouth.setBounds(130, 76, 59, 27);
chckbxMouth.setFont(new Font("Comic Sans MS", Font.PLAIN, 12));
chckbxMouth.setSelected(false);
// label that states "Nice face" and than name once user hits submit
JLabel lblNiceFace = new JLabel("Nice face");
lblNiceFace.setFont(new Font("Comic Sans MS", Font.PLAIN, 13));
lblNiceFace.setBounds(177, 240, 133, 20);
frame.getContentPane().add(lblNiceFace);
JButton btnSubmit = new JButton("Submit");
btnSubmit.setBounds(220, 75, 90, 27);
btnSubmit.addActionListener(new ActionListener() {
// Handle events that are generated by buttons, meets
// Requirement 5.3
public void actionPerformed(ActionEvent event) {
// print name to niceFace label from textField once user inputs and hits submit
String name = textField.getText();
lblNiceFace.setText("Nice face " + name + "!");
}
});
//add button, labels, check boxes, etc.. to contentPane
btnSubmit.setFont(new Font("Comic Sans MS", Font.PLAIN, 13));
frame.getContentPane().setLayout(null);
frame.getContentPane().add(txtrName);
frame.getContentPane().add(textField);
frame.getContentPane().add(lblPlease);
frame.getContentPane().add(chckbxEyes);
frame.getContentPane().add(chckbxNose);
frame.getContentPane().add(chckbxMouth);
frame.getContentPane().add(btnSubmit);
frame.getContentPane().add(component);
}
}
こんにちは、私は、GUIにかなり新しいですし、これは私がこれまで持っているものです。私が問題を抱えているのは、自分のチェックボックスにイベントリスナーを接続して作成することができることです。そして、一旦私が提示したヒットを送信すると、そこにはスマイリーフェイスが作成されます。これは私が顔のグラフィックスクラスのために持っているものです。私は10月27日の時点で、私のものを頭に関係なくの画像を描画するためにボタンを提出し、どちらかの目、鼻、口、またはすべてなど
アップデートを得ることについてに行くにはどうすればよい
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class FaceGraphic extends JPanel {
private boolean hasEyes;
private boolean hasNose;
private boolean hasMouth;
public FaceGraphic(boolean hasEyes, boolean hasNose, boolean hasMouth) {
setParameters(hasEyes, hasNose, hasMouth);
}
public void setParameters(boolean hasEyes, boolean hasNose, boolean hasMouth) {
this.hasEyes = hasEyes;
this.hasNose = hasNose;
this.hasMouth = hasMouth;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.yellow);
g.fillOval(100, 100, 100, 100); // head
g.setColor(Color.black);
if (hasEyes) {
g.fillOval(120, 125, 20, 20); // left eye
g.fillOval(160, 125, 20, 20); // right eye
}
if (hasNose)
g.drawLine(150, 165, 150, 150); // nose
if (hasMouth)
g.drawArc(120, 130, 60, 60, 0, -180); // mouth
}
}
あなたが顔を描きたいとき/ 16
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CheckBoxDemo extends JPanel
implements ItemListener {
JCheckBox eyes;
JCheckBox nose;
JCheckBox mouth;
StringBuffer choices;
private JTextField textField;
public CheckBoxDemo() {
choices = new StringBuffer("cght");
setLayout(null);
nose = new JCheckBox("Nose");
nose.setBounds(92, 57, 69, 23);
add(nose);
//nose.setMnemonic(KeyEvent.VK_G);
nose.setSelected(false);
nose.addItemListener(this);
mouth = new JCheckBox("Mouth");
mouth.setBounds(186, 57, 69, 23);
add(mouth);
//mouth.setMnemonic(KeyEvent.VK_H);
mouth.setSelected(false);
mouth.addItemListener(this);
//Create the check boxes.
eyes = new JCheckBox("Eyes");
eyes.setBounds(6, 57, 69, 23);
add(eyes);
//eyes.setMnemonic(KeyEvent.VK_C);
eyes.setSelected(false);
eyes.addItemListener(this);
JLabel lblNewLabel = new JLabel("Please choose from the following to create a face!");
lblNewLabel.setBounds(6, 11, 312, 14);
add(lblNewLabel);
JLabel lblPleaseEnterYour = new JLabel("Please enter your name: ");
lblPleaseEnterYour.setBounds(6, 36, 155, 14);
add(lblPleaseEnterYour);
textField = new JTextField();
textField.setBounds(153, 30, 100, 20);
add(textField);
textField.setColumns(10);
JLabel lblNiceFace = new JLabel("");
lblNiceFace.setFont(new Font("Tahoma", Font.PLAIN, 13));
lblNiceFace.setBounds(153, 240, 133, 20);
add(lblNiceFace);
JButton btnSubmit = new JButton("Submit");
btnSubmit.setBounds(28, 240, 89, 23);
btnSubmit.addActionListener(new ActionListener() {
// Handle events that are generated by buttons, meets
// Requirement 5.3
public void actionPerformed(ActionEvent event) {
// print name to niceFace label from textField once user inputs and hits submit
String name = textField.getText();
lblNiceFace.setText("Nice face " + name + "!");
}});
add(btnSubmit);
}
/** Listens to the check boxes. */
public void itemStateChanged(ItemEvent e) {
int index = 0;
char c = '-';
Object source = e.getItemSelectable();
if (source == eyes) {
index = 0;
c = 'c';
} else if (source == nose) {
index = 1;
c = 'g';
} else if (source == mouth) {
index = 2;
c = 'h';
}
//Now that we know which button was pushed, find out
//whether it was selected or not.
if (e.getStateChange() == ItemEvent.DESELECTED) {
c = '-';
}
//Apply the change to the string.
choices.setCharAt(index, c);
repaint();
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.yellow);
g.fillOval(100, 100, 100, 100); // head
g.setColor(Color.black);
if (eyes.isSelected()) {
g.fillOval(120, 125, 20, 20); // left eye
g.fillOval(160, 125, 20, 20); // right eye
}
if (nose.isSelected())
g.drawLine(150, 165, 150, 150); // nose
if (mouth.isSelected())
g.drawArc(120, 130, 60, 60, 0, -180); // mouth
}
public static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("FaceOMatic");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension (350, 325));
//Create and set up the content pane.
JComponent newContentPane = new CheckBoxDemo();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
さて、私はそれが私がやるべきことだと思った。私のグラフィックコンポーネントを保持する別のクラスを作成します。私はまた、私のチェックボックスがクリックされ、ユーザーがボタンを送信した後にそれらを印刷する方法を混乱させています。また、私はコンソールに印刷名の入力を取り除き、「Nice face」と書いてラベルに印刷したいと思っています。 – Ksmith65
更新;私は自分のフレームの下にあるラベルの場所に名前を印刷することができました。だから私の唯一の問題は、自分のユーザー名と共にチェックボックスの "送信"ボタンを聞くために私の別のクラスを取得することです。 – Ksmith65
アプリケーションで 'FaceGraphic'クラスのインスタンスを作成し、それをコンテンツペインに追加できるようになりました。ユーザーがsubmitボタンを押すと、 'faceGraphic'インスタンスのすべてのパラメータを変更することができます(チェックボックスの名前と"選択された "値を渡して)、それを再描画するように指示します。上記のクラスの例として 'setParameters'メソッドを追加しました。 –