现在我有一个 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(“确定”)监听 然后执行 存钱或者取钱的算法 要如何做呢 谢谢大家了
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(“确定”)监听 然后执行 存钱或者取钱的算法 要如何做呢 谢谢大家了
執行第二個之前dispose第一個關於JRadioButton 和 Button 的問題
在執行JRadioButton前默認Button不可用
執行之後Button才可用
讓它們關聯起來
沒學多久
也不知道想的方法怎樣
在執行JRadioButton前默認Button不可用
執行之後Button才可用
讓它們關聯起來
我也是初学者,我只能和你说说我的看法了。
首先:
如果只有一个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);
还有一个小建议,就是以后写程序加些注释吧,取组件名的时候要有意义,让别人知道那个是代表什么。
呵呵,加油
第一个问题 的那个共用一个JFrame 几个Panel 相互替换的问题 不知道怎么做
裡面組件可以設置 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個拼音老大都讓改了
現在可能有些東西學的不太懂
過段時間回頭看看就覺得思路清晰簡單多了