1. 关于java swing 中,事件的问题
可以把JBa .addActionListener(this);这句改成其他的:
比如:JBa .addActionListener(A,B类的某个成员字段);
我的意思是,按钮就在A,B、中定义,然后在A类中(B类类似不再重复)的构造函数中new出来并注册时间监听,那么问题来了,谁来监听?建议构造函数这样写:
public A(ActionListener lst){
this.按钮=new Button()//等实例操作,把按钮的所有属性设置好后-->
this.按钮.setActionListener(lst);//把传入的参数设为监听的对象
}
新的问题就是,需要在C类中new A时,就把自己(建议把自己)实现ActionLIstener,然后传入参数就是自己(this):A a =new A(this);
大概是这样,如果要把按钮分离出来,就可以考虑直接new Jpanel()再对象.add()了!
2. java swing 怎么用一个监视器 监视2个窗口中同名按钮(各一个),触发不同事件(执行不同代码)
package实验;
importjavax.swing.*;importjava.awt.event.*;
publicclasshaha{
publicstaticvoidmain(String[]args){
//调用c来启动
newc();
}
}
classaextendsJFrame{
//第一个按钮
JButtons=newJButton("ha");
a(){
this.setTitle("a!");
this.setVisible(true);
this.setLayout(null);
this.setBounds(100,100,600,600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.add(s);
s.setBounds(100,100,100,50);
}
}
classbextendsJFrame{
//第二个按钮
JButtons=newJButton("ha");
b(){
this.setTitle("b!");
this.setVisible(true);
this.setLayout(null);
this.setBounds(100,100,600,600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.add(s);
s.setBounds(100,100,100,50);
}
}
{
//启动a,b
aaa=newa();
bbb=newb();
c(){
//为两个按钮加监听器
aa.s.addActionListener(this);
bb.s.addActionListener(this);
}
publicvoidactionPerformed(ActionEvente){
//如果是a的按钮
if(e.getSource()==aa.s){
System.out.println("我点了a的s");
}
//如果是b的按钮
if(e.getSource()==bb.s){
System.out.println("我点了b的s");
}
}
}
3. 请简要说明Java基于SWING的图形用户界面设计中的事件机制及处理事件的步骤 谢谢了,简要
在编程语言中的事件就是当某组件的状态发生改变的时候通知其它对象发生了这件事,我们在这里只讨论图形界面的组件,有可能是按钮、文本框、菜单、多选等等。
对于通知其它对象的方法一般有两种模式:
1)推模式:状态改变的对象通知其它对象;
2)拉模式:其他对象不停的查看该对象状态是否发生改变。
例如我去小卖部买烟,要一包红塔山,结果小卖部没货了,如果我把我得电话给小卖部老板,烟如果到了请给我打电话,这就是推模式。如果我每隔5分钟来小卖部看一看烟是否到了,这就是拉模式。
Java采用的是推模式,所有监听事件都基于观察者设计模式,所以我们也可以自己给予观察者开发出专用的监听器。
我们JavaGUI程序开发,会经常使用到监听事件,比如一个小计算器的程序,当我们点击“计算”按钮后,希望程序将两个文本框中的数字相加,那么就必需给这个按钮添加事件:
1)按钮的动作触发事件接口是ActionListener接口(不同组件要实现不同功能需要有不同的接口),我们需要写一个事件类,实现ActionListener接口,接口中需要我们实现的方法actionPerformed(ActionEvent e)代表了当按钮事件被触发后需要程序做些什么,比如在这里用System.out.println("你好")在控制台打印你好,这一步就相当于我把电话写在纸上。
2)调用JButton组件实例的addActionListener(ActionListener al)方法(其它事件也有相应的方法)将上面写的事件类注册到这个按钮上,这就相当于我把写着电话的纸条交给小卖部的老板。
上述两部工作完成后,这个按钮的事件就添加完成了,程序运行,点击按钮,动作事件被触发,控制台显示“你好”。
实例:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
* 一个简单的按钮事件教学实例
* @author 米强
*
*/
public class Test extends JFrame {
public Test() {
super("简单的按钮事件实例");
// 一个按钮的实例化对象
JButton button = new JButton("按钮");
// 构造一个事件类,该类实现了ActionListener动作接口
MyActionListener action = new MyActionListener();
// 为这个按钮添加动作事件(匿名类等写法在这里不做讨论)
button.addActionListener(action);
// 将按钮添加到窗体中
getContentPane().add(button);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 200);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Test();
}
}
/**
* 事件类,实现ActionListener接口
* @author 米强
*
*/
class MyActionListener implements ActionListener {
/**
* 动作事件出发后所执行的方法
*/
public void actionPerformed(ActionEvent e) {
// 在控制台打印“你好”
System.out.println("你好");
}
}
4. java中swing的问题,关于按钮下面也有按钮时候事件的触发
按钮是我用label模仿的,button上添加事件后没法触发底层的鼠标事件,不知道如何解决,下面是我实现的代码,拖动的动画效果还没想出好的办法, 里面有获取屏幕高宽的方法,可以实现panel居中,button相对于屏幕坐标的方法是在事件里调用e.getXOnScreen();e.getYOnScreen()这两个方法:
public class Test {
public static void main(String[] args)
{
new Test().new MyFrame();
}
class MyFrame extends JFrame{
JLabel testBtn = new JLabel("test:");
int x;//x坐标
int y;//y坐标
public MyFrame(){
Dimension ss = Toolkit.getDefaultToolkit().getScreenSize();//获取屏幕大小
//获取内边距
Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(this.getGraphicsConfiguration());
int taskBarHeight = screenInsets.bottom; //获取底部 菜单栏高度
setBounds(ss.width/10, (ss.height-taskBarHeight)/10, ss.width/5*4, (ss.height-taskBarHeight)/5*4);
setLayout(null);
testBtn.setBounds(0, 0, 150, 30);
testBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
addMouseListener(new MouseAdapter() {
boolean flag = false;
int xMax;
int xMin;
int yMax;
int yMin;
@Override
public void mousePressed(MouseEvent e) {
System.out.println("x="+e.getX()+";y="+e.getY());
xMax = testBtn.getX()+testBtn.getWidth();
xMin = testBtn.getX();
//这里加了个30是标题栏的高度,如果有目录栏,还需要加
yMax = testBtn.getY()+testBtn.getHeight()+30;
yMin = testBtn.getY();
//鼠标点下位置为按钮部分
System.out.println(e.getX()+";"+e.getY());
System.out.println(xMin+";"+xMin);
System.out.println(yMin+";"+yMin);
System.out.println(e.getX()>xMin&&e.getX()<xMax&&e.getY()<yMax&&e.getY()>yMin);
if(e.getX()>xMin&&e.getX()<xMax&&e.getY()<yMax&&e.getY()>yMin){
flag =true;
testBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
testBtn.setLocation(e.getX()-testBtn.getWidth()/2, e.getY()-30-testBtn.getHeight()/2);
}else{
flag =false;
}
}
@Override
public void mouseReleased(MouseEvent e) {
if(flag ==true){
testBtn.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
testBtn.setLocation(e.getX()-testBtn.getWidth()/2, e.getY()-30-testBtn.getHeight()/2);
}
}
});
add(testBtn);
setVisible(true);
}
}
}
5. 关于java swing的按钮点击事件,请教大侠们
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class MainFrame {
private JFrame frame = new JFrame();
private JButton add = new JButton("添加");
private JButton del = new JButton("删除");
private JButton update = new JButton("修改");
private JPanel panel = new JPanel();
private JTextArea message = new JTextArea(10, 20);
private JScrollPane message_pane = new JScrollPane(message);
private JTextField name = null;
private JTextField password = null;
private JScrollPane update_message_pane = null;
private JTextArea update_message = null;
public static void main(String[] args) {
MainFrame mf = new MainFrame();
mf.init();
mf.addActionListener();
}
// 向文本域添加值
private class Enroll_BtnAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (!name.getText().equals("") && !password.getText().equals("")) {
message.append("姓名:" + name.getText() + " " + "密码:"
+ password.getText());
} else {
System.out.println("用户名密码为空");
}
}
}
private class Update_BtnAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
message.setText(update_message.getText());
}
}
// 为按钮添加事件
public void addActionListener() {
ActionListener add_action = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog enroll_dialog = new JDialog(frame, "注册", true);
JLabel name_t = new JLabel("姓名");
name = new JTextField(10);
JLabel password_t = new JLabel("密码");
password = new JTextField(10);
JButton enroll_ok = new JButton("确定");
enroll_dialog.setLayout(new FlowLayout());
enroll_dialog.add(name_t);
enroll_dialog.add(name);
enroll_dialog.add(password_t);
enroll_dialog.add(password);
enroll_dialog.add(enroll_ok);
enroll_dialog.setBounds(20, 10, 180, 350);
enroll_ok.addActionListener(new Enroll_BtnAction());
enroll_dialog.setVisible(true);
}
};
// 清空文本域
ActionListener del_action = new ActionListener() {
public void actionPerformed(ActionEvent e) {
message.setText("");
}
};
ActionListener update_action = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JDialog update_dialog = new JDialog(frame, "修改", true);
update_message= new JTextArea(18,20);
update_message_pane= new JScrollPane(update_message);
JButton update_ok = new JButton("确定");
update_message.setText(message.getText());
update_message.setWrapStyleWord(true);
update_dialog.add(update_message_pane);
update_dialog.add(update_ok);
update_dialog.setLayout(new FlowLayout());
update_dialog.setBounds(600, 100, 240, 400);
update_ok.addActionListener(new Update_BtnAction());
update_dialog.setVisible(true);
}
};
add.addActionListener(add_action);
del.addActionListener(del_action);
update.addActionListener(update_action);
}
// 控件初始化
public void init() {
frame.setBounds(100, 100, 400, 400);
panel.setLayout(new FlowLayout());
panel.add(add);
panel.add(del);
panel.add(update);
panel.add(message_pane);
message.setEditable(false);
frame.add(panel);
frame.setVisible(true);
frame.setDefaultCloseOperation(3);
}
}
6. 在java swing中如何实现通过代码按下一个按钮
API中的内容:
从类来 javax.swing.AbstractButton 继承的方法
doClick
public void doClick()
以编程源方式执行“单击”。此方法的效果等同于用户按下并随后释放按钮。
doClick
public void doClick(int pressTime)
以编程方式执行“单击”。此方法的效果等同于用户按下并随后释放按钮。按钮在虚拟“按下”状态下停留 pressTime 毫秒的时间。
参数:
pressTime - “按下”按钮的时间,以毫秒为单位
7. Java给按钮添加事件
示例代码如下:
importjava.awt.FlowLayout;
importjava.awt.event.*;
importjavax.swing.*;
{
publicDemo10(){
this.setTitle("按钮测试");
this.setSize(300,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setLayout(newFlowLayout());
JButtonbutton1=newJButton("按钮1");
//传统按钮监听器添加方式
button1.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEventarg0){
JOptionPane.showMessageDialog(null,"我是按钮1!");
}
});
this.add(button1);
JButtonbutton2=newJButton("按钮2");
//通过函数接口方式添加按钮监听器,Java8及以后版本支持
button2.addActionListener(e->{
JOptionPane.showMessageDialog(null,"我是按钮2!");
});
this.add(button2);
}
publicstaticvoidmain(String[]args){
newDemo10().setVisible(true);
}
}
运行结果:
8. 在Java Swing GUI中,要点击按钮弹出类似于上传文件的那个对话框,事件代码该怎么写谢谢!
String path = null;
JFileChooser fc = new JFileChooser();
fc.setDialogTitle("请选择要上传的文件...");
fc.setApproveButtonText("确定");
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
if (JFileChooser.APPROVE_OPTION == fc.showOpenDialog(this)) {
path=fc.getSelectedFile().getPath();
}
最后path 中的值就是选中的那个文件的路径,然后就是IO操作了。
那个this一般版是指当前权Frame或Panel,传入一个Component也可以