`
袁可可
  • 浏览: 5144 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

swing 组件里的一些Point

阅读更多
所谓用户界面,在java里依旧是一个一个的类,(主要是javax.swing包里的类),组成一个界面的表现,则是这些类的对象之间相互调用的结果。
所有的swing组件都继承于javax.swing.JComponent这个抽象类。
swing组件分类
1.Container(容器)组件,例如JPanel、JFrame
2.元素组件,JLabel、JTextField
1)每个Swing组件都有一个或多个add<事件名称>Listener的方法,例如常用的JButton类、Jlist类(下拉框)、JMenu类(菜单)都有一个addActionListenerd方法,其中ActionListener接口定义如下
package java.awt.event;

import java.util.EventListener;


public interface ActionListener extends EventListener {

    /**
     * Invoked when an action occurs.
     */
    public void actionPerformed(ActionEvent e);

}

这个方法只有一个ActionEvent(事件对象)类型的参数;这个ActionEvent对象有许多方法可以得到事件源的相关信息,ActionEvent对象的getSource()返回一个Object类型的对象,指向了发出这个事件的事件源,如是点击了一个JButton,就可以将这个Object强制转型为JButton类型,即可得到事件源对象;getActionCommand()方法可以得到事件源上的标签作为一String 类型返回等等
import javax.swing.JButton;


public class MyButtonListener implements java.awt.event.ActionListener{
	   public void actionPerformed(ActionEvent e) {
		   //自动转型,sour指向了事件源
		   Object sour = e.getSource();
		   
		   if(sour instanceof javax.swing.JButton) {
			  //将sour强制转型为JButton,得到指向事件源的对象
			  javax.swing.JButton bu = (javax.swing.JButton)sour;
			  String lab = bu.getActionCommand();
			  System.out.println("按下了个按钮: "+lab);
			  bu.setText("我被按了一下!");
		   }
		   else{
			   System.out.println("其他组件发生事件");
		   }
		   
	   }


}

instanceof是Java、php的一个二元操作符(运算符),和==,>,<是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。可以用来判断  继承中的子类的实例是否为父类的实现。
2)通过内部类简化事件处理方式
//通过内部类创建  按钮监听器:
bu_login.addActionListener(new java.awt.event.ActionListener() {
		//必须是重写ActionListener重的方法,当事件发生时,这个方法就会被调用:
		public void  actionPerformed(ActionEvent e) {
			//调用本类内部的事件处理方法
			processEvent();
			
		}
	}
	);

3)系统提供一个MouseAdapter类:
	public abstract class MouseAdapter implements MouseListener, 
							MouseWheelListener, MouseMotionListener {

    	public void mouseClicked(MouseEvent e) {}
    	public void mousePressed(MouseEvent e) {}
    	public void mouseReleased(MouseEvent e) {}
    	public void mouseEntered(MouseEvent e) {}
    	public void mouseExited(MouseEvent e) {}
    	public void mouseWheelMoved(MouseWheelEvent e){}
    	public void mouseDragged(MouseEvent e){}
    	public void mouseMoved(MouseEvent e){}
}

我们的鼠标事件监听器类只需要继承MouseAdapter类,重写我们需要重写的方法即可,对于这种方法,有一个专有名词,叫做“适配器设计模式”。
this.addMouseListener(new MouseAdapter(){
	public void mouseClicked(MouseEvent e) {
	for(int k = 0; k<30000; k++) {
				
		int i = (int)(Math.random()*3)+1;
				
		if(i == 1) {
			grc.drawLine((datax[0]+datax[3])/2,(datay[0]+datay[3])/2, (datax[0]+datax[3])/2, (datay[0]+datay[3])/2);
            datax[3] = (datax[0]+datax[3])/2;
		    datay[3] = (datay[0]+datay[3])/2;
	    }else if(i == 2) {
		    grc.drawLine((datax[1]+datax[3])/2, (datay[1]+datay[3])/2, (datax[1]+datax[3])/2, (datay[1]+datay[3])/2);
			datax[3] = (datax[1]+datax[3])/2;
			datay[3] = (datay[1]+datay[3])/2;
		}else if(i == 3) {
			grc.drawLine((datax[2]+datax[3])/2, (datay[2]+datay[3])/2, (datax[2]+datax[3])/2, (datay[2]+datay[3])/2);
			datax[3] = (datax[2]+datax[3])/2;
			datay[3] = (datay[2]+datay[3])/2;
		}
	}
	}
});

4)抽取“形状”父类并实现
我们可以将各种形状相同的属性都在父类中定义,不同的属性在各自的子类中定义
package Demo;

import java.awt.Color;
import java.awt.Graphics;

/**
 * 绘图形状的抽象类定义
 * @author 袁可可
 *
 */
public abstract class NetJavaShape {
	public Color color;
	/**
	 * 子类必须实现的抽象方法
	 * @param g画布对象
	 */
	public abstract void draw(Graphics g);
}

如果有了如上抽象类的实现类,在界面主城中,要绘制某种形状时,调用的代码格式就会是
//创建直线对象
	NetJavaShape shape = new ImpLine(x1,y1,x2,y2,color);
	//调用shape对象绘制方法,传入画布对象。坐标点和颜色对象;
	//具体的shape对象就知道如何绘制出自己
	shape.draw(g);

5)通过系统提供的颜色选择器选择颜色
this.color = JColorChooser.showDialog(null,"请选择颜色",Color.BLACK);
Declaration 
 public static Color showDialog(Component component,
        String title, Color initialColor) throws HeadlessException {

        final JColorChooser pane = new JColorChooser(initialColor != null?
                                               initialColor : Color.white);

        ColorTracker ok = new ColorTracker(pane);
        JDialog dialog = createDialog(component, title, true, pane, ok, null);

        dialog.show(); // blocks until user brings dialog down...

        return ok.getColor();
    }
分享到:
评论

相关推荐

    swing组件透明拖动

    首先,我们来理解Swing组件的透明度设置。在Java中,我们可以使用`setOpaque(false)`方法来使组件变得透明。这个方法会告诉组件不要绘制其背景,而是透过它显示底层的组件或背景色。例如,如果你有一个JPanel,并...

    swing 拖动控件

    在Java的Swing库中,实现拖动控件的功能是一项常见的需求,这使得用户可以通过鼠标进行交互,将组件在窗口内自由移动。标题"swing 拖动控件"所指的就是利用Swing来实现这一功能的技术。描述中提到的"一个简单的类...

    swing蜘蛛纸牌

    import javax.swing.*; public class PKCard extends JLabel implements MouseListener, MouseMotionListener{ //纸牌的位置 Point point = null; Point initPoint = null; int value = 0; int type = 0; ...

    Swing 开发的小型超市POSS系统

    4. **Swing组件使用**: - **JFrame**:作为应用程序的主窗口。 - **JPanel**:用于组合其他组件或自定义布局。 - **JButton**、**JLabel**、**JTextField**、**JComboBox**等:构成用户界面的基本元素。 - **...

    swing写的贪吃蛇

    首先,Swing是Java的一个组件库,它是AWT(Abstract Window Toolkit)的扩展,提供了更丰富的用户界面元素和事件处理机制。在贪吃蛇游戏中,我们需要用到Swing中的JFrame作为主窗口,以及JPanel来绘制游戏区域。 ...

    java Swing 气泡浮动提示窗口代码

    可以使用`Point`类的`locationOnScreen()`方法获取组件的屏幕坐标,然后调整气泡窗口的位置。 6. **事件监听**:添加必要的事件监听器,如鼠标事件监听,以便在用户交互时关闭提示窗口。例如,当用户点击气泡窗口...

    用JavaSwing实现桌面五子棋

    Java Swing是Java Foundation Classes (JFC)的一部分,提供了一套丰富的组件和工具,用于构建功能丰富的图形用户界面(GUI)。五子棋是一种两人对弈的策略游戏,目标是在棋盘上先连成五个棋子的玩家获胜。让我们来看...

    java实现图片中心放大、缩小、移动、鼠标拖移

    1. **Swing组件**: Swing是Java的标准GUI库,它包含了一个名为`javax.swing.ImageIcon`的类,可以用来加载和显示图片。此外,`JLabel`组件可以用来显示`ImageIcon`,并且`JPanel`或`JFrame`可以作为容器来容纳这些...

    mytcs1.rar

    本项目是基于Java的Swing库开发的一个完整版本,通过阅读和理解这个项目,我们可以深入理解Java Swing组件的使用、事件处理以及面向对象编程的思想。 首先,Java Swing是Java AWT(Abstract Window Toolkit)的扩展...

    Java windows 课程设计

    综上所述,该程序主要实现了基于 Java Swing 的图形用户界面,支持基本的绘图功能,并提供了一些常见的菜单选项,如新建、保存等。此外,还涉及到了文件操作、对象序列化等多个方面,是一个较为综合的 Java 编程实例...

    Java贪吃蛇小游戏

    1. **Swing组件**:Swing提供了JFrame、JPanel等组件来构建游戏窗口和画布。JFrame作为主窗口,而JPanel可以用来绘制游戏画面。 2. **绘图与动画**:使用Java的Graphics类在JPanel上进行绘制。重写`paintComponent`...

    java基于swing实现的五子棋游戏代码

    1. **Swing组件与布局管理器**: - `JFrame`:作为应用程序的主要窗口,继承自`java.awt.Frame`,是Swing中的顶级容器。 - `GridLayout`:布局管理器,将容器内的组件按照网格布局,每个网格大小相同,这里用于...

    基于Java的鼠标拖拽功能.zip

    AWT是Java的早期GUI库,而Swing是建立在AWT之上的,提供更丰富的组件和更好的外观。在这个上下文中,我们可能需要使用Swing,因为它提供了更好的鼠标事件处理和拖放支持。 2. **MouseListener 和 ...

    使用JAVA实现游戏开发-大鱼吃小鱼经典游戏

    这个程序使用 Java 的 Swing 组件库,通过继承 JFrame 和 JPanel 类实现游戏界面和基本功能。主要的类包括 BigFishEatSmallFish、MyPanel 类以及 Point 类。其中 MyPanel 类是游戏主面板,绘制大鱼和小鱼,并用 ...

    java语言编程gui编程

    - **轻量级**:Swing组件并不直接使用本地系统的GUI资源,从而减少了对平台的依赖。 - **新组件**:Swing引入了许多新的实用组件。 - **常用选择**:在现代Java开发中,Swing通常作为首选的GUI编程工具包。 ##### ...

    JAVA编写的画图小程序

    通过上述分析,我们可以看出,这个JAVA画图小程序不仅展示了如何使用Swing构建GUI,而且还演示了如何处理鼠标和按钮事件,以及如何在Swing组件上进行图形绘制。这对于初学者来说,是一个很好的实践案例,可以帮助...

    JAVA实现迷宫游戏(使用随机prim算法生成随机迷宫,并使用java中的swing包和awt包编写图形用户界面,手绘胜利界面)

    AWT(Abstract Window Toolkit)是Java的基础图形用户界面库,提供了一些基本的组件和事件处理机制。在这个游戏中,它们共同用于绘制迷宫和响应用户输入。 3. **游戏胜利界面**: 当玩家成功找到迷宫的出口时,会...

    使用JAVA编程一个游戏-老鹰捉小鸡游戏

    这个程序使用 Java 的 Swing 组件库,通过继承 JFrame 和 JPanel 类实现游戏界面和基本功能。主要的类包括 EagleAndChicks、MyPanel 类以及 Point 类。其中 MyPanel 类是游戏主面板,绘制老鹰和小鸡,并用 ArrayList...

    java图像移动方法

    我们将主要关注"java图像移动方法"这一主题,这通常涉及到Java AWT(Abstract Window Toolkit)和Swing库中的组件和事件监听器。 首先,`DragImage`类可能是实现图像移动的核心类,它可能包含了对图像加载、显示...

Global site tag (gtag.js) - Google Analytics