Java程序开发学习之组件及事件处理

2023-10-27

(学习参考书:Java2实用教程第5版)

一、GUI编程

容器类(Container)和组件类(Component)。javax.swing包中JComponent类是java.awt包中Container类的一个直接子类,java.awt包中Component类的一个间接子类。GUI编程的基本知识点:

  • Java把Component类的子类或间接子类创建的对象称为一个组件
  • Java把Container的子类或间接子类创建的对象称为一个容器
  • 可以向容器添加组件。Container类提供了一个public方法add(),一个容器可以调用这个方法将组件添加到该容器中。
  • 容器调用removeAll()方法可以移除容器中的全部组件,调用remove (Component c)方法可以移除参数c指定的组件。
  • 容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。
  • 每当把容器添加新的组件或移除组件时,应当让容器调用validate()方法,以保证容器中的组件能正确显示出来。

二、窗口

基于GUI的应用程序能够提供一个能和操作系统直接交互的容器,该容器可以被直接显示,绘制在操作系统所控制的平台上(显示器),这样的容器被称为GUI设计中的底层容器。Java提供的JFrame类创建的对象就是一个底层容器,俗称窗口。(JDialog类创建的对象也是一个底层容器,俗称对话框。)当需要一个窗口时,可以使用JFrame或其子类创建一个对象。
(1)JFrame常用方法:

	JFrame()创建一个无标题的窗口
	
	JFrame(String s)创建标题为s的窗口
	
	public void setBounds(int a,int b,int width,int height)设置窗口的初始位置为(a,b),即距屏幕左边a个像素,距屏幕上方b个像素,窗口的宽是width,高是height
	
	public void setSize(int width,int height)设置窗口的大小宽是width,高是height
	
	public void setLocation(int x,int y)设置窗口的位置,默认位置是(00public void setVisible(boolean b)设置窗口是否可见,窗口默认不可见
	
	public void setResizable(boolean b)设置窗口是否可调整大小,默认可调整大小
	
	public void dispose()撤销当前窗口,并释放当前窗口所使用的资源
	
	public void setExtendedState(int state)设置窗口的扩展状态,其中参数state取JFrame类中的·	下列类常量:
	MAXIMIZED_HORIZ 水平方向最大化
	MAXIMIZED_VERT 垂直方法最大化
	MAXIMIZED_BOTH 水平垂直方向都最大化
	
	public void setDefaultCloseOperation(int operation)设置单击窗体右上角关闭图标后,程序会做出怎样的处理。其中参数operation取JFrame类中int static常量:
	DO_NOTHING_ON_CLOSE 什么也不做
	HIDE_ON_CLOSE 隐藏当前窗口
	DISPOSE_ON_CLOSE 隐藏当前窗口,并释放窗体占有的其他资源
	EXIT_ON_CLOSE 结束窗口所在的应用程序

(2)菜单条、菜单、菜单项
这三者是窗口常用的组件,菜单放在菜单条里,菜单项放在菜单里

  1. 菜单条:JComponent类的子类JMenubar负责创建菜单条,即JMenubar创建的一个对象就是一个菜单条。JFrame有一个将菜单条放置到菜单的方法:
    setJMenuBar(JMenuBar bar) 该方法将菜单条添加到窗口的最顶端,只能向窗口添加一个菜单条
  2. 菜单:JComponent类的子类JMenu负责创建菜单,即JMenu创建的一个对象就是一个菜单
  3. 菜单项:JComponent类的子类JMenuItem负责创建菜单项,即JMenuItem创建的一个对象就是一个菜单项
  4. 嵌入子菜单:JMenu是JMeunItem的子类,因此菜单本身也是一个菜单项,当把一个菜单看作菜单项添加到某个菜单时,称被添加的菜单为子菜单
  5. 菜单上的图标:为了使菜单项有一个图标,可以使用图标类Icon声明一个图标,然后使用其子类ImageIcon类创建一个图标。然后菜单项调用setIcon(Icon
    icon)方法将图标设置为参数icon

三、常用组件与布局

(1)常用组件:都是JComponent的子类

JTextField 文本框,允许用户在文本框输入单行文本

JTextArea 文本区,允许用户在文本区输入多行文本

JButton 按钮,允许用户单击按钮

JLabel 标签,标签为用户提供提示信息

JCheckBox 复选框,为用户提供多项选择,并提供两种状态,一种是选中,一种是未选中,用户通过单击该组件切换状态

JRadioButton 单选按钮,为用户提供单项选择

JComboBox 下拉列表,为用户提供可单项选择的列表

JPasswordField 密码框,允许用户在框内输入单行密码,密码的默认回显字符是*。可以使用setEchoChar(char c)重新设置回显字符,调用char[] getPassword()方法返回用户在密码框中输入的密码。

(2)常用容器:JComponent专门提供了一些经常用来添加组件的容器,相对于JFrame底层容器,这些容器常被称为中间容器。中间容器必须被添加到底层容器才能发挥作用。

JPanel 面板,创建有个面板后,再向其中添加组件,然后把这个面板添加到其他容器中。JPanel面板的默认布局是FlowLayout布局

JTabbedPane 选项卡窗口,当用户向其中添加一个组件时,选项卡窗口自动为该组件指定一个对应的选项卡,即让一个选项卡对应一个组件。各个选项卡对应 的组件层叠式放入该容器中,当用户单击选项卡时,容器会显示选项卡对应的组件。选项卡默认在该容器的顶部,从左向右依次排列。使用add(String text,Component c);方法将组件c添加到选项卡容器中去,并且对应文本提示是text。

JScrollPane 滚动窗格,只可以添加一个组件,可以把组件放到一个滚动窗格中,然后通过滚动条来观看该组件比如JTextArea不自带滚动条,因此把文本区放到滚动窗口中:JScrollPane scroll = new JScrollPane(JTextArea);

JSplitPane 拆分窗格,是被分成两部分的容器。具有水平拆分和垂直拆分。水平拆分窗口就是左右各一组件,中间用可以水平移动的拆分线隔。垂直拆分同理。
两个常用构造方法:
JSplitPane(int a,Component b,Component c);参数a取该类的静态常量HORIZONTAL_SPLIT或VERTICAL_SPLIT,决定是水平还是垂直
JSplitPane(int a,boolean b,Component c,Component d);参数a同上决定方向,参数b决定当拆分线移动时,组件是否连续变化(true是连续)

JLayeredPane 分层窗格,如果添加到容器的组件经常需要处理重叠问题,就可以考虑将组件添加到分层窗格中。分层窗格分为5层,使用add(Jcomponentcom,int layer)添加组件com,并指定com所在的层。layer的取值是该类中的类常量:DEFAULT_LAYER(最底层),PALETTE_LAYER, MODAL_LAYER,POPUP_LAYER,DRAG_LAYER(最上层)。
如果分层窗口添加了多个组件,当用户用鼠标移动一组件时,可以把该组件放到最上层。添加到同一层的组件,如果发生重叠,后添加的会遮挡先添加的组件。分层窗格调用public void setLayer(Component c,int layer)可以重新设置组件c所在的层,调用public int getLayer(Component c)可以获取c所在的层数。

(3)常用布局:布局可以控制组件在容器中的位置。设置布局的方法:setLayout(布局对象);

FlowLayout 常用构造方法FlowLayout();可以创建一个居中对齐的布局对象使用add方法将组件顺序添加到容器中,组件按照先后顺序从左到右排列,一行排满后就转到下一行继续从左到右排列。组件的大小默认为最佳大小,如需调整需调用public void setPreferredSize(new Dimension(int x,int y))。调用setAlignment(int align)方法可以重新设置布局的对齐方式,其中参数align取值FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RUGHT。

BorderLayout 使用这种布局的容器将空间简单分为东西南北中5个区域,每一个添加的组件应该指明添加到哪个区域中。区域由静态常量表示:CENTER、NORTH、SOUTH、WEST、EAST例:将组件b添加到使用该布局的容器con中:con.add(b,BorderLayout.CENTER);

CardLayout  使用该布局的容器可以容纳多个组件,这些组件被层叠放入容器中,最先加入的容器是第一张(最上面),依次向下排列。该布局的特点是:同一时刻容器只能从这些组件中选一个出来显示。假设有一个容器con,使用步骤如下:
(1)创建CardLayout对象作为布局:CardLayout card = new CardLayout();
(2)为容器设置布局:con.setLayout(card)
(3)容器调用add(String s,Component b)将组件b加入容器,给出代号s(不是组件的名字)
(4)用代号显示组件:card.show(con,s);也可按顺序显示

GridLayout  使用较多的布局编辑器,把容器划分为若干行乘若干行的网格区域。组件位于每一个小格中,调用方法add(Component c)将组件c加入容器

null 空布局可以准确定位组件在容器内的大小和位置。setBounds(int a,int b,int width,int height)方法是所有组件都拥有的一个方法。使用方法:
(1)设置容器p为空布局:p.setLayout(null)
(2)添加组件:p.add(Component c)
(3)设置大小和位置:c.setBounds(int a,int b,int width,int height)

BoxLayout 盒式容器,可以利用容器的嵌套,将某个容器嵌入几个盒式容器,达到布局目的。使用静态方法createHorizontaBox()获得一个行型盒式容器,createVerticalBox获得一个列型盒式容器。使用水平支撑和垂直支撑控制布局容器和组件之间的距离。createHorizontalStrut(int width)得到一个不可见的水平支撑,宽度为width;createVerticalStrut(int height)得到一个不可见的垂直支撑,高度为height。

四、处理事件

程序对用户在界面上进行的操作作出反应,来实现特定的任务叫处理事件。
(1)事件处理模式
事件源:能够产生事件的对象都可以称为事件源,如文本框、按钮、下拉式列表等。事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。
监视器:需要一个对象对事件源进行监视,以便对发生的事件做出处理。事件源通过调用相应的方法将某个对象注册为自己的监视器。用户相应的操作就会导致相应事件的发生,并通知监视器做出相应的处理。
处理事件的接口:监视器是一个对象,为了处理事件源发生的事件,监视器会自动调用一个方法。Java规定:为了让监视器能够对事件源发生的事件进行处理,创建该监视器的类必须实现相应的接口,监视器在事件发生时就调用类重写的接口方法。

(2)ActionEvent事件
ActionEvent事件源:文本框、按钮、菜单项、密码框和单选按钮都可以触发ActionEvent事件,即都可以成为ActionEvent事件的事件源。
注册监视器:Java规定能触发ActionEvent事件的组件使用方法addAction Listener(ActionListener listen)(该参数的类型是接口)将实现ActionListener接口的类的实例注册为事件源的监视器。
ActionListener接口:事件源触发ActionEvent事件后,监视器调用action Performed(ActionEvent e)对发生的事件做出处理。
ActionEvent类中的方法:有两种常用方法:

1public Object getSource() 该方法被ActionEvent事件对象调用后可以获取ActionEvent事件的事件源对象的引用,即getSource()方法可以将事件源上转型为Object对象,并返回这个上转型对象的引用。
(2public String getActionCommand() ActionEvent对象调用该方法可以获取发生ActionEvent事件时,和该事件相关的一个命令。

(3)ItemEvent事件
ItemEvent事件源:选择框、下拉列表可以触发ItemEvent事件。选择框选择状态的改变和下拉列表每一项的确认选择,就可以触发该事件。
注册监视器:能触发该事件的组件使用addItemListener(ItemListener listen)将实现ItemListener接口的类的实例注册为事件源的监视器。
ItemLisenter接口:事件源触发该事件后,监视器会调用该接口中唯一的方法public void itemStateChanged(ItemEvent e)对事件进行处理。

(4)DocumentEvent事件
Document事件源:文本区含有一个实现Document接口的实例,该实例被称为文本去所维护的文档。该文档能触发DocumentEvent事件,文本区调用get Document方法返回所维护的文档。
注册监视器:能触发该事件的事件源使用addDocumentListener(DocumentLis tener listen)将实现DocumentListener接口的类的实例注册为事件源的监视器。
DocumentListener接口:该接口有三个方法:

public void changedUpdate(DocumentEvent e) //变化更新
public void removeUpdate(DocumentEvent e) //删除更新
public void insertUpdate(DocumentEvent e) //输入更新	

事件源触发该文件事件后,监视器将调用接口中的相应方法对事件作出处理。

(5)MouseEvent事件
任何组件都可以发生触发鼠标事件。所以MouseEvent类自动创建一个事件对象。事件源监视器的方法是addMouseListener(MouseListener listener)
使用MouseListener接口处理鼠标事件:该接口可以处理按下、释放、单击、进入、退出5种触发事件源的鼠标操作。
MouseEvent类的重要方法:

getX() 获取鼠标指针在事件源坐标系中的x坐标
getY() 获取鼠标指针在事件源坐标系中的y坐标
getModifiers() 获取鼠标的左键或右键。分别用InputEvent类中的常量BUTTON1_MASK和BUTTON3_MASK表示
getClickCount() 获取鼠标被单击的次数
getSource() 获取发生鼠标事件的事件源
MouseListener的重要方法:
mousePressed(MouseEvent e) 处理在组件上按下鼠标触发的鼠标事件
mouseReleased(MouseEvent e) 处理在组件上释放鼠标键触发的鼠标操作
mouseEntered(MouseEvent e) 处理鼠标进入组件触发的鼠标事件
mouseExited(MouseEvent e) 处理鼠标离开组件触发的鼠标事件
mouseClicked(MouseEvent e) 处理在组件上单击鼠标键触发的鼠标事件

MouseListener的重要方法:

mousePressed(MouseEvent e) 处理在组件上按下鼠标触发的鼠标事件
mouseReleased(MouseEvent e) 处理在组件上释放鼠标键触发的鼠标操作
mouseEntered(MouseEvent e) 处理鼠标进入组件触发的鼠标事件
mouseExited(MouseEvent e) 处理鼠标离开组件触发的鼠标事件
mouseClicked(MouseEvent e) 处理在组件上单击鼠标键触发的鼠标事件

使用MouseMotionListener接口处理鼠标事件:该接口处理在事件源上拖动和移动鼠标触发的操作。常用的方法为:

addMouseMotionListener(MouseMotionListener listener) 注册监视器 
mouseDragged(MouseEvent e) 处理拖动鼠标触发的事件
mouseMoved(MouseEvent e) 处理鼠标移动触发的事件

(6)焦点事件
组件可以触发焦点事件。组件可以使用addFocusListener(FocusListener listener)注册为焦点事件监视器。当组件获得焦点监视器后,如果组件有无输入焦点的变化都会触发FocusEvent事件。创建监视器的类必须要实现FocusListener接口,该接口有两个方法:

public void focusGained(FocusEvent e) 组件从无输入焦点变为有输入焦点时,监视器调用该方法
public void focusLost(FocusEvent e) 组件从有输入焦点变为无输入焦点时,监视器调用该方法

用户通过单击某组件使其获得焦点,同时其他组件也将失去焦点。一个组件可调用public boolean requestFocusInWindow()方法获得输入焦点

(7)键盘事件
按下、释放、敲击键盘上的一个键就触发了键盘事件。使用KeyListener接口处理键盘事件。可以使用addKeyListener(KeyListener e)注册监视器,该接口有如下三个方法:

public void keyPressed(KeyEvent e) 处理按下键盘触发的键盘事件
public void keyTyped(KeyEvent e) 处理敲击(按下又释放)触发的事件
public void keyReleased(KeyEvent e) 处理释放键盘触发的键盘事件

用KeyEvent类的public int getKeyCode()【返回键码值】或者public char getKeyChar()【返回键上字符】方法,可以判断哪个键被按下、敲击和释放

(8)窗口事件
JFrame是Window的子类,fanshiWindow子类创建的对象都可以发生Window Event事件。
WindowListener接口:当一个窗口被打开、关闭、图标化…就触发了窗口事件,即WindowEvent创建了一个窗口事件对象。调用getWindow()方法可以获取发生窗口事件的窗口。窗口使用addWindowlistener方法获得监视器,创建监视器的对象的类必须实现WindowListener接口,该接口有7个方法:

public void windowActivated(WindowEvent e) 窗口从激活到未激活状态调用该方法。
public void windowDeactivated(WindowEvent e)窗口从激活状态到未激活状态调用该方法。
public void windowClosing(WindowEvent e) 当窗口正在关闭时,调用该方法。
public void windowClosed(WindowEvent e) 当窗口关闭后,调用该方法。
public void windowIconified(WindowEvent e) 当窗口图标化后,调用该方法。
public void windowDeiconified(WindowEvent e) 当窗口撤销图标化后,调用该方法。
public void windowOpened(WindowEvent e) 当窗口打开时,调用该方法。
在调用图标化时,会同时调用撤销激活方法;在撤销图标化时,会同时调用激活方法。关闭窗口时,监视器首先调用正在关闭方法再调用关闭后方法。

WindowAdapter适配器:当Java提供处理事件的接口多于一个方法时,Java相应的提供一个适配器类。适配器已经实现了相应的接口,因此可以直接使用适配器类的子类创建的对象作为监视器,在子类中重写需要的方法即可。

(9)匿名类实例或窗口做监视器
匿名类的实例做监视器:如果内部类的实例做监视器,那么事件发生时,监视器比较容易操作事件源所在的外嵌类中的成员,就不必将对象的引用传递给监视器。
窗口做监视器:如果让组件所在的窗口作为监视器,监视器可以方便的操作窗口中的其他成员。

五、对话框

JDialog类和JFrame类都是Window的子类,二者的实例都是底层容器。对话框分为无模式和有模式两种。有模式的对话框处于激活状态时,不能激活该对话框所在程序的其他窗口。无模式的则无此限制。(通常在进行一个重要的操作前,弹出一个有模式的对话框表明操作的重要性)
(1)消息对话框
该对话框是有模式对话框,进行一个重要操作前,最好弹出一个消息对话框。使用JOptionPane类的静态方法创建一个消息对话框:public static void showMessageDialog (Component parentComponent,String message,String title,int messageType)
第一个参数指定对话框可见时的位置,第二个参数指定对话框显示的信息,第三个参数指定标题,第四个参数取值是JOptionPane类中的类常量,用于给出对话框的外观:INFORMATION_MESSAGE、WARNING_MESSAGE、ERROR_MESSAGE、QUESTION_MESSAGE、PLAIN_MESSAGE

(2)输入对话框
该对话框含有供用户输入文本的文本框、确认和取消按钮,是有模式对话框。要求输入一个字符串。用JOptionPane类的静态方法创建一个输入对话框:public static String showInputDialog(Component parentComponent,Object message,String title,int message)
第一个参数指定输入对话框所依赖的组件,第四个组件指定外观,常量的取值同上。

(3)确认对话框
该对话框为有模式对话框,JOptionPane类的静态方法创建一个确认对话框:public static int showConfirmDialog(Component parentComponent,Object message,String title,int optionType)
第一个参数指定对话框出现的位置,第四个参数可取类常量指定外观:YES_NO_OPTION、YES_NO_CANCEL_OPTION、OK_CANCEL_OPTION
该方法会返回下列整数值之一:JOptionPane.YES_OPTION、JOptionPane.NO_OPTION、JOptionPane.CANCEL_OPTION、JOptionPane.OK_OPTION、JOptionPane.CLOSED_OPTION

(4)颜色对话框
JOptionPane类的静态方法创建一个颜色对话框:public static Color showDialog(Component component,String title,Color initialColor)
第三个参数指定颜色对话框返回的初始颜色

(5)自定义对话框
通过建立JDialog的子类来建立一个对话框类,该类的一个实例就是一个对话框。对话框是一个容器,默认布局为BorderLayout。对话框的两个常用构造方法:

JDialog() 构造一个无标题的初始不可见的对话框
JDialog(JFrame owner) 构造一个无标题的初始不可见的无模式的对话框,owner是对话框所依赖的窗口。

六、树组件与表格组件

(1)树组件:JTree类的对象被称为树组件
DefaultMutableTreeNode结点:想构造一个树组件,必须事先为其创建结点对象。任何实现MutableTreeNode接口的类创建的对象都可以成为树上的结点。树中只有一个根节点,所有其他结点从这里引出。其他节点分为带子结点的分支结点和不带子结点的叶结点,每个结点有自己的文本标签和图像图标。Default MutableTreeNode类创建树上的结点,该类常用的构造方法为:

DefaultMutableTreeNode(Object userObject)
DefaultMutableTreeNode(Object userObject,boolean allowChildren) 

树上的TreeSelectionEvent事件:树组件可以触发TreeSelectionEvent事件,树使用addTreeSelectionListener(TreeSelectionListener listener)方法获得一个监视器。鼠标单击结点时,监视器将自动调用接口中的方法

(2)表格组件:
JTable常用的三个构造方法:

JTable() 创建默认的表格模型
JTable(int a,int b) 创建a行,b列的默认模型表格
JTable(Object data[][],Object columnName[]) 创建默认表格模型,并且显示由data指定的二维数组的值,其列名由columnName指定
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java程序开发学习之组件及事件处理 的相关文章

  • Java简单加密

    我想加密存储在磁盘上的文本 配置 文件 尝试使用DES http en wikipedia org wiki Data Encryption Standard加密 我在客户端计算机上遇到了致命错误 后来我发现该算法无法处理重音字符 我怀疑这
  • 如何更改 JComboBox 下拉列表的宽度?

    我有一个可编辑的JComboBox其中包含单个字母值的列表 因此 组合框非常小 每个字母都有特殊的含义 对于很少使用的字母 有时用户并不清楚 因此我创建了一个自定义ListCellRenderer显示下拉列表中每个字母的含义 不幸的是 这个
  • 为什么在使用 repaint() 而不是使用 getParent().repaint() 时会出现此 Swing 错误?

    这个问题是基于我不久前在一个简单的 Swing 骰子程序中遇到的问题 我发布的原始问题是here https stackoverflow com questions 22306637 mystery concurrency componen
  • TestNG 启动期间发生内部错误

    我创建了一个 TestNG 类 FirstTest java 当我将测试用例作为 TestNG Test 运行时 出现以下错误 期间发生内部错误 启动 FirstTest java lang NullPointerException Ecl
  • 逐行读取 JTextPane

    有没有办法读取a的内容JTextPane逐行 很像 BufferedReader 吗 Element root textPane getDocument getDefaultRootElement 获得根元素后 您可以检查存在多少个子元素
  • Java - 了解 PrintWriter 和刷新的需要

    好吧 首先我对所有代码表示歉意 但我觉得代码太多总比代码不够好 我正在制作一个简单的聊天客户端和印刷机 尤其是我正在努力解决的问题 使用现在的代码 它将与服务器类交互 并且完美地打印我想要打印的内容 但是 当我删除 writer flush
  • JSF 错误 - IllegalStateException:PWC3999:提交响应后无法创建会话[重复]

    这个问题在这里已经有答案了 我是 JSF 新手 正在构建一个使用 Facelet 创建的应用程序 这是我的模板master xhtml
  • Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证

    我可以在 Hibernate 中使用 MySQL 视图 将它们视为表 即 该实体与为表创建的实体没有什么不同 但是 当 Hibernate 设置为验证模型时 我的应用程序将不会部署 因为它找不到视图 因为它假设它是一个表 是否可以在启用部署
  • 读取 Nashorn JO4 和 NativeArray

    Java调用代码 import jdk nashorn api scripting myCustomHashMap dataStore new myCustomHashMap ScriptEngineManager sem new Scri
  • Android 防火墙与 VpnService

    我正在尝试使用 BS 项目的 VpnService 为 Android 实现一个简单的防火墙 我选择 VpnService 因为它将在非 root 设备上运行 它将记录连接并让您过滤连接 基于IP 有一个应用程序可以做到这一点 因此这是可能
  • Knuth-Morris-Pratt 算法

    解决方案是Knuth Morris Pratt 算法 https en wikipedia org wiki Knuth E2 80 93Morris E2 80 93Pratt algorithm 干草堆 AAAAAAAAA 针 AAA
  • JavaFX 动画使用循环?

    我正在尝试制作一款类似太空侵略者的游戏 我画了一个正方形 我想通过使用循环逐步向下移动它thread sleep 然而 正方形立即被绘制出来 我知道有可以使用的动画路径 但我想保持低水平并仅使用坐标系 有没有办法使用这样的循环来制作时间轴动
  • Java Swing JEditorPane:操作样式文档

    我的模型是与枚举类型关联的字符串队列 我试图在 JEditorPane 中显示该模型 队列中的每个元素作为一个单独的 HTML 段落 其属性基于关联的枚举类型 但是 我的更新方法并没有达到我想要的效果 我尝试将 HTML 字符串直接写入文档
  • 在 JSF 自定义验证器中区分 ajax 请求和完整请求

    我的验证器需要知道它是完整请求还是 ajax 请求 在我当前的解决方案中 我检查 http 请求标头X Requested With元素 public void validate FacesContext context UICompone
  • EasyMock : java.lang.IllegalStateException: 1 个匹配器预期,2 个记录

    我在使用 EasyMock 2 5 2 和 JUnit 4 8 2 通过 Eclipse 运行 时遇到问题 我已阅读此处所有类似的帖子 但尚未找到答案 我有一个包含两个测试的类 它们测试相同的方法 我正在使用匹配器 每个测试单独运行时都会通
  • 如何在Android中使用资源

    一个人如何使用资产 我有这个代码 AssetManager assets getAssets InputStream stream assets open test txt 看起来它只能在 Activity 类中使 用 如果我尝试在另一个类
  • 为什么 Cassandra 客户端在生产中没有 epoll 时会失败? [复制]

    这个问题在这里已经有答案了 当我在本地运行服务时 我收到一条警告 指出 epoll 不可用 因此它使用 NIO 很公平 当我将其部署到 Kubernetes 中时 我得到了以下信息 这导致服务无法运行 2017 03 29T19 09 22
  • C3P0:生产中未返回的连接超时?

    参数unreturnedConnectionTimeout给定时间段后未返回的连接超时 我正在尝试决定是否应该在我的制作中使用它persistence xml 使用它的一大优点是连接池将能够从泄漏的连接中恢复 一个很大的缺点是泄漏的连接将很
  • System.out.println("嗨"+6+10);打印Hi610?

    为什么要这样做 太令人困惑了 运算符优先级和结合性 两点 操作员 如果一个或两个参数都是字符串 则进行字符串连接 操作员 从左到右工作 所以在你的例子中 Hi 6 is Hi6 and Hi6 10 is Hi610 编辑 正如您在对另一个
  • 如何设置 commons-logging 来使用 logback?

    我们使用 slf4j logback 并且碰巧有一些使用 commons logging 的第三方库 如何设置它以使用 logback 答案是不要使用 commons logging jar 因为 SLF4J 的设计目的与 commons

随机推荐

  • 内核LED驱动框架讲解以及led设备注册示例代码

    1 驱动框架介绍 1 内核中驱动部分维护者针对每个种类的驱动设计一套成熟的 标准的 典型的驱动实现 然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好 再把不同部分留出接口给具体的驱动开发工程师来实现 这就叫驱动框架 2 内核维护者在
  • 涉密服务器 远程,一种具有远程定位功能的涉密移动存储系统及其实现方法专利_专利查询 - 天眼查...

    1 一种具有远程定位功能的涉密移动存储系统 其特征在于 该系统包括定位管理服 务器和移动存储介质 移动存储介质内设置有移动供电模块 定位通信模块 数据销毁模块 和数据存储模块 移动供电模块分别电连接定位通信模块 数据销毁模块和数据存储模块
  • adworld-pwn-level2

    必要知识点 32位系统函数调用使用堆栈传参 其调用时栈的结构如下 返回地址 gt 参数n gt 参数n 1 gt gt 参数1 将elf文件扔到IDA中 跟进到vulnerable函数 里面有输入函数 可以用来做栈溢出 再看到有system
  • 物联网LoRa系列-19:LoRa终端--射频芯片SX1261 SX1262的6种操作模式及其设置

    本文根据SX1261 2芯片手册 阐述SX161 2射频芯片的8种操作模式及其设置 目录 一 MCU与射频芯片之间的操作接口 二 SX1261 2射频芯片的6种工作模式的含义 三 SX1261 2射频芯片工作模式的设置 四 SX1261 2
  • 数组对象找重复值

    对象内容 let empListData lastName lin phone 154393456 lastName lin phone 154393456 lastName lin phone 154393456 找重方法 let new
  • linux-kali利用BeEF 执行 XSS 攻击

    一 配置靶机环境 1 登录win7靶机 2 访问https www xp cn 下载phpstudy软件 下载最新版的就可以 phpstudy软件可以用来进行站点搭建 3 解压后开始安装phpstudy 4 点击启动Apache服务与MyS
  • 关于 QML Tumbler 自定义日历在响应onWheel事件后,其他原有mouse事件无法响应

    程序是在QWidget窗体上嵌套QML 响应触屏和非触屏上面的一些鼠标滚动 滑动功能 在Tumbler下面的MouseArea中 onWheel响应了鼠标滚轮事件后 原来的其他鼠标事件没响应 help 求指点 工程上传到了百度云 链接 ht
  • 修改JAVA环境变量切换JAVA版本不生效问题

    最近因为项目原因 需要在java8和java11环境来回切换 windows切换环境变量没有Linux简单 通过shell脚本操作也会受到环境变量配置的影响 在修改环境变量来切换java版本时也会时不时出现没有生效的问题 一般出现这种问题
  • 2022年浙江省中职组“网络空间安全”赛项模块B--Linux渗透测试

    2022年中职组浙江省 网络空间安全 赛项 B 2 Linux渗透测试 漏洞原理解析 一 竞赛时间 420分钟 共计7小时 吃饭一小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第 阶段 单兵模式系统渗透测试 任务一 Wi
  • 万一 Github不让用了,Gitee同步指南请收好

    大家好 我是秋风 最近很多开源项目让一个本该纯粹的地方混入了政治色彩 例如 Node 还有 React 这些超明星级的项目 目前来看 React 的issues 已经沦陷了 大家都在反对一个原本纯粹的地方为什么会有了政治 如果说开源项目涉及
  • 相机 (2)旋转

    1 1 LookAt矩阵 用这3个轴外加一个平移向量来创建一个矩阵 并且你可以用这个矩阵乘以任何向量来将其变换到那个坐标空间 R是右向量 U是上向量 D是方向向量 P是摄像机位置向量 glm LookAt函数需要一个位置 目标和上向量以得到
  • CUDA unknown error - this may be due to an incorrectly set up environment

    运行mmaction2时报错 builtins RuntimeError CUDA unknown error this may be due to an incorrectly set up environment e g changin
  • 最全Arduino控制电机教程说明和资料分享

    1 电机介绍 1 1 作用 电机 gt 电磁感应 电能转化为动能 1 2 电机分类 工作电源 直流电机 DC 交流电机 AC 和交直流两用电机 直流电机分类 有刷直流电机和无刷直流电机 1 3 有刷直流电机模型及工作原理 左手定则 这种情况
  • 一篇文章教会你利用Python网络爬虫实现豆瓣电影采集

    一 项目背景 豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务 可以记录想看 在看和看过的电影电视剧 顺便打分 写影评 极大地方便了人们的生活 今天以电视剧 美剧 为例 批量爬取对应的电影 写入csv文档 用户可以通过评分
  • (Matlab实现)K-means算法及最佳聚类数目的确定

    目录 摘要 1 K means算法 2 Calinski Harabasz Criterion 卡林斯基 哈拉巴斯指标 CH值 3 Davies Bouldin Criterion 戴维斯 博尔丁指标 DB值 4 Gap Value Gap
  • ChatGPT大流行的思考-设想篇

    在ChatGPT火热当下 我们不妨设想一下它可以应用到我们生活和工作的哪些方面 作者在对ChatGPT有所了解后 从行业 宏观及微观的角度进行设想 积累灵感 并投身到模型建设中 希望对你也有所启发 一 宏观及微观角度的设想 1 宏观角度 行
  • SQL Server远程连接的设置

    SQL Server正常连接时 若不需要远程操控其他电脑 可以用Windows身份验证模式 但是涉及到远程处理时 需要通过SQL Server身份验证登录 具体操作如下 首先 我们在登录时 选择Windows身份验证 然后连接到服务器 图1
  • pip 下载慢——解决方法

    国内源 新版ubuntu要求使用https源 要注意 清华 https pypi tuna tsinghua edu cn simple 阿里云 http mirrors aliyun com pypi simple 中国科技大学 http
  • 手把手教你10分钟快速部署Kubernetes集群

    本文介绍的部署过程主要是为了让读者能够理解 K8S 的运行原理 为了简化流程 这里不涉及高可用 高性能等解决方案 安装说明 本文仅仅是在两个节点上部署所有的组件 如图所示包括 MASTER 和 NODE 所有的组件都安装在 opt comp
  • Java程序开发学习之组件及事件处理

    学习参考书 Java2实用教程第5版 一 GUI编程 容器类 Container 和组件类 Component javax swing包中JComponent类是java awt包中Container类的一个直接子类 java awt包中C