用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,然后分别添加 组件 和绘画,不会重叠。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)