java swing 事件问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java swing 事件问题相关的知识,希望对你有一定的参考价值。

有一个JFrame(FrameA类)和两个JPanel面板(PaneA类,PaneB类)
PaneA类和PaneB类都被添加到FrameA类中,
单击PaneA类中的按钮,使PaneB显示不同内容,事件怎么控制?
最好详细点
一定加分
谢谢了!

对于这种处理 有一个很通用的办法 那就是内部类

定义一个窗口frame
把这个窗口里头所有显示的组件 面板的引用 都定义在构造方法和其他方法外头
而这些组件的引用 的实例化(new语句) 都放在构造方法里头
然后把这个窗口的显示 和大小 也定义在构造方法里头

然后把关于这个窗口的操作 和改变等类(一般都是接口)
放在这个类的内部...根据变量作用区域规定...内部定义的类是可以直接访问外层类的变量的....这种思路不是强制性的...但是写图形界面程序我觉得很合适

看一个例子 注意(监听器是写在内部的,,才能对button进行操作) 可以直接运行,无错误...
import javax.swing.* ;
import javax.swing.event.* ;
import java.awt.* ;
import java.awt.event.* ;
import java.awt.Container.* ;

public class mainclass//主函数类,很简单就是只对其他类进行定义对象操作

public static void main(String []s)

new mainframe() ;//所谓的匿名类



class mainframe//主窗口的类

JFrame frame ;
Container contain ;
JButton button ;
JLabel label ;

public mainframe()

frame=new JFrame("我的窗口") ; //窗口对象
contain=frame.getContentPane() ; //contain是一个容器,frame.getContentPane() 是获得frame的默认容器

button=new JButton("OK") ;
button.addActionListener(new buttonlistener()) ;//给键添加事件处理的接口
label =new JLabel("这里就是标签了") ;

contain.setLayout(new BorderLayout(20,20)); //容器设置布局管理器(20,20)表示水平,垂直各控件距离10象素
contain.add(button,BorderLayout.SOUTH) ; //BorderLayout.SOUTH是BorderLayout这个布局管理器的常量,表示南(下)方
contain.add(label,BorderLayout.CENTER) ; //同上 表示中间
contain.setBackground(Color.pink) ; //容器设置背景颜色,Color.pink是颜色Color类的常量

frame.setSize(300,200) ; //设置大小
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//这个表示当你关闭当前窗口直接终止整个程序,如果不设置,就算你关闭了当前窗口程序依然执行
// 因为如果你不这样设置 当你关闭窗口 也仅仅是让窗口不显示,但程序没有停止
frame.setResizable(false); //设置窗口不能再改变大小.只能系统设定,意思就是不能最大化
frame.setVisible(true) ; //显示

class buttonlistener implements ActionListener

int i=0 ;
public void actionPerformed(ActionEvent e)
button.setText("第"+(++i)+"次按键") ;


参考技术A 这样的问题我以前也遇到过,弄了很长时间,
有一个简单的办法,但不一定是标准的。
把PaneA和PaneB上的内容都定义到FrameA上。
这种方法准能实现,试一试。本回答被提问者采纳
参考技术B 说的太笼统了,PanelB显示不同内容到底是什么不同内容呢?

Java Swing界面编程(21)---事件处理:窗口事件

WindowLIstener是专门处理窗口的事件监听窗口。一个窗口的全部变化。如窗口的打开、关闭等都能够使用这个接口进行监听。

实现WIndowListener:

package com.beyole.util;

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class MyWindowEventHandle implements WindowListener {

	@Override
	public void windowOpened(WindowEvent e) {
		System.out.println("windowOpened--->窗体被打开");
	}

	@Override
	public void windowClosing(WindowEvent e) {
		System.out.println("windowClosing--->窗体关闭");
	}

	@Override
	public void windowClosed(WindowEvent e) {
		System.out.println("windowClosed--->窗体被关闭");
	}

	@Override
	public void windowIconified(WindowEvent e) {
		System.out.println("windowIconified--->窗体最小化");
	}

	@Override
	public void windowDeiconified(WindowEvent e) {
		System.out.println("windowDeiconfied--->窗体从最小化恢复");
	}

	@Override
	public void windowActivated(WindowEvent e) {
		System.out.println("windowActivated--->窗体被选中");
	}

	@Override
	public void windowDeactivated(WindowEvent e) {
		System.out.println("windowDeactivated--->取消窗体被选中");
	}

}

单单仅仅有监听器是不够的。还须要在组件使用时注冊监听。这样才干处理,直接使用窗口的addWindowListener(监听对象)方法就可以注冊事件监听

package com.beyole.util;

import java.awt.Color;

import javax.swing.JFrame;

public class MyWindowEventFrame01 {
	public static void main(String[] args) {
		JFrame frame=new JFrame("Crystal");
		frame.addWindowListener(new MyWindowEventHandle());
		frame.setSize(300, 160);
		frame.setBackground(Color.WHITE);
		frame.setLocation(300, 200);
		frame.setVisible(true);
	}
}

程序截图:技术分享

结果截图:技术分享



以上是关于java swing 事件问题的主要内容,如果未能解决你的问题,请参考以下文章

java GUI编程(swing)之七swing事件监听

java swing里文本框控制不能输入汉字,或者输入字符串包含汉字在失去焦点事件时提示用户!

Java Swing事件处理机制

Java学习笔记7.2.2 事件处理 - Swing常用事件

Java学习笔记7.2.2 事件处理 - Swing常用事件

Java学习笔记7.2.1 事件处理 - Swing事件处理机制