您的位置:首页 > 编程语言

复制代码Frame无法显示

2015-07-05 17:18 411 查看
package com.frame;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Component;

import java.awt.Desktop;

import java.awt.Insets;

import java.awt.event.ActionEvent;

import java.awt.event.ComponentAdapter;

import java.awt.event.ComponentEvent;

import java.beans.PropertyVetoException;

import java.lang.reflect.Constructor;

import java.util.HashMap;

import java.util.Map;

import java.util.prefs.Preferences;

import javax.swing.AbstractAction;

import javax.swing.Action;

import javax.swing.Box;

import javax.swing.BoxLayout;

import javax.swing.Icon;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JDesktopPane;

import javax.swing.JFrame;

import javax.swing.JInternalFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTabbedPane;

import javax.swing.SwingConstants;

import javax.swing.SwingUtilities;

import javax.swing.UIManager;

import javax.swing.border.BevelBorder;

import javax.swing.event.InternalFrameAdapter;

import javax.swing.event.InternalFrameEvent;

public class Frame {

private JDesktopPane desktopPane;

private JFrame frame;

private JLabel backLabel;

private Preferences preferences;

//

private Map<String,JInternalFrame> ifs = new HashMap<String,JInternalFrame>();

public Frame(){

/**

frame = new JFrame("JXC");

frame.getContentPane().setBackground(new Color(170, 188, 120));

frame.addComponentListener(new FrameListener());

frame.getContentPane().setLayout(new BorderLayout());

frame.setBounds(100,100,800,600);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭方式

backLabel = new JLabel();//背景标签

backLabel.setVerticalAlignment(SwingConstants.TOP);//背景标签的垂直对齐方式

backLabel.setHorizontalAlignment(SwingConstants.CENTER);//水平对齐

updateBackImange();//调用背静标签的方法

desktopPane = new JDesktopPane();//创建桌面面板

desktopPane .add(backLabel,new Integer(Integer.MIN_VALUE));//加到桌面面板

frame.getContentPane().add(desktopPane);//添加桌面面板到窗体

JTabbedPane navigationPane = createNavigationPanel();//创建左面导航面板

frame.getContentPane().add(navigationPane,BorderLayout.NORTH);//添加导航面板到窗体

frame.setVisible(true);

*/

frame = new JFrame("企业进销存管理系统");

frame.getContentPane().setBackground(new Color(170, 188, 120));

frame.addComponentListener(new FrameListener());

frame.getContentPane().setLayout(new BorderLayout());

frame.setBounds(100, 100, 800, 600);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

backLabel = new JLabel();// 背景标签

backLabel.setVerticalAlignment(SwingConstants.TOP);

backLabel.setHorizontalAlignment(SwingConstants.CENTER);

updateBackImange(); // 更新或初始化背景图片

desktopPane = new JDesktopPane();

desktopPane.add(backLabel, new Integer(Integer.MIN_VALUE));

frame.getContentPane().add(desktopPane);

JTabbedPane navigationPanel = createNavigationPanel(); // 创建导航标签面板

frame.getContentPane().add(navigationPanel, BorderLayout.NORTH);

frame.setVisible(true);

}

public static void main(String[] args){

SwingUtilities.invokeLater(new Runnable(){

public void run(){

new Frame();

//new Login();

System.out.println("************88");

}

});

System.out.println("主窗体创建成功");

//Frame frame = new Frame();

}

/**

* 在该方法中创建JTabbedPane选项卡面板对象;

* @return

*/

private JTabbedPane createNavigationPanel() {

// TODO Auto-generated method stub

JTabbedPane tabbedPane = new JTabbedPane();

tabbedPane.setFocusable(false);//

tabbedPane.setBackground(new Color(211,230,192));//

tabbedPane.setBorder(new BevelBorder(BevelBorder.RAISED));//为突出选项卡的立体效果,设置使用边框效果

//基础信息管理面板

JPanel baseManagePanel = new JPanel();

baseManagePanel.setBackground(new Color(215,223,194));

baseManagePanel.setLayout(new BoxLayout(baseManagePanel, BoxLayout.X_AXIS));//

baseManagePanel.add(creatFrameButton("客户信息管理","KeHuGuanLi"));

baseManagePanel.add(creatFrameButton("商品信息管理","ShangPinGuanLi"));

baseManagePanel.add(creatFrameButton("供应商个信息管理","GongYingShangGuanLi"));

//库存管理面板

JPanel depotManagePanel = new JPanel();

depotManagePanel.setBackground(new Color(215,223,194));

depotManagePanel.setLayout(new BoxLayout(depotManagePanel, BoxLayout.X_AXIS));

depotManagePanel.add(creatFrameButton("库存盘点", "KuCunPanDian"));

depotManagePanel.add(creatFrameButton("价格调整", "JiaGeTiaoZheng"));

//销售管理

//查询统计面板

//进货管理

//系统管理

JPanel sysManagePanel = new JPanel();

sysManagePanel.setBackground(new Color(215,223,194));

sysManagePanel.setLayout(new BoxLayout(sysManagePanel, BoxLayout.X_AXIS));

sysManagePanel.add(creatFrameButton("操作员管理", "CaoZuoYuan"));

sysManagePanel.add(creatFrameButton("更改密码", "GengGaiMiMa"));

sysManagePanel.add(creatFrameButton("权限管理", "QuanXianGuanLI"));

//将所有面板添加到导航面板中

tabbedPane.addTab(" 基础信息管理 ",null,baseManagePanel,"基础信息管理");

tabbedPane.addTab("库存管理",null, depotManagePanel,"库存管理");

tabbedPane.addTab("系统管理 ", null, sysManagePanel,"系统管理");

return tabbedPane;

}

/**

* 负责创建Action对象,该对象用于创建并显示窗体对象。另外还包括图标、文本等属性。

* 如果将Action对象添加到系统菜单栏或者工具栏中,会直接创建相应的菜单项和工具按钮,而且这些菜单项和工具按钮将显示Action

* 对象的文本和图标属性。

* 本系统没有使用系统菜单,所以直接创建按钮对象

* @param string

* @param string2

* @return

*/

private Component creatFrameButton(String fName, String cname) {

// TODO Auto-generated method stub

String imgUrl = "jxcManage/res/ActionIcon/"+fName+".png";

String imgUrl_roll = "jxcManage/res/ActionIcon/"+fName+"_roll.png";

String imgUrl_down = "jxcManage/res/ActionIcon/"+fName+"_down.png";

Icon icon = new ImageIcon(imgUrl);//创建按钮图标

Icon icon_roll = null;

if(imgUrl_roll != null){

icon_roll = new ImageIcon(imgUrl_roll);//创建鼠标经过按钮时的图标

}

Icon icon_down = null;

if(imgUrl_down != null){

icon_down = new ImageIcon(imgUrl_down);//创建按钮按下的图标

}

//主要方法

Action action = new openFrameAction(fName,cname,icon);//用openFrameAction类创建action对象

JButton button = new JButton(action);

button.setMargin(new Insets(0,0,0,0));//用于设置按钮的四周边界大小

button.setHideActionText(true);//设置按钮隐藏Action对象的文本信息,例如一个只显示图标的按钮可以取消文本是按钮更加美观

button.setFocusPainted(false);//设置获取焦点时,是否绘制焦点样式。

button.setBorderPainted(false);//设置是否绘制按钮的边框样式

button.setContentAreaFilled(false);//是否绘制按钮图形,

if(icon_roll != null){

button.setRolloverIcon(icon_roll);//设置鼠标经过按钮时,按钮所使用的图标

}

if(icon_down != null){

button.setPressedIcon(icon_down);//鼠标按下时

}

return button;

}

/**

* // 获取内部窗体的唯一实例对象

private JInternalFrame getIFrame(String frameName) {

JInternalFrame jf = null;

if (!ifs.containsKey(frameName)) {

try {

Class fClass = Class.forName("internalFrame." + frameName);

Constructor constructor = fClass.getConstructor(null);

jf = (JInternalFrame) constructor.newInstance(null);

ifs.put(frameName, jf);

} catch (Exception e) {

e.printStackTrace();

}

} else

jf = ifs.get(frameName);

return jf;

}

* @param frameName

* @return

*/

private JInternalFrame getIFrame(String frameName) {

// TODO Auto-generated method stub

JInternalFrame jf = null;

if(!ifs.containsKey(frameName)){

try{

Class fClass = Class.forName("internalFrame."+frameName);

Constructor constructor = fClass.getConstructor(null);

jf = (JInternalFrame) constructor.newInstance(null);

ifs.put(frameName, jf);

}catch(Exception e){

e.printStackTrace();

}

}else{

jf = ifs.get(frameName);

}

return jf;

}

/*8

// 更新背景图片的方法

private void updateBackImage() {

if (backLabel != null) {

int backw = Frame.this.frame.getWidth();

int backh = frame.getHeight();

backLabel.setSize(backw, backh);

backLabel.setText("<html><body><image width='" + backw

+ "' height='" + (backh - 110) + "' src="

+Frame.this.getClass().getResource("welcome.jpg")

+ "'></img></body></html>");

}

}

*/

//初始化背景图片

private void updateBackImange() {

// TODO Auto-generated method stub

if(backLabel != null){

int backw = Frame.this.frame.getWidth();

int backh = frame.getHeight();

backLabel.setSize(backw,backh);//大小

backLabel.setText("<html><body><image width= '"+backw

+"'height='"+(backh - 110) + "' src="

+Frame.this.getClass().getResource("welcome.jpg")

+ "'></img></body></html>");//设置背景标签的图像

//背景标签使用HTML超文本语言设置了主窗体背景图片,该图片将随主窗体的大小自动缩放

}

}

// 窗体监听器

/**

private final class FrameListener extends ComponentAdapter {

public void componentResized(final ComponentEvent e) {

updateBackImage();

}

}

*/

// 窗体监听器

private final class FrameListener extends ComponentAdapter {

public void componentResized(final ComponentEvent e) {

updateBackImange();

}

}

/**

// 主窗体菜单项的单击事件监听器

protected final class openFrameAction extends AbstractAction {

private String frameName = null;

private openFrameAction() {

}

public openFrameAction(String cname, String frameName, Icon icon) {

this.frameName = frameName;

putValue(Action.NAME, cname);

putValue(Action.SHORT_DESCRIPTION, cname);

putValue(Action.SMALL_ICON, icon);

}

public void actionPerformed(final ActionEvent e) {

JInternalFrame jf = getIFrame(frameName);

// 在内部窗体闭关时,从内部窗体容器ifs对象中清除该窗体。

jf.addInternalFrameListener(new InternalFrameAdapter() {

public void internalFrameClosed(InternalFrameEvent e) {

ifs.remove(frameName);

}

});

if (jf.getDesktopPane() == null) {

desktopPane.add(jf);

jf.setVisible(true);

}

try {

jf.setSelected(true);

} catch (PropertyVetoException e1) {

e1.printStackTrace();

}

}

}

*/

//内部类

/**

* 必须继承AbstractAction类实现Action借口。该类用于创建导航按钮的Action对象,并为每个导航按钮定义创建并显示不同窗体对象的动作监听器

* 这个监听器在按钮被按下时,调用getIFrame()方法获取相应的窗体对象,并显示在主窗体中

*

*/

protected final class openFrameAction extends AbstractAction {

private String frameName = null;

private openFrameAction(){

}

public openFrameAction(String cname,String frameName,Icon icon){

this.frameName = frameName;

putValue(Action.NAME, cname);//设置action名称

putValue(Action.SHORT_DESCRIPTION, cname);//设置Action的提示文本框

putValue(Action.SMALL_ICON, icon);//设置Action的图标

}

@Override

public void actionPerformed( final ActionEvent e) {

// TODO Auto-generated method stub

JInternalFrame jf = getIFrame(frameName);

//在内部窗体关闭时,从内部窗体容器ifs对象中清除该窗体

jf.addInternalFrameListener(new InternalFrameAdapter(){

public void internalFrameClosed(InternalFrameEvent e){

ifs.remove(frameName);

}

});

if(jf.getDesktopPane() == null){

desktopPane.add(jf);//将窗体加到主窗体中

jf.setVisible(true);

}

try{

jf.setSelected(true);

}catch(PropertyVetoException el){

el.printStackTrace();

}

}

/**

* 该方法负责创建指定名称的窗体对象。是用来Java的反射技术,调用不同窗体类的默认构造方法创建窗体对象

* @param frameName2

* @return

*/

}

/**

* 在类的静态代码段中设置进销存管理系统的外观样式。Swing支持夸平台特性,它可以在不同的造作系统中保持一致的风格,

* 在本系统中使用UIManager类的setLookAndFeel()方法设置程序界面使用外观,这样可以使程序更像本地应用程序

*

*/

/**

* static {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception e) {

e.printStackTrace();

}

}

*/

static{

try{

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

}catch(Exception e){

e.printStackTrace();

}

}

/**

* 编写主窗体的main()入口方法,在该方法中创建登录窗体对象,登录窗体会验证登录信息,

* 并显示主窗体界面

*/

}

上面是复制的首页代码,原本应该显示图片,这样的

但是一直显示的是个很小的黑框,不能拖动,不能改变大小,甚至不能关闭;

真真是困扰了我一个下午,很是心烦,最后终于找到了问题所在

String imgUrl = "jxcManage/res/ActionIcon/"+fName+".png";

String imgUrl_roll = "jxcManage/res/ActionIcon/"+fName+"_roll.png";

String imgUrl_down = "jxcManage/res/ActionIcon/"+fName+"_down.png";

在添加图片时,原来代码是写的相对路径,可能人家设置了,自己没有设置,所以把路径改成绝对路径就可以,就是加上你的项目名称以及每一层目录名称
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: