怎么在JSP中嵌入SWING开发的应用程序JFRAME窗口~

怎么在JSP中嵌入SWING开发的应用程序JFRAME窗口~,第1张

网上说JSP 中只能嵌入APPLET

用JFRAME 继续APPLET 类

给建议者绝对给分

------解决方案--------------------------------------------------------

------解决方案--------------------------------------------------------

JFrame ,JAPPLET ,JWindow,

这三个是 Swing 里面的顶层窗体,也是重量级的,都有对等类(也就是直接跟 *** 作系统通讯的)

Swing 里面的其余的控件都是轻量级的,都依赖它门三个与 *** 作系统通讯.

潜入IE 里面是用JApplet 的,applet 是重量级的,依赖它的控件都是重量级的,不要用,过

时了的东西,直接用JApplet,

并且运行JApplet 的客户端要装jre ,才能用.

你把Japplet 开发的程序打包成jar 文件.

jsp 页面里面有潜入japplet 标签吧,再标签潜入jar包,打jar 包时,你要指定入口main 函数类object ==/object

------解决方案--------------------------------------------------------APPLET

是JAVA 推出时的一个最亮点,可以和服务器交互。。

import java.awt.*

import java.awt.event.*

import javax.swing.*

public class TestFrame extends JFrame{

JMenuBar jmb

JMenu jm

JMenuItem jmi

JPanel jp1

JPanel jp2

public TestFrame(){

jmb = new JMenuBar()

jm = new JMenu("系统管理")

jmi = new JMenuItem("增加用户")

jmb.add(jm)

jm.add(jmi)

//初始化 默认的JPanel

jp1 = new JPanel()

jp1.setBackground(Color.YELLOW)

jp1.add(new JLabel("这里是默认的界面"))

add(jp1)

setJMenuBar(jmb)

//初始化 要改变的JPanel

jp2 = new JPanel(new GridLayout(2, 2))

jp2.setBackground(Color.LIGHT_GRAY)

jp2.add(new JLabel("用户名"))

jp2.add(new JTextField(10))

jp2.add(new JLabel("密码"))

jp2.add(new JTextField(10))

//对这个菜单按钮进行设置  this 代表的是TestFrame 这个对象

jmi.addActionListener(new MyChangeListener(this))

this.setBounds(280,200,380,380)

this.setTitle("测试")

this.setDefaultCloseOperation(EXIT_ON_CLOSE)

this.setVisible(true)

}

public static void main(String[] args) {

new TestFrame()

}

class MyChangeListener implements ActionListener{

JFrame jframe

public MyChangeListener(JFrame jframe) {

this.jframe = jframe

}

@Override

public void actionPerformed(ActionEvent e) {

jframe.remove(jp1)//去掉默认JPanel

jframe.add(jp2)//加入新的JPanel

jframe.validate()//重构整个界面

}

}

}

import java.awt.*

import javax.swing.*

import java.awt.event.*

public class Painter extends JFrame

{

private int xValue=0,yValue=0

public Painter()

{

super("A Simple paint program")

getContentPane().add(new JLabel("Drag the Mouse To Paint"),"South")

/*addMouseMotionListener(

new MouseMotionAdapter(){

public void mouseDragged(MouseEvent e)

{

xValue=e.getX()

yValue=e.getY()

repaint()

}

}

)*/

setSize(300,300)

setVisible(true)

}

/*

public void paint(Graphics g)

{

g.fillOval(xValue,yValue,4,4)

}*/

public static void main(String[] args)

{

Painter frame=new Painter()

}

}

这主要是paint(Griphics g)方法的问题

注意java.awt包和javax.swing包中的类的层次问题

java.lang.Object ->java.awt.Component ->java.awt.Label

java.lang.Object

-> java.awt.Component

-> java.awt.Container

-> javax.swing.JComponent

-> javax.swing.JLabel

而在java.awt.Component和javax.swing.JComponent都分别根据组件的清重量级定义了不同实现方式的paint方法

在你的程序中,你是在JFrame中直接进行绘画,而JFrame属于重量级组件,Label属于偏重量级JLabel属于偏轻(轻重的区别就是是否跟本地系统有太大关系)。。JFrame JWindow JDialog 等等。。并且你绘画的区域和你添加Label

的位置有重叠。。。诸多原因导致了无法显示

建议:将绘画的组件 改成JPanel。。可以多分级绘画,也可以并列多个JPanel,然后分别添加 组件 和绘画,不会重叠。。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7965283.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存