java可以面板重叠不_java – 重叠面板摆动

我可以找到很多问题……

> BorderLayout只允许单个组件占用任何给定的位置.也就是说,无论一个组件是否不可见,两个组件不能同时共享CENTER位置.

>您永远不应该调用updateUI,这用于告诉UI组件外观已经改变,应该更新它们以响应它.

>使用revalidate告诉容器布局发生了一些变化,它应该执行新的布局过程…

点击之前……

点击后……

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.beans.PropertyChangeEvent;

import java.beans.PropertyChangeListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.border.LineBorder;

public class GUI extends JFrame implements ActionListener, PropertyChangeListener {

private JPanel panel1, panel2, panel3;

// private com.toedter.calendar.JCalendar calendar;

private JPanel calendar;

private JButton btn1, btn2;

private JLabel label1, label2;

public GUI() {

setDefaultCloseOperation(EXIT_ON_CLOSE);

init();

}

private void init() {

//panel1 components

panel1 = new JPanel();

btn1 = new JButton("Click me");

panel1.add(btn1);

//panel2 components

panel2 = new JPanel();

label1 = new JLabel("Time:");

label2 = new JLabel("Date:");

panel2.add(label1);

panel2.add(label2);

//JCalendar

calendar = new JPanel();//new com.toedter.calendar.JCalendar();

calendar.setBorder(new LineBorder(Color.RED));

calendar.add(new JLabel("Calendar"));

//panel3

panel3 = new JPanel();

panel3.setBorder(new LineBorder(Color.BLUE));

panel3.add(new JLabel("Panel3"));

panel2.setBorder(new LineBorder(Color.GREEN));

//Add panels to JFrame

add(panel1, BorderLayout.NORTH);

add(calendar, BorderLayout.WEST);

add(panel2, BorderLayout.CENTER);

add(panel3, BorderLayout.EAST);

//event handling

btn1.addActionListener(this);

//hide panel2

panel2.setVisible(false);

pack();

}

public void actionPerformed(ActionEvent ae) {

if (ae.getSource().equals(btn1)) {

calendar.setVisible(false);

panel3.setVisible(false);

panel2.setVisible(true); //make panel2 visible

// panel2.updateUI();

revalidate();

repaint();

}

}

public static void main(String args[]) {

javax.swing.SwingUtilities.invokeLater(new Runnable() {

public void run() {

new GUI().setVisible(true);

}

});

}

@Override

public void propertyChange(PropertyChangeEvent evt) {

}

}

现在,我很确定这不会满足你的所有要求(我看到它们)……你至少有两种选择……

>单击按钮时,删除日历组件并将panel2添加到CENTER位置

>最好使用CardLayout

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值