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();
}
關於我可能做錯什麼的想法?
APPLICATION_WIDTH和APPLICATION_HEIGHT是否改變了任何地方?全部大寫的名字意味着固定值給我(沒有看到實際的定義)。 – Attila 2012-04-16 01:39:01
不,它們是固定的 - 它們是問題的一部分。 – 2012-04-16 02:14:40
既然你正在計算所有基於這些值的東西,我不會被驚異,如果這是什麼阻止你正確處理調整大小 – Attila 2012-04-16 02:17:26