java中的一段,谁能读懂?Component干什么用的

Component com=null; //Component 应该是java.awt.Component,它是很多awt组件 的父类型 if(e.getSource() instanceof Component) // 如果鼠标事件 e的发生源是Component(或它的子类){ com=(Component)e.getSource(); //将变量com赋值为 鼠标事件的发生源 if(com!=this) //如果得...
java中的一段,谁能读懂?Component干什么用的
我大概给你写个注释

public void mouseDragged(MouseEvent e) //从这个方法名上看可能是鼠标拖动的方法
{
Component com=null; //Component 应该是java.awt.Component,它是很多awt组件 的父类型
if(e.getSource() instanceof Component) // 如果鼠标事件 e的发生源是Component(或它的子类)
{
com=(Component)e.getSource(); //将变量com赋值为 鼠标事件的发生源
if(com!=this) //如果得到的com变量不是这个类的实例本身(也说明了这个方法所在的类也是一个Component)

move=true; //将标志变量move设为true
e=SwingUtilities.convertMouseEvent(com,e,this); //将鼠标事件转化一下
if(move) //如果标志变量move是true
{
x=e.getX(); //得到这个鼠标事件相对于产生它的组件的X坐标
y=e.getY(); //跟上面一样
int w=com.getSize().width, //得到com组件的宽度(注意com组件就是产生e的组件)
h=com.getSize().height;
com.setLocation(x-w/2,y-h/2); //将com组件移到新的位置(这个位置有什么意义我还是搞不清楚)
}
}2011-03-28
component 是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。典型图形用户界面中的按钮、复选框和滚动条都是组件示例。

Component 类是与菜单不相关的 Abstract Window Toolkit 组件的抽象超类。还可以直接扩展类 Component 来创建一个轻量级组件。轻量级组件是与本机不透明窗口不相关的组件。

序列化
存储对象时,仅保存那些符合 Serializable 协议的 AWT 侦听器,注意这一点很重要。如果具有侦听器的 AWT 对象未标记为可序列化,则在 writeObject 时将会被丢弃。开发人员始终需要考虑序列化对象的意义。需要注意的一种情形是:
import java.awt.*;
import java.awt.event.*;
import java.io.Serializable;

class MyApp implements ActionListener, Serializable
{
BigObjectThatShouldNotBeSerializedWithAButton bigOne;
Button aButton = new Button();

MyApp()
{
// Oops, now aButton has a listener with a reference
// to bigOne!
aButton.addActionListener(this);
}

public void actionPerformed(ActionEvent e)
{
System.out.println("Hello There");
}
}

在此示例中,通过 aButton 自身进行序列化会使得 MyApp 及其引用的所有内容也都被序列化。问题是,原本没打算序列化的侦听器也被同时序列化了。为分别判断 MyApp 和 ActionListener 是否可序列化,可使用一个嵌套类,如下面示例所示:
import java.awt.*;
import java.awt.event.*;
import java.io.Serializable;

class MyApp java.io.Serializable
{
BigObjectThatShouldNotBeSerializedWithAButton bigOne;
Button aButton = new Button();

static class MyActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Hello There");
}
}

MyApp()
{
aButton.addActionListener(new MyActionListener());
}
}

注:有关 AWT 和 Swing 所用绘制机制的更多信息,包括如何编写最高效的绘制代码的信息,请参阅 Painting in AWT and Swing。

有关焦点子系统的详情,请参阅 The Java Tutorial 中的 How to Use the Focus Subsystem 部分,以及 Focus Specification 了解更多信息。

另请参见:
序列化表格2011-03-28
应该是com.setLocation(x+w/2,y+h/2);吧2011-03-29
这段看起来好像是实现图像拖拽。帖下component的源代码2011-03-28
mengvlog 阅读 9 次 更新于 2025-07-19 05:23:45 我来答关注问题0
  •  伊·梵beec java 中char c = s.charAt(0); if(c>='0' && c<='9') return c-'0' ; c-'0' 什么意思能说一下原理么,

    c-'0' 是字符变量c的ASCII和字符0的ASCII的差,是一个整数,就是字符c表示的0-9的数值。也可能理解为将数字字符c转换为数字。

  • 这里 char c: str 表示将字符串 str 中的每一个字符依次赋值给变量 c,然后执行循环体中的代码。例如,你可以在循环体内对每个字符进行处理,如判断是否为大写字母,或者将其转换为其他形式。

  •  小文cxw IDEA中新建java文件时前面的C图标,I图标,锁图标和其它图标都是什么意思?

    绿色的I就是接口的意思。蓝色的C就是实现方法。绿色的I就是接口的意思。蓝色的C就是实现方法。Eclipse或IDEA中jar包的图标符号代表的含义

  • 在Java编程语言中,赋值运算符“= ”用于将一个值赋给一个变量,而比较运算符“==”用于比较两个值是否相等,返回布尔值true或false。因此,语句“if((a=b)==c)”中的(a=b)表示将b的值赋给变量a,然后比较a与c是否相等。如果相等,则执行if语句块内的代码。需要注意的是,表达式(a=b)首先...

  •  世钊聊灵慧 初学Java不能理解char c =(char)(Math.random()*26+'a')

    首先,Math.random()*26产生了一个0—26之间的数,这个就不解释了,开始已经提到了,然后这个数要与字符a做运算,可是字符怎么能与数字运算呢?我们知道,字符在计算机中是以ASCII码的形式存储的(其实也就是数字),所以,前边的运算,就是数字与数字的运算,表面上整型数字与字符的运算;好了,现在...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部