例如单击某一个组件就移除这个组件,并且添加另外的组件,下面是一个具体的例子:
import java.awt.FlowLayout
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JPanel
import javax.swing.JTextField
public class WinTest3
{
public static void main(String[] args)
{
JFrame frame = new JFrame()
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setExtendedState(JFrame.MAXIMIZED_BOTH)
frame.setLayout(new FlowLayout())
JPanel panel = new JPanel()
JButton button = new JButton("change")
panel.add(button)
JTextField f = new JTextField(20)
ActionListener listener = new ChangeListener(button,panel,f)
button.addActionListener(listener)//注册监听器
frame.add(panel)
frame.setVisible(true)
}
}
/*监听器,当单击按钮时,移除button按钮,加入text文本框*/
class ChangeListener implements ActionListener
{
JButton button
JPanel panel
JTextField text
public ChangeListener(JButton button, JPanel panel, JTextField text)
{
super()
this.button = button
this.panel = panel
this.text = text
}
@Override
public void actionPerformed(ActionEvent e)
{
if("change".equals(e.getActionCommand()))
{
panel.remove(button)
panel.add(text)
panel.updateUI()
panel.repaint()
}
}
}
备注:需要特别注意的是移除和添加组件之后,记得重画组件。
可以直接把小Panel放到大Panel里啊,如下的例子就是jp2里加了一个jp1
package com.htzyimport javax.swing.*
public class Demo1_1 extends JFrame{
//变量
JPanel jp1,jp2
JTextField jt
JButton jb
public static void main(String[] args) {
new Demo1_1()
}
//构造函数
public Demo1_1(){
jp1 = new JPanel()
jp2 = new JPanel()
jt = new JTextField(10)
jb = new JButton("确定")
jp1.add(jt)
jp1.add(jb)
jp2.add(jp1)//把jp1面板加入到jp2中
this.add(jp2)
this.setSize(240,200)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
this.setVisible(true)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)