所谓用户界面,在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组件的透明度设置。在Java中,我们可以使用`setOpaque(false)`方法来使组件变得透明。这个方法会告诉组件不要绘制其背景,而是透过它显示底层的组件或背景色。例如,如果你有一个JPanel,并...
在Java的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; ...
4. **Swing组件使用**: - **JFrame**:作为应用程序的主窗口。 - **JPanel**:用于组合其他组件或自定义布局。 - **JButton**、**JLabel**、**JTextField**、**JComboBox**等:构成用户界面的基本元素。 - **...
首先,Swing是Java的一个组件库,它是AWT(Abstract Window Toolkit)的扩展,提供了更丰富的用户界面元素和事件处理机制。在贪吃蛇游戏中,我们需要用到Swing中的JFrame作为主窗口,以及JPanel来绘制游戏区域。 ...
可以使用`Point`类的`locationOnScreen()`方法获取组件的屏幕坐标,然后调整气泡窗口的位置。 6. **事件监听**:添加必要的事件监听器,如鼠标事件监听,以便在用户交互时关闭提示窗口。例如,当用户点击气泡窗口...
Java Swing是Java Foundation Classes (JFC)的一部分,提供了一套丰富的组件和工具,用于构建功能丰富的图形用户界面(GUI)。五子棋是一种两人对弈的策略游戏,目标是在棋盘上先连成五个棋子的玩家获胜。让我们来看...
1. **Swing组件**: Swing是Java的标准GUI库,它包含了一个名为`javax.swing.ImageIcon`的类,可以用来加载和显示图片。此外,`JLabel`组件可以用来显示`ImageIcon`,并且`JPanel`或`JFrame`可以作为容器来容纳这些...
本项目是基于Java的Swing库开发的一个完整版本,通过阅读和理解这个项目,我们可以深入理解Java Swing组件的使用、事件处理以及面向对象编程的思想。 首先,Java Swing是Java AWT(Abstract Window Toolkit)的扩展...
综上所述,该程序主要实现了基于 Java Swing 的图形用户界面,支持基本的绘图功能,并提供了一些常见的菜单选项,如新建、保存等。此外,还涉及到了文件操作、对象序列化等多个方面,是一个较为综合的 Java 编程实例...
1. **Swing组件**:Swing提供了JFrame、JPanel等组件来构建游戏窗口和画布。JFrame作为主窗口,而JPanel可以用来绘制游戏画面。 2. **绘图与动画**:使用Java的Graphics类在JPanel上进行绘制。重写`paintComponent`...
1. **Swing组件与布局管理器**: - `JFrame`:作为应用程序的主要窗口,继承自`java.awt.Frame`,是Swing中的顶级容器。 - `GridLayout`:布局管理器,将容器内的组件按照网格布局,每个网格大小相同,这里用于...
AWT是Java的早期GUI库,而Swing是建立在AWT之上的,提供更丰富的组件和更好的外观。在这个上下文中,我们可能需要使用Swing,因为它提供了更好的鼠标事件处理和拖放支持。 2. **MouseListener 和 ...
这个程序使用 Java 的 Swing 组件库,通过继承 JFrame 和 JPanel 类实现游戏界面和基本功能。主要的类包括 BigFishEatSmallFish、MyPanel 类以及 Point 类。其中 MyPanel 类是游戏主面板,绘制大鱼和小鱼,并用 ...
- **轻量级**:Swing组件并不直接使用本地系统的GUI资源,从而减少了对平台的依赖。 - **新组件**:Swing引入了许多新的实用组件。 - **常用选择**:在现代Java开发中,Swing通常作为首选的GUI编程工具包。 ##### ...
通过上述分析,我们可以看出,这个JAVA画图小程序不仅展示了如何使用Swing构建GUI,而且还演示了如何处理鼠标和按钮事件,以及如何在Swing组件上进行图形绘制。这对于初学者来说,是一个很好的实践案例,可以帮助...
AWT(Abstract Window Toolkit)是Java的基础图形用户界面库,提供了一些基本的组件和事件处理机制。在这个游戏中,它们共同用于绘制迷宫和响应用户输入。 3. **游戏胜利界面**: 当玩家成功找到迷宫的出口时,会...
这个程序使用 Java 的 Swing 组件库,通过继承 JFrame 和 JPanel 类实现游戏界面和基本功能。主要的类包括 EagleAndChicks、MyPanel 类以及 Point 类。其中 MyPanel 类是游戏主面板,绘制老鹰和小鸡,并用 ArrayList...
我们将主要关注"java图像移动方法"这一主题,这通常涉及到Java AWT(Abstract Window Toolkit)和Swing库中的组件和事件监听器。 首先,`DragImage`类可能是实现图像移动的核心类,它可能包含了对图像加载、显示...