布局随便选,下面程序使用了边框(BorderLayout)和流水(FlowLayout)2种布局方式!
顺便帮你加了一个按钮事件!有问题再追问吧!~
import java.awt.BorderLayout
import java.awt.Color
import java.awt.Container
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.JLabel
import javax.swing.JPanel
public class Test extends JFrame implements ActionListener {
private JPanel panel0 = null, panel2 = null
private JButton b1 = null, b2 = null, b3 = null, b4 = null
public Test() {
Container c = this.getContentPane()
//边框布局
c.setLayout(new BorderLayout())
//创建panel
panel0 = new JPanel()
panel2 = new JPanel()
//为2个panel设置底色
panel0.setBackground(Color.red)
panel2.setBackground(Color.BLUE)
//2个panel都是用流水布局
panel0.setLayout(new FlowLayout())
panel2.setLayout(new FlowLayout())
//创建按钮
b1 = new JButton("panel2黄色")
b2 = new JButton("panel2绿色")
b3 = new JButton("panel0橙色")
b4 = new JButton("panel0灰色")
/**
* 添加按钮事件
*/
b1.addActionListener(this)
b2.addActionListener(this)
b3.addActionListener(this)
b4.addActionListener(this)
/**
* 将按钮添加相应panel上
*/
panel0.add(b1)
panel0.add(new JLabel())
panel0.add(b2)
panel2.add(b3)
panel2.add(b4)
/**
* 将panel添加到容器
*/
c.add(panel0, BorderLayout.CENTER)
c.add(panel2, BorderLayout.EAST)
this.setSize(500, 500)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
this.setVisible(true)
}
public static void main(String[] args) {
new Test()
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource() == b1) {
panel2.setBackground(Color.yellow)
} else if (e.getSource() == b2) {
panel2.setBackground(Color.green)
} else if (e.getSource() == b3) {
panel0.setBackground(Color.ORANGE)
} else if (e.getSource() == b4) {
panel0.setBackground(Color.GRAY)
}
}
}
答: JFrame中, 可以通过 jframe.remove(组件) 方法删除指定的组件 ,也可以通过jframe.add(组件) 方法来添加新的组件 . 值得注意的是,添加和删除组件之后,都需要更新窗口 , 否则可能显示异常
效果图
jp1 里输入用户名, 不能为空
jp1里输入了用户名
jp1被删除,然后显示jp2
参考代码
import javax.swing.*import java.awt.event.*
public class PanelFrame extends JFrame implements ActionListener {
JPanel jp1, jp2
JTextField jtf
JButton jb1
JLabel jl2
public PanelFrame() {
jp1 = new JPanel()
JLabel jl1 = new JLabel("请输入用户名")
jtf = new JTextField(8)
jb1 = new JButton("确定")
jb1.addActionListener(this)
jp1.add(jl1)
jp1.add(jtf)
jp1.add(jb1)
add(jp1)
// 窗口属性设置
setTitle("Demo")// 标题
setSize(380, 180)// 窗口大小
setLocationRelativeTo(null)// 窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE)// 窗口点击关闭时,退出程序
}
public static void main(String[] args) {
new PanelFrame().setVisible(true)
}
@Override
public void actionPerformed(ActionEvent e) {
if(jb1==e.getSource()) {
String name = jtf.getText().trim()
if(name.equals("")) {//验证是否输入了有效的字符串
JOptionPane.showMessageDialog(this, "请输入用户名~!")
return
}
remove(jp1)//删除jp1
jp2 = new JPanel()
jl2 = new JLabel()
jp2.add(jl2)
jl2.setText("欢迎:"+name)
add(jp2)//添加jp2
SwingUtilities.updateComponentTreeUI(this)//更新窗口!!
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)