界面设计问题

时间:2022-07-07 05:43:12
现在我有一个 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(“确定”)监听 然后执行 存钱或者取钱的算法 要如何做呢 谢谢大家了

8 个解决方案

#1


你的程序好像少寫了xianShi()方法
執行第二個之前dispose第一個

關於JRadioButton 和 Button 的問題
在執行JRadioButton前默認Button不可用
執行之後Button才可用
讓它們關聯起來
 
沒學多久
也不知道想的方法怎樣

#2


dispose 只能用在 JFrame里吧 而我要关闭掉的是 一个加载在 JFrame 上的panel 然后重新加载第二个 panel 



下面没看懂


在執行JRadioButton前默認Button不可用 
執行之後Button才可用 
讓它們關聯起來 

#3


多线程去实现

#4


猫猫,你在学GUI?

#5


是啊 正在学 想的我头疼    多线程?怎么实现?

#6


你运行过你的程序吗?问题挺多的诶。
我也是初学者,我只能和你说说我的看法了。
首先:
    如果只有一个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); 
还有一个小建议,就是以后写程序加些注释吧,取组件名的时候要有意义,让别人知道那个是代表什么。
呵呵,加油

#7


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

#8


我們是用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個拼音老大都讓改了
現在可能有些東西學的不太懂
過段時間回頭看看就覺得思路清晰簡單多了

#1


你的程序好像少寫了xianShi()方法
執行第二個之前dispose第一個

關於JRadioButton 和 Button 的問題
在執行JRadioButton前默認Button不可用
執行之後Button才可用
讓它們關聯起來
 
沒學多久
也不知道想的方法怎樣

#2


dispose 只能用在 JFrame里吧 而我要关闭掉的是 一个加载在 JFrame 上的panel 然后重新加载第二个 panel 



下面没看懂


在執行JRadioButton前默認Button不可用 
執行之後Button才可用 
讓它們關聯起來 

#3


多线程去实现

#4


猫猫,你在学GUI?

#5


是啊 正在学 想的我头疼    多线程?怎么实现?

#6


你运行过你的程序吗?问题挺多的诶。
我也是初学者,我只能和你说说我的看法了。
首先:
    如果只有一个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); 
还有一个小建议,就是以后写程序加些注释吧,取组件名的时候要有意义,让别人知道那个是代表什么。
呵呵,加油

#7


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

#8


我們是用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個拼音老大都讓改了
現在可能有些東西學的不太懂
過段時間回頭看看就覺得思路清晰簡單多了