gpt4 book ai didi

java - JCheckBox,提交选择后创建一个事件并将图形打印到 GUI 框架

转载 作者:行者123 更新时间:2023-12-02 03:16:48 24 4
gpt4 key购买 nike

首先包含一个带有文本字段的框架,一个用于提交姓名的框架,一个提交按钮以及眼睛、 Nose 和嘴巴的复选框。单击该按钮时,显示您的脸部,包括脸部下方提交的姓名。如果仅检查眼睛和 Nose ,则设置每个的大小并绘制组件来表示这些特征。

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 还很陌生,这就是我到目前为止所拥有的。我遇到的问题是能够连接并创建一个事件监听器到我的复选框,一旦我点击提交,用于创建笑脸的图形就会出现在给定的坐标处;这就是我的面部图形类。

   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
}
}

我如何让我的提交按钮绘制图像,无论头部是什么,以及眼睛、 Nose 或嘴巴或全部等。

更新截至 2016 年 10 月 27 日

    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();
}
});
}

}

最佳答案

当你想画脸时,你需要名字以及是否画眼睛、 Nose 和/或嘴巴。我将为可以使用这些参数构造的 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();
}
});

关于java - JCheckBox,提交选择后创建一个事件并将图形打印到 GUI 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40183993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com