我们的编译原理实践作业,要求自动根据语法生成一棵语法树。我已经实现了,问题是要怎么才能在有限的画面上摆下一棵巨大的语法树。我采用了JScrollPane,并且设置了JPanel的setPreferredSize,的确扩大了画板空间,但是在我移动滚条时,出现的是按照边缘的像素不断延伸,而不是我想要的按照paintComponent()里面所设置的那样画。拜托各位大虾,这是什么原因啊??应该如何改正?
错误如下:
错误如下:
解决方案 »
- java 泛刑编程 作两个数比较
- 关于一个菜鸟的JavaSE学习
- 刚刚参加了腾讯创新大赛,老郁闷了
- 两个问题请教!
- 急问:本例子的链接问题,点击为什么没反映? (SCRIPT)
- Class.forName()报告java.lang.VerifyError,why?
- 在JBuilder9里面运行能得到applet画出来的图,但是相应的网页却只有title几个字,没有图,为什么???
- 初学者装EditPlus时遇到程序无法运行问题
- 请教,关于JRUN4连接池问题
- java中“/usr/local/site/mysql/bin/mysql -u root >dbname.txt”应该怎样写?
- 这是怎么回事?
- 像千千静听一样拖放排序
void drawBranch(GrammarAnalyzer.Node n,int level,Graphics g){
for (GrammarAnalyzer.Node child : n.siblingNodes) {
child.setNodeY(level*FLOOR);
g.drawString(child.sym.toString(), child.x, child.y+DOWN);
g.drawLine(n.x, n.y+SET_OFF+DOWN, child.x, child.y-SET_OFF+DOWN);
drawBranch(child,level+1, g);
}
}
public void paintComponent(Graphics g){
if (parser.grammarTree!=null) {
int level=0;
GrammarAnalyzer.Node root=parser.grammarTree.root;
g.drawString(root.sym.toString(), root.x, root.y+DOWN);
drawBranch(root,level+1, g);
//parser.grammarTree=null;
}
}
};
panel.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(final MouseEvent arg0) {
repaint();
}
});
panel.setPreferredSize(new Dimension(3000, 2000));
panel.revalidate();
//panel.setAutoscrolls(true);
//panel.setBorder(new TitledBorder(null, "Grammar Tree", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
panel.setBounds(341, 61, 3000, 2000);
getContentPane().add(panel);
final JScrollPane scrollPane = new JScrollPane();
//scrollPane.setPreferredSize(new Dimension(3000, 2000));
scrollPane.setBorder(new TitledBorder(null, "Grammar Tree", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.setViewportView(panel);
scrollPane.setBounds(357, 58, 589, 579);
getContentPane().add(scrollPane);