2016-10-21 4 views
0

最初にテキストフィールド、名前提出ボタン、送信ボタン、目、鼻、口のチェックボックスを含むフレームを含めます。ボタンをクリックすると、送信された名前を顔の下に表示して、顔を表示します。目と鼻だけがチェックされている場合は、それぞれのサイズを設定し、それらの機能を表すコンポーネントを描画します。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(); 
     } 
    }); 
} 

}

答えて

2

、あなたが名前を必要とし、目、鼻および/または口を描画するかどうか。これらのパラメータで構築できるFaceGraphic用の別のクラスを作成します。 drawStringメソッドを使用すると、グラフィックに名前を追加できます。例えば

import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.JPanel; 

public class FaceGraphic extends JPanel { 
    private String name; 
    private boolean hasEyes; 
    private boolean hasNose; 
    private boolean hasMouth; 

    public FaceGraphic(String name, boolean hasEyes, boolean hasNose, boolean hasMouth) { 
     setParameters(name, hasEyes, hasNose, hasMouth); 
    } 

    public void setParameters(String name, boolean hasEyes, boolean hasNose, boolean hasMouth) { 
     this.name = name; 
     this.hasEyes = hasEyes; 
     this.hasNose = hasNose; 
     this.hasMouth = hasMouth; 
    } 

    @Override 
    protected void paintComponent(Graphics graphics) { 
     super.paintComponent(graphics); 

     graphics.setColor(Color.yellow); 

     // head 
     graphics.fillOval(100, 100, 100, 100); 

     graphics.setColor(Color.black); 

     // name 
     graphics.drawString(name, 150, 50); 

     if (hasEyes) { 
      // left eye 
      graphics.fillOval(120, 125, 20, 20); 
      // right eye 
      graphics.fillOval(160, 125, 20, 20); 
     } 

     if (hasNose) 
      // nose 
      graphics.drawLine(150, 165, 150, 150); 

     if (hasMouth) 
      // mouth 
      graphics.drawArc(120, 130, 60, 60, 0, -180); 
    } 
} 

編集:あなたが送信ボタンのイベントハンドラでsetParametersメソッドへの呼び出しを追加することができsetParameters

を呼び出す例:

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 + "!"); 

     component.setParameters(name, chckbxEyes.isSelected(), 
            chckbxNose.isSelected(), chckbxMouth.isSelected()); 
     component.repaint(); 
    } 
}); 
+0

さて、私はそれが私がやるべきことだと思った。私のグラフィックコンポーネントを保持する別のクラスを作成します。私はまた、私のチェックボックスがクリックされ、ユーザーがボタンを送信した後にそれらを印刷する方法を混乱させています。また、私はコンソールに印刷名の入力を取り除き、「Nice face」と書いてラベルに印刷したいと思っています。 – Ksmith65

+0

更新;私は自分のフレームの下にあるラベルの場所に名前を印刷することができました。だから私の唯一の問題は、自分のユーザー名と共にチェックボックスの "送信"ボタンを聞くために私の別のクラスを取得することです。 – Ksmith65

+0

アプリケーションで 'FaceGraphic'クラスのインスタンスを作成し、それをコンテンツペインに追加できるようになりました。ユーザーがsubmitボタンを押すと、 'faceGraphic'インスタンスのすべてのパラメータを変更することができます(チェックボックスの名前と"選択された "値を渡して)、それを再描画するように指示します。上記のクラスの例として 'setParameters'メソッドを追加しました。 –

関連する問題