2012-04-16 5 views
0

を得ることができない私は、グラフの一部を得て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(); 

} 

私が間違っていると思われることについてのアイデアはありますか?

+0

適切にサイズ変更を扱うからあなたを防ぐ何であればAPPLICATION_WIDTHとAPPLICATION_HEIGHTはどこにでも変更されて驚いすることはないでしょうか?すべての大文字の名前は私に固定値を意味します(実際の定義は見ません)。 – Attila

+0

いいえ、修正されました。問題の一部として与えられました。 –

+0

これらの値に基づいてすべてを計算しているので、それがあなたのサイズ変更を正しく処理できない原因であれば、私は驚くことはありません。 – Attila

答えて

0

APPLICATION_WIDTHAPPLICATION_HEIGHTはどこにでも変わっていますか?すべての大文字の名前は私に固定値を意味します(実際の定義は見ません)。あなたはそれらの値に基づいて、すべてを計算しているので、私はそれが

+0

これは本当にコメントですが、それは良い質問です。 – fireshadow52

関連する問題