0

我正在构建一个程序来绘制自 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();

}

关于我可能做错了什么的任何想法?

4

1 回答 1

0

是否在任何地方APPLICATION_WIDTHAPPLICATION_HEIGHT发生了变化?全大写的名称对我来说意味着固定值(没有看到实际定义)。由于您是根据这些值计算所有内容,因此如果这是阻止您正确处理调整大小的原因,我不会感到惊讶

于 2012-04-16T01:24:05.703 回答