【发布时间】:2015-04-01 16:13:56
【问题描述】:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CirclePanel extends JPanel {
private JTextField xField, yField, diameterField;
private JButton Redraw;
private JLabel xLabel, yLabel, rLabel;
Circle myCircle = new Circle (150, 150, 30, Color.red, Color.white);
Graphics g;
//Paint objects on panel
public void paintComponent (Graphics page) {
super.paintComponent(page);
g = page;
myCircle.draw(g);
}
public CirclePanel(){
xLabel = new JLabel("X= ");
yLabel = new JLabel("Y= ");
rLabel = new JLabel("R= ");
xField = new JTextField(5);
xField.addActionListener(new TempListener());
yField = new JTextField(5);
yField.addActionListener(new TempListener());
diameterField = new JTextField(5);
diameterField.addActionListener(new TempListener());
Redraw = new JButton("Redraw!");
Redraw.addActionListener(new ButtonListener());
add(xLabel);
add(xField);
add(yLabel);
add(yField);
add(rLabel);
add(diameterField);
add(Redraw);
setPreferredSize(new Dimension(500, 500));
setBackground(Color.white);
}
private class ButtonListener implements ActionListener{
public void actionPerformed (ActionEvent event) {
//Update page
myCircle.draw(g);
//repaint panel
repaint();
}
private class TempListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
int x, y, newbase, newhei;
String text = xField.getText();
String text2 = yField.getText();
x = Integer.parseInt (text);
y = Integer.parseInt (text2);
myCircle.draw(g);
repaint();
}
}
}
}
大家好,我正在尝试制作绘制一个圆圈并使用 JTextField 中的新值重新绘制它的 Java 应用程序。我为它写了三堂课。其中之一是包含访问器、修改器、构造器。其中一个类当然有 main 方法,上面是一个类。但 TempListener 不工作。你能帮帮我吗?
【问题讨论】:
-
请解释您的问题,就好像我们不知道您要做什么一样。你说“TempListener 不工作”但它应该做什么?您似乎在假设我们已经阅读了您的整个作业并且可以读心。我们不能。
-
不要在课堂上使用图形字段。仅使用 paintComponent 内部的本地 Graphics 对象。换句话说,去掉你的
g变量,你的TempListener ActionListener 不应该调用g 的任何方法,甚至不应该看到一个Graphics 对象。它应该只改变变量状态并调用重绘。阅读图形教程以了解更多信息。 Lesson: Performing Custom Painting.