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();
}
私が間違っているかもしれないことについてのアイデアはありますか?