当前位置: 代码迷 >> Java相关 >> 我的JPanel中间面板怎么更新不了 ?
  详细解决方案

我的JPanel中间面板怎么更新不了 ?

热度:131   发布时间:2007-07-29 17:58:49.0
我的JPanel中间面板怎么更新不了 ?

package com.test;
import java.awt.BorderLayout;
import javax.swing.*;
import javax.activity.*;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Frame2 extends JFrame {
BorderLayout borderLayout1 = new BorderLayout();
JMenuBar jMenuBar1 = new JMenuBar();
JMenu jMenu1 = new JMenu();
JPanel Jf;

public Frame2() {
try {
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}

private void jbInit() throws Exception {
getContentPane().setLayout(borderLayout1);
this.setJMenuBar(jMenuBar1);
jMenu1.setText("测试");
jMenu1.addActionListener(new Frame2_jMenu1_actionAdapter(this));
jMenuBar1.add(jMenu1);
Jf=(JPanel)this.getContentPane();
Jf.add(new Welcome());
Jf.updateUI();
// Jf.setLayout(null);
this.setSize(400,300);
this.setVisible(true);
}
public static void main(String args[]){
Frame2 F =new Frame2();
}
public void jMenu1_actionPerformed(ActionEvent e) {//这个竟然不起作用,点“测试”菜单没有任何反映
Jf.removeAll();
Jf.add(new FrmUp());
Jf.updateUI();
}
}


class Frame2_jMenu1_actionAdapter implements ActionListener {
private Frame2 adaptee;
Frame2_jMenu1_actionAdapter(Frame2 adaptee) {
this.adaptee = adaptee;
}

public void actionPerformed(ActionEvent e) {
adaptee.jMenu1_actionPerformed(e);





}
}



点“测试”菜单没有任何反映,请帮我看下,谢谢1

搜索更多相关的解决方案: JPanel  面板  

----------------解决方案--------------------------------------------------------
JMenu对应的事件是MenuEvent 接口是MenuListener
JMenuItem对应的是ActionEvent 和ActionListener
----------------解决方案--------------------------------------------------------
我对应的就是 你所说的 JMenuItem对应的是ActionEvent 和ActionListener 没有错啊 ?
要不你把 它修改一下,发上来,谢谢!
----------------解决方案--------------------------------------------------------

package DemoSwing;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.*;
import javax.activity.*;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Frame2 extends JFrame {
BorderLayout borderLayout1 = new BorderLayout();
JMenuBar jMenuBar1 = new JMenuBar();
JMenu jMenu1 = new JMenu();
JPanel Jf;
public Frame2() {
try {
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
getContentPane().setLayout(borderLayout1);
this.setJMenuBar(jMenuBar1);
jMenu1.setText("测试");
jMenu1.addMenuListener(new Frame2_jMenu1_actionAdapter(this)); //JMenu用这个监听器
jMenuBar1.add(jMenu1);
Jf = (JPanel) this.getContentPane();
//Jf.add(new Welcome());
Jf.updateUI();
// Jf.setLayout(null);
this.setSize(400, 300);
this.setVisible(true);
}

public static void main(String args[]) {
Frame2 F = new Frame2();
}

public void jMenu1_actionPerformed(MenuEvent e) {// 这个竟然不起作用,点“测试”菜单没有任何反映
Jf.removeAll();
//Jf.add(new FrmUp());
Jf.updateUI();
}
}
class Frame2_jMenu1_actionAdapter implements MenuListener { //应该有相应的Adapter,自己灾改改吧
private Frame2 adaptee;
Frame2_jMenu1_actionAdapter(Frame2 adaptee) {
this.adaptee = adaptee;
}
public void menuCanceled(MenuEvent e) {
}
public void menuDeselected(MenuEvent e) {
}
public void menuSelected(MenuEvent e) { //JMenu被选中时
adaptee.getContentPane().setBackground(Color.RED);
//adaptee.jMenu1_actionPerformed(e);
}
}


----------------解决方案--------------------------------------------------------
最好都弄成内部类..... 这样太不好看了
----------------解决方案--------------------------------------------------------
发现不是这个问题,按楼上说的改了 没有反映。。。
----------------解决方案--------------------------------------------------------
晕倒 我这咋有反应呢 背景变红了.....

----------------解决方案--------------------------------------------------------
public void jMenu1_actionPerformed(MenuEvent e) {// 这个竟然不起作用,点“测试”菜单没有任何反映
Jf.removeAll();
//Jf.add(new FrmUp());
Jf.updateUI();
}
把你的这段代码里的
Jf.removeAll();
//Jf.add(new FrmUp());
Jf.updateUI();

放在
public void menuSelected(MenuEvent e) { //JMenu被选中时
adaptee.getContentPane().setBackground(Color.RED);
//adaptee.jMenu1_actionPerformed(e);
}
里看看腻.....
----------------解决方案--------------------------------------------------------

我另外一个程序 和这个一样的,可以运行。。。不是你说的那个问题啊。


----------------解决方案--------------------------------------------------------
我找到 答案拉,是因为布局问题。我开始一直用了空布局。。。还是谢谢l3294832 热心回帖。
----------------解决方案--------------------------------------------------------