[英]Drawing A String onto a JPanel
我有点麻烦。 我正在尝试从绘画方法(图形g)绘制一个字符串(toString()),我相信有两个主要问题:
1)调用“重新绘制”时,它似乎没有响应。
2)当我尝试从obj调用时。 在构造函数中进行的操作,我收到一个“ Applet”未初始化的错误。
这可能是一个入门错误,但真的很感谢任何帮助。.这是我第一次在此网站上发布。
这是我所讨论的applet的代码:
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.util.*;
import java.lang.*;
/**
*
*
*/
public class GradeBookApp extends JApplet
implements ActionListener
{
private JRadioButton jrbadd,jrbdel,jrbupdate,jrbsortgrade,jrbsortname;
private JPanel select,drawselect,infocore;
private JButton operate;
private JLabel nameprint;
private int numstu;
private Student[] list; // Not set in init..
public void init(){
JPanel select = new JPanel();
select.setLayout(new GridLayout(2,3));
JPanel drawselect = new JPanel();
drawselect.setBackground(Color.pink);
JPanel infocore = new JPanel();
infocore.setBackground(Color.red);
jrbadd = new JRadioButton("Add Student ");
select.add(jrbadd);
jrbdel = new JRadioButton("Delete Student ");
select.add(jrbdel);
jrbupdate = new JRadioButton("Update Student ");
select.add(jrbupdate);
jrbsortgrade = new JRadioButton("Sort: Grade");
select.add(jrbsortgrade);
jrbsortname = new JRadioButton("Sort: Name");
select.add(jrbsortname);
operate = new JButton("Start... ");
operate.addActionListener(this);
operate.setBackground(Color.magenta);
select.add(operate);
ButtonGroup gr = new ButtonGroup();
gr.add(jrbadd);
gr.add(jrbdel);
gr.add(jrbupdate);
gr.add(jrbsortgrade);
gr.add(jrbsortname);
Container c= getContentPane();
c.add(select,BorderLayout.NORTH);
c.add(drawselect,BorderLayout.CENTER);
c.add(infocore,BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e){
if(operate.isSelected()){
repaint();
}
}
public void StudentList(){
list = new Student[30];
numstu = 9;
list[0] = new Student("Moba Fett",77.5,'M',1981);
list[1] = new Student("Marion Silver",45.3,'F',2000);
list[2] = new Student("Tom Highlander",99.1,'M',1986);
list[3] = new Student("Ross Scott",74.2,'M',1971);
list[4] = new Student("Jon Smith",53.1,'M',1945);
list[5] = new Student("Jade Cerion",100.0,'F',2007);
list[6] = new Student("Jorge Bush",0,'M',2008);
list[7] = new Student("Tom Fulp",89.2,'M',1981);
list[8] = new Student("Rose DimWitt",0.2,'F',1912);
list[9] = new Student("Arya Stark",91.9,'F',8763);
}
public void delete(){
}
public void update(){
}
public void add(){
}
public void sortgrade(){
}
public void sortname(){
}
public void paint (Graphics g){
super.paint(g);
int i = 0; // local
int x = 100; // local
int y = 100; // local
// numstu called from private list...9
for(i=0;i<=numstu;i++){
if(list[i].GetGPA()>65){
g.setColor(Color.green);
g.drawString(list[i].toStr(),x,y);
}
else if(list[i].GetGPA()<65){
g.setColor(Color.red);
g.drawString(list[i].toStr(),x,y);
}
y=y+10;
}
}
}
这是构造函数:
public class Student
{
private String name;
private double gpa;
private char gender;
private int year;
public Student(){
name = "John Doe";
gpa = 100;
gender = 'u';
year = 1972;
}
public Student(String n,double gp,char g,int y){
name=n;
gpa=gp;
gender=g;
year=y;
}
public String GetName(){
return name;
}
public double GetGPA(){
return gpa;
}
public char GetGender(){
return gender;
}
public int GetYear(){
return year;
}
public void ChangeName(String n){
name = n;
}
public void ChangeGpa(double gp){
gpa = gp;
}
public void ChangeGender(char g){
gender = g;
}
public void ChangeYear(int y){
year = y;
}
public String toStr(){
String f = name.substring(0,name.indexOf(" "));
String l = name.substring(name.indexOf(" "), name.length());
String n =(l+","+f+" "+gender+" "+year+" "+gpa);
return n;
}
private int find(int amountofstudents,Student[] list){
return 1337; // unf.
}
}
这里有几个问题:
永远不会初始化学生列表,因为您永远不会调用方法StudentList()
。 例如,您可以在init()
方法中调用它。 顺便说一句, initStudentList()
将是一个更好的名称。
变量numstu
应该初始化为10,因为这里有10个学生(从索引0到9)
for循环应如下所示(我们从0循环到9): for(i=0;i<numstu;i++){
完成这些操作后,学生将正确显示在JPanel上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.