を得ることができない私は、グラフの一部を得て1900年以来、赤ちゃんの名前の人気をグラフ化するプログラムを構築するんだけど、グラフがでリサイズすることができません窓。私は、次のコードでGCanvasを拡張するクラスにコンポーネントリスナーを追加しました:ウィンドウでサイズを変更するグラフ(Java)の
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();
}
私が間違っていると思われることについてのアイデアはありますか?
適切にサイズ変更を扱うからあなたを防ぐ何であればAPPLICATION_WIDTHとAPPLICATION_HEIGHTはどこにでも変更されて驚いすることはないでしょうか?すべての大文字の名前は私に固定値を意味します(実際の定義は見ません)。 – Attila
いいえ、修正されました。問題の一部として与えられました。 –
これらの値に基づいてすべてを計算しているので、それがあなたのサイズ変更を正しく処理できない原因であれば、私は驚くことはありません。 – Attila