技术标签: Ĵava
Swing中的按钮是Jbutton,它是javax.swing.AbstracButton类的子类,swing中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可以将多个图像指定给一个按钮。
在JButton中有如下几个比较常用的构造方法。
JButton类的方法:
按钮组件是GUI中最常用的一种组件。按钮组件可以捕捉到用户的单击事件,同时利用按钮事件处理机制响应用户的请求。JButton类是Swing提供的按钮组件,在单击JButton类对象创建的按钮时,会产生一个ActionEvent事件。
代码实例:
1 package jFrameDemo; 2 3 import java.applet.*; 4 import java.awt.*; 5 import java.awt.event.*; 6 7 @SuppressWarnings("all") 8 public class ButtonDemo extends Applet implements ActionListener { 9 String msg = ""; 10 Button yes,no,undecided; 11 12 public void init() { 13 yes = new Button("Yes"); 14 no = new Button("No"); 15 undecided = new Button("Undecided"); 16 17 add(yes); 18 add(no); 19 add(undecided); 20 21 yes.addActionListener(this); 22 no.addActionListener(this); 23 undecided.addActionListener(this); 24 } 25 26 public void actionPerformed(ActionEvent ee) { 27 String str = ee.getActionCommand(); 28 if (str.equals("Yes")) { 29 msg = "您选择了Yes!"; 30 }else if (str.equals("No")) { 31 msg = "您选择了No!"; 32 }else { 33 msg = "您选择了Undecided!"; 34 } 35 repaint(); 36 } 37 38 public void paint(Graphics g){ 39 g.drawString(msg, 6, 100); 40 } 41 }
运行效果如下:
JRadioButton组件实现的是一个单选按钮。JRadioButton类可以单独使用,也可以与ButtonGroup类联合使用,当单独使用时,该单选按钮可以被选定和取消选定;当与ButtonGroup类联合使用,需要使用add()方法将JRadioButton添加到ButtonGroup中,并组成一个单选按钮组。此时用户只能选定按钮组中的一个单选按钮。
JRadioButton组件的常用方法:
【例】实例功能是选择用户所喜欢的城市。
1 package com.sy.swing; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 import javax.swing.*; 6 7 public class JRadioButtonTest extends JFrame { 8 9 /** 10 * Launch the application. 11 */ 12 public static void main(String[] args) { 13 EventQueue.invokeLater(new Runnable() { 14 public void run() { 15 try { 16 JRadioButtonTest frame = new JRadioButtonTest(); 17 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 18 frame.setBounds(100, 100, 450, 300); 19 frame.setTitle("单选框示例"); 20 frame.setVisible(true); 21 } catch (Exception e) { 22 e.printStackTrace(); 23 } 24 } 25 }); 26 } 27 28 /** 29 * Create the frame. 30 */ 31 public JRadioButtonTest() { 32 Container contentPane = getContentPane(); //创建一个内容面板容器 33 contentPane.setLayout(new FlowLayout()); //设置该窗口的布局 34 JPanel p1 = new JPanel(); //创建一个面板对象p1 35 p1.setLayout(new GridLayout(1, 3)); //设置布局管理器的格式 36 p1.setBorder(BorderFactory.createTitledBorder("选择你喜欢的城市")); 37 //定义3个JRadioButton单选按钮 38 JRadioButton r1 = new JRadioButton("北京"); 39 JRadioButton r2 = new JRadioButton("上海"); 40 JRadioButton r3 = new JRadioButton("青岛"); 41 p1.add(r1); 42 p1.add(r2); 43 p1.add(r3); 44 r1.setSelected(true); //设置"北京"单选按钮的状态为被选中 45 contentPane.add(p1); // 面板对象p1加到窗口内容面板容器中 46 pack(); 47 addWindowListener(new WindowAdapter() { 48 public void windowClosing(WindowEvent e){ 49 System.exit(0); 50 } 51 }); 52 } 53 }
代码运行结果如下
程序运行结果如图所示。程序首先创建JFrame窗口对象,内容版面(contentPane),并设置窗口的布局格式为流布局FlowLayout();之后定义3个JRadioButton对象,并设置各自的现实文本同事添加到面板对象p1中;然后为窗口设置事件监听。
使用复选框可以完成多项选择。Swing中的复选框与awt中的复选框相比,优点是Swing复选框中可以添加图片。复选框可以为每一次的单击操作添加一个事件。
复选框的构造方法如下。
常用方法:
代码实例:
1 package jFrameDemo; 2 3 import java.applet.*; 4 import java.awt.*; 5 import java.awt.event.*; 6 7 @SuppressWarnings("all") 8 public class CheckboxDemo extends Applet implements ItemListener { 9 String msg = ""; 10 Checkbox windows,android,solaris,mac; 11 12 public void init() { 13 windows = new Checkbox("Windows",null,true); 14 android = new Checkbox("Android"); 15 solaris = new Checkbox("Solaris"); 16 mac = new Checkbox("Mac"); 17 18 add(windows); 19 add(android); 20 add(solaris); 21 add(mac); 22 23 windows.addItemListener(this); 24 android.addItemListener(this); 25 solaris.addItemListener(this); 26 mac.addItemListener(this); 27 } 28 29 public void itemStateChanged(ItemEvent ie){ 30 repaint(); 31 } 32 33 public void paint(Graphics g){ 34 msg = "Current state:"; 35 g.drawString(msg, 6, 80); 36 msg = "Windows: " + windows.getState(); 37 g.drawString(msg, 6, 100); 38 msg = "Android: " + android.getState(); 39 g.drawString(msg, 6, 120); 40 msg = "Solaris: " + solaris.getState(); 41 g.drawString(msg, 6, 140); 42 msg = "Mac OS: " + mac.getState(); 43 g.drawString(msg, 6, 160); 44 } 45 }
代码运行展示如下:
JComboBox组件用来创建组合框对象。通常,根据组合框是否可编辑的状态,可以将组合框分成两种常见的外观。可编辑状态外观可视为文本框和下拉列表的组合,不可编辑状态的外观可视为按钮和下拉列表的组合。在按钮或文本框的右边有一个带三角符号的下拉按钮,用户可以单击该下拉按钮,便可出现一个内容列表,这也是组合框的得名。组合框通常用于从列表的”多个项目中选择一个”的操作。
JComboBox的构造方法有如下几种:
JComboBox(Object[] items):创建一个具有数组定义列表内容的组合框。
实例代码如下
1 package JFrameTest; 2 3 import java.awt.BorderLayout; 4 5 @SuppressWarnings("all") 6 public class ComboBoxFrame extends JFrame { 7 8 private JComboBox faceCombo; 9 private JLabel label; 10 private static final int DEFAULT_SIZE = 24; 11 12 /** 13 * Launch the application. 14 */ 15 public static void main(String[] args) { 16 EventQueue.invokeLater(new Runnable() { 17 public void run() { 18 try { 19 ComboBoxFrame frame = new ComboBoxFrame(); 20 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 21 frame.setBounds(100, 100, 450, 300); 22 frame.setVisible(true); 23 } catch (Exception e) { 24 e.printStackTrace(); 25 } 26 } 27 }); 28 } 29 30 /** 31 * Create the frame. 32 */ 33 public ComboBoxFrame() { 34 label = new JLabel("The quick brown fox jumps over the lazy dog."); 35 label.setFont(new Font("Serif",Font.PLAIN,DEFAULT_SIZE)); 36 add(label,BorderLayout.CENTER); 37 38 faceCombo = new JComboBox(); 39 faceCombo.addItem("Serif"); 40 faceCombo.addItem("SnsSerif"); 41 faceCombo.addItem("Monospaced"); 42 faceCombo.addItem("Dialog"); 43 faceCombo.addItem("DialogInput"); 44 45 faceCombo.addActionListener(new ActionListener() { 46 47 @Override 48 public void actionPerformed(ActionEvent e) { 49 // TODO Auto-generated method stub 50 label.setFont(new Font((String) faceCombo.getItemAt(faceCombo.getSelectedIndex()),Font.PLAIN,DEFAULT_SIZE)); 51 } 52 }); 53 54 JPanel comboJPanel = new JPanel(); 55 comboJPanel.add(faceCombo); 56 add(comboJPanel,BorderLayout.SOUTH); 57 pack(); 58 } 59 60 }
代码运行结果如图
JList组件用于定义列表,允许用户选择一个或多个项目。与JTextArea类似,JList本身不支持滚动功能,如果要显示超出显示范围的项目,可以将JList对象放置到滚动窗格JScrollPane对象中,变可以为列表对象实现滚动操作。
JList的构造方法如下:
常用方法如下:
JTextField组件用于创建文本框。文本框是用来接收用户的单行文本信息输入的区域。通常文本框用于接收用户信息或其他文本信息的输入。当用户输入文本信息后,如果为JTextField对象添加了事件处理,按回车键后就会触发一定的操作。
JPasswordField是JTextField的子类,是一种特殊的文本框,也是用来接收单行文本信息输入的区域,但是会用回显字符串代替输入的文本信息。因此,JPasswordField组件也称为密码文本框。JPasswordField默认的是回显字符是”*”,用户可以自行设置回显字符。
JTextField的常见构造方法有如下几种:
JTextField的常用方法:
JPasswordField的构造方法有如下几种:
JPasswordField是JTextField的子类,因此JPasswordField也具有与JTextField类似的名称和功能的方法,此外,它还具有与JTextField类似的名称和功能的方法,此外,它还具有自己的独特方法:
代码实例如下
1 package dataExchange; 2 3 import java.awt.BorderLayout; 4 import java.awt.EventQueue; 5 import java.awt.event.ActionEvent; 6 import java.awt.event.ActionListener; 7 8 import javax.swing.JFrame; 9 import javax.swing.JMenu; 10 import javax.swing.JMenuBar; 11 import javax.swing.JMenuItem; 12 import javax.swing.JScrollPane; 13 import javax.swing.JTextArea; 14 15 @SuppressWarnings("all") 16 public class DataExchangeFrame extends JFrame { 17 18 public static final int TEXT_ROWS = 20; 19 public static final int TEXT_COLUMNS = 40; 20 private PasswordChooser dialog = null; 21 private JTextArea textArea; 22 23 /** 24 * Launch the application. 25 */ 26 public static void main(String[] args) { 27 EventQueue.invokeLater(new Runnable() { 28 public void run() { 29 try { 30 DataExchangeFrame frame = new DataExchangeFrame(); 31 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 32 frame.setBounds(100, 100, 450, 300); 33 frame.setVisible(true); 34 } catch (Exception e) { 35 e.printStackTrace(); 36 } 37 } 38 }); 39 } 40 41 /** 42 * Create the frame. 43 */ 44 public DataExchangeFrame() { 45 JMenuBar mbar = new JMenuBar(); 46 setJMenuBar(mbar); 47 JMenu fileMenu = new JMenu("File"); 48 mbar.add(fileMenu); 49 50 JMenuItem connectItem = new JMenuItem("Connect"); 51 connectItem.addActionListener(new ConnectAction()); 52 fileMenu.add(connectItem); 53 54 JMenuItem exitItem = new JMenuItem("Exit"); 55 exitItem.addActionListener(new ActionListener() { 56 public void actionPerformed(ActionEvent e) { 57 System.exit(0); 58 } 59 }); 60 61 fileMenu.add(exitItem); 62 63 textArea = new JTextArea(TEXT_ROWS,TEXT_COLUMNS); 64 add(new JScrollPane(textArea),BorderLayout.CENTER); 65 pack(); 66 } 67 68 public class ConnectAction implements ActionListener{ 69 public void actionPerformed(ActionEvent e) { 70 if (dialog == null) { 71 dialog = new PasswordChooser(); 72 } 73 74 dialog.setUser(new User("yourname", null)); 75 76 if (dialog.showDialog(DataExchangeFrame.this, "Connect")) { 77 User user = dialog.getUser(); 78 textArea.append("Username = " + user.getName() + ",password = " + (new String(user.getPassword())) + "\n"); 79 } 80 } 81 } 82 83 }
运行如下
点击file,选择connect,效果如下:
上面运行代码如下:
1 package dataExchange; 2 3 import java.awt.BorderLayout; 4 5 @SuppressWarnings("serial") 6 public class PasswordChooser extends JPanel { 7 8 private JTextField username; 9 private JPasswordField password; 10 private JButton okButton; 11 private boolean ok; 12 private JDialog dialog; 13 14 /** 15 * Create the panel. 16 */ 17 public PasswordChooser() { 18 setLayout(new BorderLayout()); 19 JPanel panel = new JPanel(); 20 panel.setLayout(new GridLayout(2, 2)); 21 panel.add(new JLabel("Username:")); 22 panel.add(username = new JTextField()); 23 panel.add(new JLabel("Password:")); 24 panel.add(password = new JPasswordField()); 25 add(panel,BorderLayout.CENTER); 26 27 okButton = new JButton("Ok"); 28 okButton.addActionListener(new ActionListener() { 29 public void actionPerformed(ActionEvent e) { 30 ok = true; 31 dialog.setVisible(true); 32 } 33 }); 34 35 JButton cancelButton = new JButton("Cancel"); 36 cancelButton.addActionListener(new ActionListener() { 37 public void actionPerformed(ActionEvent e) { 38 dialog.setVisible(false); 39 } 40 }); 41 42 JPanel buttonPanel = new JPanel(); 43 buttonPanel.add(okButton); 44 buttonPanel.add(cancelButton); 45 add(buttonPanel,BorderLayout.SOUTH); 46 } 47 48 public void setUser(User u){ 49 username.setText(u.getName()); 50 } 51 52 public User getUser(){ 53 return new User(username.getText(),password.getPassword()); 54 } 55 56 public boolean showDialog(Component parent,String title){ 57 ok = false; 58 Frame owner = null; 59 if (parent instanceof Frame) { 60 owner = (Frame)parent; 61 }else { 62 owner = (Frame)SwingUtilities.getAncestorOfClass(Frame.class, parent); 63 } 64 65 if (dialog == null || dialog.getOwner() != owner) { 66 dialog = new JDialog(owner,true); 67 dialog.add(this); 68 dialog.getRootPane().setDefaultButton(okButton); 69 dialog.pack(); 70 } 71 72 dialog.setTitle(title); 73 dialog.setVisible(true); 74 return ok; 75 } 76 77 }
JPanel组件定义面板实际上是一种容器组件,用来容纳各种其他轻量级组件。此外,用户还可以用这种面板容器绘制图形。
JPanel的构造方法如下:
JPanel的 常用方法:
代码实例如下:
1 package com.sy.swing; 2 3 import java.awt.BorderLayout; 4 import java.awt.Color; 5 import java.awt.Container; 6 import java.awt.Dimension; 7 import java.awt.FlowLayout; 8 import java.awt.Graphics; 9 10 import javax.swing.JButton; 11 import javax.swing.JFrame; 12 import javax.swing.JPanel; 13 14 public class JPanelExample extends JFrame { 15 JButton[] buttons; 16 JPanel panel1; 17 CustomPanel panel2; 18 19 public JPanelExample(){ 20 super("面板实例"); 21 Container container = getContentPane(); 22 container.setLayout(new BorderLayout()); 23 panel1 = new JPanel(new FlowLayout()); //创建一个流布局管理器的面板 24 buttons = new JButton[4]; 25 for (int i = 0; i < buttons.length; i++) { 26 buttons[i]=new JButton("按钮"+(i+1)); 27 panel1.add(buttons[i]); //添加按钮到面板panel1中 28 } 29 panel2 = new CustomPanel(); 30 container.add(panel1,BorderLayout.NORTH); 31 container.add(panel2,BorderLayout.CENTER); 32 pack(); 33 setVisible(true); 34 } 35 36 public static void main(String[] args) { 37 JPanelExample jpe = new JPanelExample(); 38 jpe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 39 } 40 41 class CustomPanel extends JPanel{ //定义内部类CustomPanel 42 @Override 43 protected void paintComponent(Graphics g) { 44 super.paintComponent(g); 45 g.drawString("Welcome to Java Shape World", 20, 20); 46 g.drawRect(20, 40, 130, 130); 47 g.setColor(Color.GREEN); //设置颜色为绿色 48 g.fillRect(20, 40, 130, 130); //绘制矩形 49 g.drawOval(160, 40, 100, 100); //绘制椭圆 50 g.setColor(Color.ORANGE); //设置颜色为橙色 51 g.fillOval(160, 40, 100, 100); //绘制椭圆 52 } 53 @Override 54 public Dimension getPreferredSize() { 55 // TODO Auto-generated method stub 56 return new Dimension(200,200); 57 } 58 } 59 60 }
运行结果如下:
表格是Swing新增加的组件,主要功能是把数据以二维表格的形式显示出来。使用表格,一句M-V-C思想,最好先生成一个MyTableModel类型的对象来表示数据,这个类是从AbstractTableModel累中集成来的,其中有几个方法移动要重写,例如geColumnCount、getRowCount、getColumnName和getValueAt。因为JTable会从这个对象中自动获取表格显示必须的数据,AbstractTableModel类的对象负责表格大小的确定(行、列)、内容的填写、赋值、表格单元更新的检测等一切与表哥内容有关的属性及其操作。JTable类生成的对象以该TableModel为参数,并负责将TableModel对象中的数据以表格的形式显示出来。
TableRenderDemo
代码运行结果如下:
参考:http://www.cnblogs.com/pzy4447/p/4925125.html
框架SwingGUI应用程序的主窗口,窗口包括边界、标题、关闭按钮等。
JFrame类是java.awt包中Frame类的子类,其子类创建的对象是窗体,对象(窗体)是重量容器。不能把组件直接添加到Swing窗体中,其含有内容面板容器,应该把组件添加到内容面板中;不能为Swing窗体设置布局,而应当Swing窗体的内容面板设置布局。
Swing窗体通过getContentPane()方法获得JFrame的内容面板,再对其加入组件;
JFrame frame = new JFrame();
Container ct = frame.getContentPane(); //获取内容面板容器
Ct.add(childComponent); //降内容面板容器加入组件
框架(JFrame)常用的方法和事件:
代码实例:
1 package jFrameDemo; 2 3 import java.awt.EventQueue; 4 5 import javax.swing.JFrame; 6 7 public class SimpleFrameTest { 8 public static void main(String[] args) { 9 /*所有的Swing组件必须由事件分派线程(event dispatch thread)进行配置, 10 *线程将鼠标点击和按钮控制转移到用户接口组件。下面的代码片段是事件分派线程中的执行代码。 11 *现在,只需要将其看成是启动一个Swing程序的神器代码。 12 */ 13 EventQueue.invokeLater(new Runnable(){ 14 @Override 15 public void run() { 16 // TODO Auto-generated method stub 17 SimpleFrame frame = new SimpleFrame(); 18 frame.setTitle("JFrame测试"); 19 //定义一个用户关闭这个框架时的响应动作。 20 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 21 //为了框架显示,main方法需要需要调用框架的setVisible方法 22 frame.setVisible(true); 23 } 24 }); 25 } 26 } 27 28 @SuppressWarnings("all") 29 class SimpleFrame extends JFrame{ 30 private static final int DEFAULT_WIDTH = 400; 31 private static final int DEFAULT_HEIGHT = 200; 32 33 public SimpleFrame(){ 34 setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); 35 } 36 }
代码实例运行结果如下:
文章浏览阅读557次。转自:https://www.cnblogs.com/sky-heaven/p/4800848.html。在linux使用platform_driver_register() 注册 platform_driver 时, 需要在 platform_driver 的probe() 里面知道设备的中断号, 内存地址等资源。这些资源的描述信息存放在 resource 数据结构中, 相同的资源存放在一..._platform_get_resource 中断号
文章浏览阅读2.9k次。上一期:重装系统——制作U盘启动盘 本期讲解BIOS设置 U盘启动,首先找一款适合自己的系统。网上有很多系统(如深度,雨林木风,系统之家)等等很多的名称。但是他们都大同小异。小编也给大家提供了几个官方网站:深度系统:http://www.deepinghost.com/雨林木风:http://www.ylmfeng.com/index.html系统之家:http://www.xitongzhiji..._炫龙笔记本如何进入bios
文章浏览阅读1.1k次。Oracle DatabasePatch 13621679 - 11.1.0.7.11 Patch Set Update Released: April 17, 2012This document is accurate at the time of release. For any changes and additional information regar_11.1.0.7patch
文章浏览阅读2.7k次。1.首先我们需要安装所需依赖,我们的依赖是全部写在了requirement文件里,可直接通过下面的命令Pip。 pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ -r requirements.txtrequirements文件内容是这样的,这包含了我们所需要的依赖包。2.从项目目录下运行安装程序python setup.py install3.下载预处理好的COCO权重模型,可以去github也可以去csdn下_mask rcnn数据集
文章浏览阅读839次。合并merge()# 基于列进行合并, how有多种方式 inner内联 outer外联 left 左联 right 右联df1.merge(df2, left_on='key1', right_on='key2', how='inner')df1.merge(df2, on='key') # 如果两个表合并的依据的列明是同名的时候 可以直接用on来代替left_on 和 right_o..._数据 分析规范化 处理 整合
文章浏览阅读113次。1. 进入slitaz系统sudo su - 切换为root用户2. fdisk -l Device Boot Start End Blocks Id System/dev/sda1 * 1 9562 76800000 7 HPFS/NTFS/dev/sda2 ..._idupan 使用
文章浏览阅读1.3k次。中国大学MOOC“Python程序设计基础”第5次开课推荐图书:《Python程序设计(第3版)》,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月..._sqlite_sequence
文章浏览阅读859次。DNS用CNAME解析到源站回源缓存的设置强推失效cdn理解http 的cache control响应头private:客户端可以缓存public:客户端和代理服务器都可以缓存max-age=xxx:缓存的内容将在xxx秒后失效no-cache:强制向服务端再验证一次no-store:不缓存请求的任何返回内容有效性判断ETag: 资源唯一标识 返回304 not modifyIf-None-Match:客户端发送的匹配Etag..._项目中静态资源如何处理的,cdn还是什么方法?
文章浏览阅读2.7k次,点赞4次,收藏13次。一、概述L2TP是第二层隧道协议。隧道建立在LAC(L2TP客户端)和LNS(L2TP服务器)之间。隧道由一个控制连接和0-n个L2TP会话(用来传输PPP数据包的会话)组成。一对LAC和LNS之间可以有若干个隧道。L2TP由两种类型的报文,一种是控制报文一种是数据报文。控制报文用于隧道和通话的建立、维护和清除。数据报文封装PPP帧,并在隧道上传输。形象点说是这样的,隧道是一条有N条车道的高速公路,一台拨号PC的数据流就是一条会话,占用了一条公路,这条公路上只能传输这台PC的报文,运载报文在..._l2tp header remove
文章浏览阅读2.7k次,点赞2次,收藏11次。HTTP和HTTPS的基本概念HTTP:超文本传输协议,是在互联网上应用最广泛的一种网络协议。是一个客户端和服务端请求和应答的标准(TCP),用于从WWW(超文本)服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。HTTPS:是以安全为目标的HTTP通道,可以看做是HTTP的安全版,即HTTP+SSL层。HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL..._服务器端口和http端口有什么区别
文章浏览阅读164次。A Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue. Each Handler instance is associated with a single thread and that thread's message queue.
文章浏览阅读1.1k次。<view class="tabs_photo"> <van-tabs active="{{ active }}"> <van-tab title="全部图片"> <scroll-view scroll-x="true"> <view class="banner" scroll-x="true"> <view class="banner_Item" wx:for="{{PhotoLis._微信开发者工具图片如何并列