现在我有一个 JFrame 里面有一个JMenuBar 在JmenuBar 里面有几个选项 设置监听  然后点击后进入 一个Jpanel  有几个Jpanel 我都用一个JFrame 现实 但是这样就会有重叠的问题比如:
public class MFrame implements ActionListener {
private JFrame f;
private JMenuBar mb;
private JMenu m1;
private JMenu m2;
private JMenu m3;
private JMenu m4;
private JMenuItem mi1;
private JMenuItem mi2;
private JMenuItem mi3;
private JMenuItem mi4;
private JMenuItem mi5;
private JMenuItem mi6;
private JMenuItem mi7;
private JMenuItem mi8;
private JRadioButton r1;
private JRadioButton r2;
private JButton Next, Close;
private JLabel l1, l2, S1, S2;
private JTextField t1, t2;
private String ss = ""; public void go() { f = new JFrame("");
mb = new JMenuBar();
m1 = new JMenu("账号管理");
        mb.add(m1);
mi1 = new JMenuItem("新建账号/删除账号");
mi3 = new JMenuItem("查询账号");
mi4 = new JMenuItem("显示账号");
mi1.addActionListener(this);
mi3.addActionListener(this);
mi4.addActionListener(this);
m1.add(mi1);
m1.add(mi3);
m1.add(mi4);
m2.add(mi5);
f.setJMenuBar(mb);
f.setLocation(450, 250);
f.setSize(400, 400);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent ae) { if (ae.getActionCommand().equals("显示账号")) {
xianShi();
}
if (ae.getActionCommand().equals("查询账号")) {
chaXun();
}
}private void cunQ() {
f = new JFrame("MINI银行管理系统");
JPanel pan1 = new JPanel();
JPanel pan2 = new JPanel();
JPanel pan3 = new JPanel();
JPanel pan4 = new JPanel();
JPanel pan5 = new JPanel(); l1 = new JLabel("账  号:");
l2 = new JLabel("金  额:");
S1 = new JLabel();
S2 = new JLabel();
t1 = new JTextField(15);
t2 = new JTextField(15);
JRadioButton r1 = new JRadioButton("存钱");
JRadioButton r2 = new JRadioButton("取钱");
Next = new JButton("确定");
Close = new JButton("重置");
r1.addActionListener(this);
r2.addActionListener(this);
Next.addActionListener(this);
Close.addActionListener(this);
pan4.add(Next);
pan4.add(Close);
pan2.add(l1);
pan2.add(t1);
pan3.add(l2);
pan3.add(t2);
pan5.add(r1);
pan5.add(r2);
pan1.add(pan5);
pan1.add(pan2);
pan1.add(pan3);
pan1.add(pan4);
pan1.setLayout(new GridLayout(6, 1, 10, 10));
pan1.setVisible(true);
f.add(pan1);
} private void chaXun() {
JPanel pan1 = new JPanel();
JPanel pan2 = new JPanel();
JPanel pan3 = new JPanel();
JPanel pan4 = new JPanel();
JPanel pan5 = new JPanel();
f.remove(pan1);
l1 = new JLabel("账  号:");
S1 = new JLabel();
t1 = new JTextField(15);
Next = new JButton("查询");
Close = new JButton("重置"); Next.addActionListener(this);
Close.addActionListener(this);
pan4.add(Next);
pan4.add(Close);
pan2.add(l1);
pan2.add(t1);
pan1.add(pan2);
pan1.add(pan4);
pan1.setLayout(new GridLayout(6, 1, 10, 10));
pan1.setVisible(true);
f.add(pan1);
}
大概意思就是这样 如果 第一个监听执行了 f.add(pan1)  第2个再执行一个f.add(pan2)  2个Jpanel 就会重叠在一起 有没有什么清空的方法呢?还有一个问题 就是 同一个界面里面有JRadioButton 和 Button 我监听要怎么写才行?
比如 存钱 取钱  用JRadioButton 来选取 
选取以后 用Button(“确定”)监听 然后执行 存钱或者取钱的算法 要如何做呢 谢谢大家了

解决方案 »

  1.   

    你的程序好像少寫了xianShi()方法
    執行第二個之前dispose第一個關於JRadioButton 和 Button 的問題
    在執行JRadioButton前默認Button不可用
    執行之後Button才可用
    讓它們關聯起來
     
    沒學多久
    也不知道想的方法怎樣
      

  2.   

    dispose 只能用在 JFrame里吧 而我要关闭掉的是 一个加载在 JFrame 上的panel 然后重新加载第二个 panel 下面没看懂
    在執行JRadioButton前默認Button不可用 
    執行之後Button才可用 
    讓它們關聯起來 
      

  3.   

    你运行过你的程序吗?问题挺多的诶。
    我也是初学者,我只能和你说说我的看法了。
    首先:
        如果只有一个JFrame,可以直接将公共类写成
        public class MFrame extends JFrame implements ActionListener{}
        
        然后我觉得你的定义的组件太累赘了。
        如:可以写成
             private JFrame f; 
            private JMenuBar mb; 
            private JMenu m1,m2,m3,m4;    
    private JMenuItem mi1,mi2,mi3,mi4,mi5,mi6,mi7,mi8; 
    private JRadioButton r1,r2; 
    private JButton Next, Close; 
    private JLabel l1, l2, S1, S2; 
    private JTextField t1, t2; 
    private String ss = ""; 
     
    还有:就是先要执行f.setJMenuBar(mb);才可以在菜单栏再假东西的。
        
          还有就是JRadioButton的问题了,你定义的两个按钮是单选的,是互斥的,就是不可以同时被选择
          你要说明的呀。
          ButtonGroup buttongroup = new ButtonGroup();
         buttongroup.add(r1);
         buttongroup.add(r2);
         pan5.add(r1); 
         pan5.add(r2); 
    还有一个小建议,就是以后写程序加些注释吧,取组件名的时候要有意义,让别人知道那个是代表什么。
    呵呵,加油
      

  4.   

    那个程序啊…… 我只是想说一下问题而已 因为全部的程序太长了
    第一个问题 的那个共用一个JFrame  几个Panel 相互替换的问题 不知道怎么做
      

  5.   

    我們是用SWT做界面的
    裡面組件可以設置 setEnable(false)或setEnable(true)
    在監聽JRadioButton前Button setEnable(false)那樣就不能點了 
    執行之後Button setEnable(true)就可以點了
    這樣就能關聯起來   就像JRadioButton的功能一樣
    按鈕互斥
    不過你用Swing做界面我沒發現裡面能setEnable的
    不知道直接在代碼里添加是否可行多線程的問題方法想的過來
    就是自己實現起來有難度
    不知道你第一個panel有什麽用
    不知道是不是線程1執行add(pan1)線程2執行add(pan2)
    執行完第一個就讓線程進入死亡態
    再執行第二個加載第二個panel前你看看能不能remove 第一個panel
    這個不需要寫多線程取組件名就用拼音寫完整,不論有多長
    以前嫌太長用4個字母縮寫4個拼音老大都讓改了
    現在可能有些東西學的不太懂
    過段時間回頭看看就覺得思路清晰簡單多了