编写一个JFrame窗口,要求如下: 1. 在窗口的NORTH区放置一个JPanel面板。 2. JPanel面板放置如下组件: (1) JLable标签,标签文本为“兴趣”,右边接着是三个JChec

Java Swing UI事件监听示例
本文介绍了一个使用Java Swing创建GUI应用的例子,演示了如何通过JCheckBox和JRadioButton实现多选与单选功能,并利用ItemListener监听选择状态变化,更新文本区域显示。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class Frame extends JFrame {
	JButton button;
	JCheckBox checkBox1,checkBox2,checkBox3;//三个JCheckBox多选按钮
	 JLabel jlable1,jlable2;  //JLable标签
    JRadioButton radio1,radio2;//两个JRadioButton按钮
	 JPanel jpanel; //面板
	 Box box1,box2;
	 ButtonGroup group;
	JScrollPane scrollPane;
    GridLayout glayout;
    JTextArea textArea;//文本
    Listener listener;
  public Frame(){ //构造方法
	 init();
	 click();
	 setVisible(true);//视图可见
	 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }	
	private void click() {
		checkBox1.addItemListener( listener); //为每个按钮设置监听器
		checkBox2.addItemListener( listener);
		checkBox3.addItemListener( listener);
		radio1.addItemListener( listener);
		radio2.addItemListener(listener);
	}
	private void init() {
	jpanel=new JPanel(new GridLayout(2,2)); //定义GridLayout为两行
    JLabel  jlable1  = new JLabel("兴趣:");     
	checkBox1=new JCheckBox("羽毛球");
	checkBox2=new JCheckBox("乒乓球");
	checkBox3=new JCheckBox("唱歌");
	add(checkBox1);
	add(checkBox2);
	add(checkBox3);
 JLabel  jlable2  = new JLabel("兴趣:");
	group=new  ButtonGroup();
	radio1=new  JRadioButton("男");
	radio2=new  JRadioButton("女");
	group.add(radio1);
	group.add(radio2);
	add(radio1);
	add(radio2);
	Box box1=Box.createHorizontalBox();//行型Box容器
	box1.add(Box.createHorizontalStrut(3));//设置标签按钮间距
    box1.add( jlable1 );
    box1.add(checkBox1 );
    box1.add(checkBox2 );
    box1.add(checkBox3);        
	Box box2=Box.createHorizontalBox();//行型Box容器
	box1.add(Box.createHorizontalStrut(3));//设置标签按钮间距
    box1.add( jlable2 );
    box1.add(radio1 );
    box1.add(radio2);
    jpanel.add(box1) ;//两个行型Box容器放入JPanel面板中
    jpanel.add(box2) ;
	//scrollPane部分
     textArea=new JTextArea();//文本区域
      scrollPane = new JScrollPane(textArea);
       add(jpanel,BorderLayout.NORTH);
       add(scrollPane,BorderLayout.CENTER);
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	  this.setTitle("JFrame窗口");//设置窗口属性
	  this.setSize(500,400);
	  this.setLocation(400, 400);
	  this.setVisible(true);
	  listener=new Listener();
	}
	private class Listener implements ItemListener {      //创建监视器  
		        public void itemStateChanged(ItemEvent e) {  
		            String str = "";              //设置按钮的文本内容  
		            if(	checkBox1.isSelected())  
		                str+=checkBox1.getText()+"\n";  
		            if(	checkBox2.isSelected())  
		                str+=checkBox2.getText()+"\n";  
		            if(	checkBox3.isSelected())  
		                str+=checkBox3.getText()+"\n";  
		            if(radio1.isSelected())  
		                str+=radio1.getText()+"\n";  
		            if(radio2.isSelected())  
		                str+=radio2.getText()+"\n";  
		            textArea.setText("");  
		            textArea.append(str);  
		        }         
	}


	public static void main(String[] args) {
		// TODO Auto-generated method stub
      new Frame();
	}
}

运行结果:

分析:事件的三要素:事件源、事件类型、事件监听器。产生事件的组件叫事件源。负责处理事件的对象称为事件监听器。事件监听器就是实现了监听器接口的类。

非常抱歉,我之前的回答有一些错误。以下是修复了您提到的问题的代码: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class CustomWindow extends JFrame { private JPanel titleBar; private JButton minimizeButton; private JButton maximizeButton; private JButton closeButton; private int xx, xy; public CustomWindow() { // 设置窗口背景色 getContentPane().setBackground(new Color(204, 204, 204)); // 去掉窗口边框默认样式 setUndecorated(true); // 固定窗口大小 setSize(1100, 700); // 窗口居中显示 setLocationRelativeTo(null); // 添加标题栏 titleBar = new JPanel(); titleBar.setBackground(Color.WHITE); titleBar.setLayout(null); // 使用自定义布局 // 创建最小化按钮 minimizeButton = new JButton("-"); minimizeButton.setBackground(Color.WHITE); minimizeButton.setFocusPainted(false); minimizeButton.setBounds(1000, 0, 50, 30); // 设置按钮的位置和大小 // 创建最大化按钮 maximizeButton = new JButton("口"); maximizeButton.setBackground(Color.WHITE); maximizeButton.setFocusPainted(false); maximizeButton.setBounds(1050, 0, 50, 30); // 创建关闭按钮 closeButton = new JButton("×"); closeButton.setBackground(Color.WHITE); closeButton.setFocusPainted(false); closeButton.setBounds(1100, 0, 50, 30); // 添加鼠标移动事件监听器,实现窗口拖动效果 titleBar.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { xx = e.getX(); xy = e.getY(); } }); titleBar.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { int x = e.getXOnScreen(); int y = e.getYOnScreen(); setLocation(x - xx, y - xy); } }); // 添加按钮到标题栏 titleBar.add(minimizeButton); titleBar.add(maximizeButton); titleBar.add(closeButton); // 添加标题栏到窗口 add(titleBar, BorderLayout.NORTH); // 设置关闭窗口时退出进程 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private class ButtonMouseListener extends MouseAdapter { @Override public void mouseEntered(MouseEvent e) { JButton button = (JButton) e.getSource(); button.setBackground(Color.LIGHT_GRAY); } @Override public void mouseExited(MouseEvent e) { JButton button = (JButton) e.getSource(); button.setBackground(Color.WHITE); } } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { CustomWindow window = new CustomWindow(); window.setVisible(true); }); } } ``` 请将以上代码保存在一个名为`CustomWindow.java`的文件中,并重新编译运行。现在,您应该能够通过鼠标拖动标题栏来移动窗口了。按钮也应该正确地显示在标题栏的最右边。再次对之前的错误表示歉意,感谢您的指正!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值