.编写一个Java程序,用输入的半径画一个圆。为绘图定义尺寸为200x200的构件,并将其添加到框架中。然后在框架中添加一个面板,其中包含一个标签、一个文本字段和一个按钮。单击该按钮后,在自定义组件的中心绘制一个粉红色的圆圈。如果半径超过100,或者输入半径无法转换为double,则显示消息对话框。
时间: 2024-03-06 20:51:36 浏览: 163
好的,以下是一个实现这个功能的示例代码:
```java
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class DrawCircle extends JFrame {
private static final long serialVersionUID = 1L;
private CirclePanel circlePanel;
private JTextField radiusField;
public DrawCircle() {
super("Draw Circle");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
circlePanel = new CirclePanel();
circlePanel.setPreferredSize(new Dimension(200, 200));
add(circlePanel, BorderLayout.CENTER);
JPanel controlPanel = new JPanel();
JLabel radiusLabel = new JLabel("Radius:");
radiusField = new JTextField(10);
JButton drawButton = new JButton("Draw");
drawButton.addActionListener(e -> {
String radiusText = radiusField.getText();
try {
double radius = Double.parseDouble(radiusText);
if (radius > 100) {
JOptionPane.showMessageDialog(DrawCircle.this, "Radius should be less than or equal to 100.");
} else {
circlePanel.setRadius(radius);
circlePanel.repaint();
}
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(DrawCircle.this, "Invalid radius value: " + radiusText);
}
});
controlPanel.add(radiusLabel);
controlPanel.add(radiusField);
controlPanel.add(drawButton);
add(controlPanel, BorderLayout.SOUTH);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private class CirclePanel extends JPanel {
private static final long serialVersionUID = 1L;
private double radius = 0;
public void setRadius(double radius) {
this.radius = radius;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int centerX = getWidth() / 2;
int centerY = getHeight() / 2;
int diameter = (int) (2 * radius);
if (diameter <= 0) {
return;
}
int x = centerX - diameter / 2;
int y = centerY - diameter / 2;
g.setColor(Color.PINK);
g.fillOval(x, y, diameter, diameter);
}
}
public static void main(String[] args) {
new DrawCircle();
}
}
```
这个程序创建了一个DrawCircle类,它继承自JFrame类。在DrawCircle类的构造方法中,我们创建了一个CirclePanel对象,它继承自JPanel类,并设置其首选大小为200x200,并将其添加到框架的中央。然后,我们创建了一个控制面板,包含一个标签、一个文本字段和一个按钮,用于输入和绘制圆的半径。在单击按钮时,我们从文本字段中获取半径值,并尝试将其转换为double类型。如果半径超过100,或者无法转换为double,则显示一个消息对话框。否则,我们设置CirclePanel对象的半径,并调用repaint方法重新绘制圆。
CirclePanel类覆盖了paintComponent方法,以绘制粉色的圆。在绘制过程中,我们根据组件的宽度和高度以及半径计算出圆的位置和直径,并使用Graphics对象的fillOval方法绘制圆。
运行程序后,您可以在文本字段中输入圆的半径,并单击绘制按钮绘制圆。如果半径超过100,或者输入无效,则会显示相应的消息对话框。
阅读全文