2012-04-16 87 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 2012-04-16 01:39:01

+0

不,它們是固定的 - 它們是問題的一部分。 – 2012-04-16 02:14:40

+0

既然你正在計算所有基於這些值的東西,我不會被驚異,如果這是什麼阻止你正確處理調整大小 – Attila 2012-04-16 02:17:26

回答

0

APPLICATION_WIDTHAPPLICATION_HEIGHT是否改變了?全部大寫的名字意味着固定值給我(沒有看到實際的定義)。既然你正在計算基於這些值的一切,如果這是什麼阻止你正確處理調整大小,我不會感到驚訝

+0

這應該是一條評論,但這是一個很好的問題。 – fireshadow52 2012-04-16 01:32:14