/* 我在网站上看到有人求一个投票记数程序,并用一个圆形显示三方得票数的大概比例,我
在图形显示上遇到了麻烦,就是程序不能刷新图形,比如按下green键,就会出现一个绿
色的圆圈,再按其他键,其他的扇形角度也不会增加,我调用repaint()方法,结果图形
闪一下就没了,书上也没这方面的例子。
另外,我想请教一下JAVA代码的书写规范,比如命名啊,代码的顺序啊,我觉得代码规范
一点,不管是自己还是别人都容易看懂一些,省了不少麻烦。
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test
{ public static void main(String[] arg)
{ JFrame f = new TFrame();
f.show();
}
}
class TFrame extends JFrame
{ public TFrame()
{ setTitle("Test");
setSize(400, 400);
addWindowListener(new WindowAdapter() // 我现在看的是《JAVA2 核心技术》这本书
{ public void windowClosing(WindowEvent e) // 书上的例子都有这段代码,不知现在
{ System.exit(0); } // 祯的关闭问题解决了没有?好象没有这段也可以正常关闭?
});
Container contentPane = getContentPane();
contentPane.add(new TPanel());
}
}
class TPanel extends JPanel
implements ActionListener
{ public TPanel()
{ gbtn = new JButton("green");
ybtn = new JButton("yellow");
rbtn = new JButton("red");
gtf = new JTextField("0", 3);
ytf = new JTextField( "0", 3);
rtf = new JTextField("0", 3);
add(gbtn);
add(ybtn);
add(rbtn);
add(gtf);
add(ytf);
add(rtf);
gtf.setEditable(false);
ytf.setEditable(false);
rtf.setEditable(false);
gbtn.addActionListener(this);
ybtn.addActionListener(this);
rbtn.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{ Object source = evt.getSource();// 这里也不太懂,为什么是evt.getSource()?这句我是照书抄的。
int g = Integer.parseInt(gtf.getText());
int y = Integer.parseInt(ytf.getText());
int r = Integer.parseInt(rtf.getText());
Graphics h = getGraphics();
if (source == gbtn)
{ ++g; gtf.setText("" + g); } // 计算各按钮点击次数。
else if (source == ybtn)
{ ++y; ytf.setText("" + y); }
else if (source == rbtn)
{ ++r; rtf.setText("" + r); }
int gAngle = 360 * g / (g + y + r); // 算出各扇形部分的角度。
int yAngle = 360 * y / (g + y + r);
int rAngle = 360 * r / (g + y + r);
h.setColor(Color.green); // 画出绿色扇形部分。
h.fillArc(100, 120, 200, 200, 0, gAngle);
h.setColor(Color.yellow); // 画出黄色扇型部分。
h.fillArc(100, 120, 200, 200, gAngle, yAngle);
h.setColor(Color.red); // 画出红色扇型部分。
h.fillArc(100, 120, 200, 200, gAngle + yAngle, rAngle);
h.dispose(); // 这句书上说不是在paintComponent()方法下画图一定要调用,我用了但不知道为什么。释放h的占用 内 存??
}
private JButton gbtn;
private JButton ybtn;
private JButton rbtn;
private JTextField gtf;
private JTextField ytf;
private JTextField rtf;
}
[此贴子已经被作者于2005-12-2 11:27:45编辑过]