要用java写applet程序,但是不想直接在页面里显示,所以做成了一个Frame,让它在页面里通过applet弹出作为java applet window.为了使用更强功能的界面元素,比如JSplitPane等,所以选用Swing来完成界面的设计。
主界面类MainFrame由以下三个部分(类)组成
1、主菜单 UIMenuBar.java
2、工具栏 UIToolBar.java 在主菜单下,布局在BorderLayout.NORTH
3、树型视图 UITreeView.java 在JScrollPane的左边
说明:JScrollPane是布局在BorderLayout.CENTER,在JScrollPane的右边是安置了一个ViewPort
---------------------------------------------------------
|主菜单 UIMenuBar.java |
|---------------------------------------------------------|
|工具栏 UIToolBar.java |
|---------------------------------------------------------|
| | |
| | |
| | |
| | |
| 树型视图 | |
|UITreeView.java ViewPort |
| | |
| | |
| | |
| | |
| JSplitPane |
| | |
|_____________|___________________________________________|
因为界面中的几个模块都写在单独的类中(要处理很多事件),统一由主窗体来组织显示,现在的问题就是有众多的事件需要监听,处理,主要也就是要在ViewPort区域重画内容。
比如说某项菜单的点击时需要在ViewPort中绘制一张图片,该事件的监听和处理方法我想应该还是在UIMenuBar.java中写,那么要能让UIMenuBar类操作ViewPort也应该把ViewPort的实例对象通过方法传递到UIMenuBar.java的相应事件的处理方法中
在UIMenuBar.java中
menuItem.addActionListener(this);//监听该菜单事件
.....
public void actionPerformed(ActionEvent e){
if(点击了那个菜单){
//to do 处理该事件的方法
doDraw(viewport);
}
}
void doDraw(ViewPort viewport){
//关键就是在这里应该怎么写才能在ViewPort部分绘制一张图片,
//或者画一些几何图形,paint()? drawing()?
}
14 个解决方案
#1
简单点可以直接用JLabel或者JButton,用setIcon就可以把图表示出来
也可以自己写个component,直接把图画出来
也可以自己写个component,直接把图画出来
#2
up
#3
用一个jpanel,然后在它上面画出来,
你只要建一个Image对象(如指定jpg文件),然后把这个Image传给jpanel画出来就可以了
你只要建一个Image对象(如指定jpg文件),然后把这个Image传给jpanel画出来就可以了
#4
简单说我想问的意思是有一个类A和类B,其中类B继承自JFrame
怎么样在A的方法在实现在B的面板上绘制图??
class A{
public void ff(){
//TO DO 在这里实现往B的面板中绘图。
}
}
class B extends JFrame{
}
怎么样在A的方法在实现在B的面板上绘制图??
class A{
public void ff(){
//TO DO 在这里实现往B的面板中绘图。
}
}
class B extends JFrame{
}
#5
我的观点:
1.画图的功能代码应该另行封装,不应该直接写在UIMenuBar.java中。
2.绘制图片的方法只需要一个Image对象和一个Graphics2D对象即可,使用后者的drawImage方法应该可以满足你要求的画图方式
viewport对象好象不能直接在上面绘图吧,可能要装入一个JPanel作为画板:
JViewport viewport = new JViewport();
JPanel view = new JPanel();
view.add(new JLabel(
new ImageIcon("copy.gif")));
viewport.setView(view);
1.画图的功能代码应该另行封装,不应该直接写在UIMenuBar.java中。
2.绘制图片的方法只需要一个Image对象和一个Graphics2D对象即可,使用后者的drawImage方法应该可以满足你要求的画图方式
viewport对象好象不能直接在上面绘图吧,可能要装入一个JPanel作为画板:
JViewport viewport = new JViewport();
JPanel view = new JPanel();
view.add(new JLabel(
new ImageIcon("copy.gif")));
viewport.setView(view);
#6
顶一下
#7
同意Abib的看法。
事件处理部分因该和界面完全分离。
绘图部分只要传入一个Graphics对象的引用即可,没理由和界面放在一起。
建议楼主看看MVC模式方面的材料
事件处理部分因该和界面完全分离。
绘图部分只要传入一个Graphics对象的引用即可,没理由和界面放在一起。
建议楼主看看MVC模式方面的材料
#8
A 要在B里画图:
A.draw(Graphics g){
}
B {
paint(Graphics g){
A.draw(g);
}
}
A.draw(Graphics g){
}
B {
paint(Graphics g){
A.draw(g);
}
}
#9
上面的他码为什么不能直接调用呢
比如写成
A 要在B里画图:
A.draw(Graphics g){
}
B {
//paint(Graphics g){
A.draw(g);
//}
}
比如写成
A 要在B里画图:
A.draw(Graphics g){
}
B {
//paint(Graphics g){
A.draw(g);
//}
}
#10
我无话可说了,请你买本Java语法书和Swing书好好看看吧.
#11
要想在B组件中画图必须让 B失效(invalidate,repaint) -> 系统调用B.paint(Graphics g),如果你想在B中画A的东西,必须将Graphics g传给A,让A自己画. 在这之前,B必须得到A的实例.
其实最大的问题和以上程序的逻辑无关.是语法和Swing知识薄弱.
其实最大的问题和以上程序的逻辑无关.是语法和Swing知识薄弱.
#12
我想了解的是一个架构模式,项目中会有很多类,想怎么把显示和事件处理分离。
#13
介绍一种MVC,其实我也不懂,哈哈
要不BARRACUDA来实现,你可以轻松实现显示和控制的区分!
要不BARRACUDA来实现,你可以轻松实现显示和控制的区分!
#14
不知道你的问题是需要用什么模式,还是怎样在 Viewport中画图?
如果是需要用什么模式的话,我认为无所谓模式,只要代码逻辑划分清晰就可以了.
至于在viewport中画图,前面已经答过了,使用一个可视对象加在viewport中,在可视对象的paint()方法中处理就可以了.
如果是需要用什么模式的话,我认为无所谓模式,只要代码逻辑划分清晰就可以了.
至于在viewport中画图,前面已经答过了,使用一个可视对象加在viewport中,在可视对象的paint()方法中处理就可以了.
#1
简单点可以直接用JLabel或者JButton,用setIcon就可以把图表示出来
也可以自己写个component,直接把图画出来
也可以自己写个component,直接把图画出来
#2
up
#3
用一个jpanel,然后在它上面画出来,
你只要建一个Image对象(如指定jpg文件),然后把这个Image传给jpanel画出来就可以了
你只要建一个Image对象(如指定jpg文件),然后把这个Image传给jpanel画出来就可以了
#4
简单说我想问的意思是有一个类A和类B,其中类B继承自JFrame
怎么样在A的方法在实现在B的面板上绘制图??
class A{
public void ff(){
//TO DO 在这里实现往B的面板中绘图。
}
}
class B extends JFrame{
}
怎么样在A的方法在实现在B的面板上绘制图??
class A{
public void ff(){
//TO DO 在这里实现往B的面板中绘图。
}
}
class B extends JFrame{
}
#5
我的观点:
1.画图的功能代码应该另行封装,不应该直接写在UIMenuBar.java中。
2.绘制图片的方法只需要一个Image对象和一个Graphics2D对象即可,使用后者的drawImage方法应该可以满足你要求的画图方式
viewport对象好象不能直接在上面绘图吧,可能要装入一个JPanel作为画板:
JViewport viewport = new JViewport();
JPanel view = new JPanel();
view.add(new JLabel(
new ImageIcon("copy.gif")));
viewport.setView(view);
1.画图的功能代码应该另行封装,不应该直接写在UIMenuBar.java中。
2.绘制图片的方法只需要一个Image对象和一个Graphics2D对象即可,使用后者的drawImage方法应该可以满足你要求的画图方式
viewport对象好象不能直接在上面绘图吧,可能要装入一个JPanel作为画板:
JViewport viewport = new JViewport();
JPanel view = new JPanel();
view.add(new JLabel(
new ImageIcon("copy.gif")));
viewport.setView(view);
#6
顶一下
#7
同意Abib的看法。
事件处理部分因该和界面完全分离。
绘图部分只要传入一个Graphics对象的引用即可,没理由和界面放在一起。
建议楼主看看MVC模式方面的材料
事件处理部分因该和界面完全分离。
绘图部分只要传入一个Graphics对象的引用即可,没理由和界面放在一起。
建议楼主看看MVC模式方面的材料
#8
A 要在B里画图:
A.draw(Graphics g){
}
B {
paint(Graphics g){
A.draw(g);
}
}
A.draw(Graphics g){
}
B {
paint(Graphics g){
A.draw(g);
}
}
#9
上面的他码为什么不能直接调用呢
比如写成
A 要在B里画图:
A.draw(Graphics g){
}
B {
//paint(Graphics g){
A.draw(g);
//}
}
比如写成
A 要在B里画图:
A.draw(Graphics g){
}
B {
//paint(Graphics g){
A.draw(g);
//}
}
#10
我无话可说了,请你买本Java语法书和Swing书好好看看吧.
#11
要想在B组件中画图必须让 B失效(invalidate,repaint) -> 系统调用B.paint(Graphics g),如果你想在B中画A的东西,必须将Graphics g传给A,让A自己画. 在这之前,B必须得到A的实例.
其实最大的问题和以上程序的逻辑无关.是语法和Swing知识薄弱.
其实最大的问题和以上程序的逻辑无关.是语法和Swing知识薄弱.
#12
我想了解的是一个架构模式,项目中会有很多类,想怎么把显示和事件处理分离。
#13
介绍一种MVC,其实我也不懂,哈哈
要不BARRACUDA来实现,你可以轻松实现显示和控制的区分!
要不BARRACUDA来实现,你可以轻松实现显示和控制的区分!
#14
不知道你的问题是需要用什么模式,还是怎样在 Viewport中画图?
如果是需要用什么模式的话,我认为无所谓模式,只要代码逻辑划分清晰就可以了.
至于在viewport中画图,前面已经答过了,使用一个可视对象加在viewport中,在可视对象的paint()方法中处理就可以了.
如果是需要用什么模式的话,我认为无所谓模式,只要代码逻辑划分清晰就可以了.
至于在viewport中画图,前面已经答过了,使用一个可视对象加在viewport中,在可视对象的paint()方法中处理就可以了.