我正在构建一个程序来绘制自 1900 年以来婴儿名字的流行度。我已经得到了图表部分,但我无法让图表随窗口调整大小。我使用以下代码向扩展 GCanvas 的类添加了一个组件侦听器:
import acm.graphics.*;
import java.awt.event.*;
import java.util.*;
import java.awt.*;
public class NameSurferGraph extends GCanvas
implements NameSurferConstants, ComponentListener {
private static final long serialVersionUID = 1L;
//Sets up the graph
public NameSurferGraph() {
addComponentListener(this);
nameList = new ArrayList<NameSurferEntry>();
}
//Adds an entry to the array of names being graphed
public void addEntry(NameSurferEntry entry) {
nameList.add(entry);
}
//Clears and then redraws the graph
public void update() {
removeAll();
drawBackground();
for (int i=0; i<nameList.size(); i++) {
drawLineForOneName(i);
}
}
//Draws the background lines and labels for the graph
private void drawBackground() {
String decade = "";
for (int i = 0; i<NDECADES; i++) {
double x = (APPLICATION_WIDTH/NDECADES)*i;
decade = new Integer(STARTING_DECADE+10*i).toString();
GLine line = new GLine(x,0,x,APPLICATION_HEIGHT);
GLine hLine = new GLine(0,GRAPH_MARGIN_SIZE,APPLICATION_WIDTH-APPLICATION_WIDTH/NDECADES,GRAPH_MARGIN_SIZE);
GLine hLine2 = new GLine(0,APPLICATION_HEIGHT-GRAPH_MARGIN_SIZE,APPLICATION_WIDTH-APPLICATION_WIDTH/NDECADES,APPLICATION_HEIGHT-GRAPH_MARGIN_SIZE);
GLabel label = new GLabel(decade);
label.setLocation(x+4,APPLICATION_HEIGHT);
add(line);
add(hLine);
add(hLine2);
add(label);
}
}
//More code draws the actual lines.
//ivars
private ArrayList<NameSurferEntry> nameList;
private GLine line;
//Implementation of the ComponentListener interface
public void componentHidden(ComponentEvent e) { }
public void componentMoved(ComponentEvent e) { }
public void componentResized(ComponentEvent e) { update(); }
public void componentShown(ComponentEvent e) { }
}
}
}
但是当我从另一个类调用它的方法时,什么也没有发生。
import acm.program.*;
import java.awt.event.*;
import javax.swing.*;
public class NameSurfer extends Program implements NameSurferConstants {
private static final long serialVersionUID = 1L;
private NameSurferDataBase database;
private String name;
private NameSurferEntry entry = new NameSurferEntry(name);
//Initializes the program
public void init() {
putInteractors();
database = new NameSurferDataBase(NAMES_DATA_FILE);
}
//Adds the interactors
public void putInteractors() {
JButton clear = new JButton("Clear");
JButton clickGraph = new JButton("Graph");
JLabel nameLabel = new JLabel("Name");
add(graph);
add(nameLabel,SOUTH);
add(textfield,SOUTH);
add(clickGraph,SOUTH);
add(clear,SOUTH);
addActionListeners();
textfield.addActionListener(this);
getMouseListeners();
}
//Other code gets user input
//Graphs the name
public void graphName(String name) {
entry = database.findEntry(name);
graph.addEntry(entry);
graph.update();
}
//ivars
private JTextField textfield = new JTextField(20);
public NameSurferGraph graph = new NameSurferGraph();
}
关于我可能做错了什么的任何想法?