「java面板窗体」Java窗口界面设计
本篇文章给大家谈谈java面板窗体,以及Java窗口界面设计对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、在java中面板和框架什么区别?
- 2、如何使JAVA的控制台以窗体的形式显示在桌面上?
- 3、java怎么给窗体或者面板设置背景图片?
- 4、java图形界面子窗体怎么弄?
- 5、如何把窗体加入面板中 java
- 6、JAVA中的JPanel怎么使用呢?
在java中面板和框架什么区别?
认识java中的面板
1.java中的面板关系和种类如下:
2.java中的框架(JFrame)
JFrame上可以根据需要加载各种面板,在Swing中的JFrame窗体与AWT中的Frame窗体有一些不同。JFrame由他的窗体本身加上其上的JRootPane根面板,JLayeredPane层面板,containPane内容面板,glassPane玻璃面板,JMenuBar菜单栏(可选,不包括在内)四部分组成。其中根面板在JRootPane类中实现,层面板在JLayeredPane类中实现,他们都是JComponent的子类。而containPane和glassPane没有专门对应的类。
3.各种面板(或称窗格)的关系及作用:
JRootPane根面板:该面板是在JFrame窗体创建时就默认添加进来的,是所有其他面板的载体或父级,他覆盖窗体的除标题栏和边条之外的整个表面。根面板默认是不可见的。根面板负责管理其他面板(层面板,玻璃面板),如使其他面板覆盖整个JFrame窗体等。
JLayeredPane层面板:该面板是其他所有面板的父级,在JRootPane面板的上面,他再次覆盖窗体的整个表面,内容面板和JMenuBar菜单栏被添加到层面板上。当添加了菜单栏时,菜单栏被添加到JLayeredPane面板的顶部,剩下的部分被内容面板填充。层面板是分很多层的,每一层使用一个相应的数字来表示,而内容面板就位于层面板中的某一层,在后面的内容中我们可以看到层面板可以让你设计出相互重叠的内部窗体,层面板将负责管理各种内部窗体的叠放问题,对于层面板的每一层都相当于是一个容器,因此可以直接向层面板中添加组件。层面板的内容后面会作具体介绍。
containPane内容面板:由层面板的介绍可知,内容面板是层面板中的某一层。默认的内容面板是不透明的,而且是一个JPane对象。该面板在窗体中起着工作区的作用,当我们向窗体添加组件时就应该添加到这一层上,而不能像AWT那样直接添加到窗体上,若你那样做了,实际上该组件也是被添加到内容面板上的,若窗体未设置内容面板,则组件无法显示。比如要添加按钮jb则正确的方式为,Container p=jframe.getContentPane();
p.add(jr);
或jframe.getContentPane().add(jr);
其中getContentPane()是JFrame类中的方法,该方法将反回内容面板的引用,这是访问默认的内容面板的方法,因为默认的内容面板没有特定的名字,因此应使用该方法。
glassPane玻璃面板:该面板总是存在的,而且他位于最上面,默认情况下玻璃面板是不可见的,玻璃面板用于接收鼠标事件和在其他组件上绘图。
如何使JAVA的控制台以窗体的形式显示在桌面上?
1、首先打开电脑,转到JAVA的控制台页面。
2、然后关闭页面,会自动弹出,是否以窗体形式显示在桌面。
3、点击下方显示,即可出现在桌面。
java怎么给窗体或者面板设置背景图片?
1利用标签组件来设置\x0d\x0a标签本来是一种最简单的组件,为什么可以将它设置成为一个窗体的背景呢?首先还是要了解框架JFrame中的层次结构。JFrame中的层次分布及相对关系是:最底层是JRootPane,第二层是JlayerPane,最上层就是ContentPane,也正是我们常说的内容面板。所以一般我们拖放的控件就是在ContentPane层上。也就是说我们只需将背景图片放在JFrame的第二层是JlayerPane上,再把内容面板ContentPane设置为透明,则第二层JlayerPane上放置的图片即成为内容面板的背景了。具体代码如下:\x0d\x0aJPanelpnlMain=newJPanel();//创建面板pnlMain。\x0d\x0agetContentPane().add(pnlMain);//将pnlMain设置为主面板。\x0d\x0aIconi=newImageIcon("背景.jpg");/*用源图片“背景.jpg”构造一个ImageIcon对象i,需要注意如果图片的路径使用的是相对路径,则图片文件必须放在类文件所在文件夹或项目的根文件夹中,否则图片的路径必须用绝对路径。*/\x0d\x0aJLabellblLogo=newJLabel(i);//用指定的图片构造标签对象lb\x0d\x0athis.getLayeredPane().add(lb,newInteger(Integer.MIN_VALUE));\x0d\x0a//把标签放在第二层JlayerPane上。\x0d\x0alb.setBounds(0,0,ii.getIconWidth(),i.getIconHeight());\x0d\x0a//设置标签的尺寸,即背景图象的大小。\x0d\x0agetConentPane().setOpaque(false);/*把内容面板设置为透明,这样整个框架的背景就不再是内容面板的背景色,而是第二层中标签的图像。*/\x0d\x0apnlMain.add(lb);//将标签添加到主面板pnlMain中。\x0d\x0a用标签组件JLabel来设置窗体背景,其扩展性上比较差,且在标签上不能放置其他组件,比如:在放置一个JButton,整个布局背景图就错乱。导致这种现象是因为Java加载组件是有顺序的,作为背景的JLabel的代码一定要放在全部组件代码的最后,这样JLabel的背景图片才不会被其他组件遮住,从而使整个布局背景错乱。所以采用这种方式来设置窗体背景有很大的局限性。因此最好是采用以下方式来设置窗体背景。\x0d\x0a2通过JPanel面板来设置窗体背景\x0d\x0aJPanel面板是Java中的容器之一。而Java中的容器是没有背景图片的属性的,它们只有背景颜色,如果需要在JPanel面板上设置窗体背景,就需要重写paintComponent(Graphicsg)方法,即把所要设置的背景图片画上作为JPanel面板的背景。具体实现如下:\x0d\x0a首先定义一个JPanel的子类BjPanel,由于JPanel的构造方法不能添加图像,因此在创建此子类的时候先用getImage载入一幅背景图片,在重写paintComponent(Graphicsg)方法时,利用drawImage方法将其逐渐绘制到屏幕上,并将该面板添加到框架中,最后将该面板设置为透明。其代码如下:\x0d\x0aimportjava.awt.*;\x0d\x0aimportjavax.swing.*;\x0d\x0apublicclassbkground\x0d\x0a{\x0d\x0apublicstaticvoidmain(Stringargs[])\x0d\x0a{\x0d\x0aBjFramef=newBjFrame();\x0d\x0af.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\x0d\x0af.setVisible(true);\x0d\x0a}\x0d\x0a}\x0d\x0aclassBjFrameextendsJFrame\x0d\x0a{\x0d\x0apublicBjFrame()\x0d\x0a{\x0d\x0asetSize(WTH,HHT);\x0d\x0aBjPanelpl=newBjPanel();\x0d\x0aContainercontentPane=getContentPane();\x0d\x0acontentPane.add(pl);\x0d\x0apl.setOpaque(true);\x0d\x0a}\x0d\x0apublicstaticfinalintWTH=300;\x0d\x0apublicstaticfinalintHHT=200;\x0d\x0a}\x0d\x0aclassBjPanelextendsJPanel\x0d\x0a{\x0d\x0aImageim;\x0d\x0apublicBjPanel()\x0d\x0a{\x0d\x0aim=Toolkit.getDefaultToolkit().getImage("背景.jpg");//需要注意的是如果用相对路径载入图片,则图片文件必须放在类文件所在文件夹或项目的根文件夹中,否则必须用绝对路径。\x0d\x0a}\x0d\x0apublicvoidpaintComponent(Graphicsg)\x0d\x0a{\x0d\x0asuper.paintComponent(g);\x0d\x0aintimWidth=image.getWidth(this);\x0d\x0aIntimHeight=image.getHeight(this);//定义图片的宽度、高度\x0d\x0aintFWidth=getWidth();\x0d\x0aintFHeight=getHeight();//定义窗口的宽度、高度\x0d\x0aintx=(FWidth-imWidth)/2;\x0d\x0ainty=(FHeight-imHeight)/2;//计算图片的坐标,使图片显示在窗口正中间\x0d\x0ag.drawImage(image,x,y,null);//绘制图片\x0d\x0a}\x0d\x0a}
java图形界面子窗体怎么弄?
给你一段我自己用Swing写的MDI(多文档用户界面)的代码,仅供参考: package com.jb.cdjj.y2t027.flydream.hrms.swing;import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyVetoException;
import java.text.SimpleDateFormat;
import java.util.Calendar;import javax.swing.BorderFactory;
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.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JToolBar;
import javax.swing.Timer;
import javax.swing.border.BevelBorder;import com.jb.cdjj.y2t027.flydream.hrms.pojo.UsersPojo;
import com.jb.cdjj.y2t027.flydream.hrms.swing.component.JDesktopScrollPane;
import com.jb.cdjj.y2t027.flydream.hrms.swing.utils.CharacterCommon;/**
* p描述:FrmMain 主界面视窗UI类
* p作者:邓超
* p班级:Y2T027 FlyDream 小组
* p时间:2009-5-13
* p地点:宿舍
* p版本:1.0.0.1
*/
public class FrmMain extends JFrame { /**
* 序列化版本ID
*/
private static final long serialVersionUID = -6893438572255430328L; {
// 设置UI感观效果(使用三方jar包:looks-2.1.4.jar)
try {
javax.swing.UIManager.setLookAndFeel("com.jgoodies.looks.plastic.PlasticXPLookAndFeel");
} catch(Exception e) {
e.printStackTrace();
}
} /**
* UI组件
*/
private JMenuItem mnuItemHelpTopic;
private JPanel pnlMain;
private JMenu mnuHelp;
private JMenuItem mnuItemDelete;
private JPanel pnlTlb;
private JSeparator septEdit;
private JMenuItem mnuItemPaste;
private JMenuItem mnuItemCopy;
private JMenuItem mnuItemCut;
private JMenu mnuEdit;
private JMenuItem mnuItemLock;
private JMenuItem mnuItemExit;
private JSeparator septSystemBottom;
private JMenuItem mnuItemAbout;
private JMenuItem mnuItemLogout;
private JSeparator septSystemTop;
private JMenuItem mnuItemPermissions;
private JMenuItem mnuItemParamConfig;
private JLabel lblLoginUser;
private JScrollPane pnlScrollContent;
private JMenuItem mnuCloseAll;
private JSeparator septWindow;
private JMenuItem mnuItemCloseCurrent;
private JMenuItem mnuItemSwitch;
private JMenu mnuWindow;
private JLabel lblTime;
private JLabel lblProgressMsg;
private JProgressBar progressOperation;
private JDesktopPane pnlDsk;
private JPanel pnlStatus;
private JButton btnHelp;
private JButton btnExit;
private JButton btnLogout;
private JButton btnLockScreen;
private JToolBar tlbMain;
private JMenu mnuSystem;
private JMenuBar mnuBarMain;
private JButton btnPermissions;
private JButton btnParamConfig;
private JLabel lblTlbSpliter2;
private JLabel lblTlbSpliter1;
private JMenuItem mnuModifyPwd;
private static FrmLogin frmLogin;
private JPanel pnlContent;
private static UsersPojo currentLoginUser; /**
* 获取当前登录用户
* @return 当前登录用户实体
*/
public static UsersPojo getCurrentLoginUser() {
return currentLoginUser;
}
/**
* 设置当前登录用户
* @param currentLoginUser 当前登录用户实体
*/
public static void setCurrentLoginUser(UsersPojo currentLoginUser) {
FrmMain.currentLoginUser = currentLoginUser;
} /**
* 参数化构造器
* @param loginWindow 登录UI实例
*/
public FrmMain(FrmLogin loginWindow) {
super();
frmLogin = loginWindow;
initGUI();
this.addComponentListener(new ComponentAdapter(){ /**
* 组件显示事件方法
*/
@Override
public void componentShown(ComponentEvent e) {
lblLoginUser.setText("【"
+ (currentLoginUser != null
? (currentLoginUser.getLoginAccount() + "/" + currentLoginUser.getUsersName())
: "未登录")
+ "】");
super.componentShown(e);
}
});
}
/**
* UI组件初始化方法
*/
private void initGUI() {
try {
{
BorderLayout thisLayout = new BorderLayout();
getContentPane().setLayout(thisLayout);
}
{
mnuBarMain = new JMenuBar();
setJMenuBar(mnuBarMain);
{
mnuSystem = new JMenu();
mnuBarMain.add(mnuSystem);
mnuSystem.setText("系统(S)");
mnuSystem.setMnemonic(java.awt.event.KeyEvent.VK_S);
mnuSystem.setName("mnuSystem");
mnuSystem.setDoubleBuffered(false);
{
mnuItemParamConfig = new JMenuItem();
mnuSystem.add(mnuItemParamConfig);
mnuItemParamConfig.setText("参数设置(P)...");
mnuItemParamConfig.setToolTipText("前台系统字典及参数设置");
mnuItemParamConfig.setMnemonic(java.awt.event.KeyEvent.VK_P);
mnuItemParamConfig.setName("mnuItemParamConfig");
mnuItemParamConfig.setIcon(new ImageIcon(getClass().getClassLoader().getResource("img/Param.png")));
mnuItemParamConfig.setDoubleBuffered(false);
mnuItemParamConfig.addActionListener(new ActionListener() {
/**
* 激活参数设置菜单项的事件方法
*/
public void actionPerformed(ActionEvent e) {
openOnlyOneInternalFrame(FrmInlParam.getInstance());
}
});
}
{
mnuItemPermissions = new JMenuItem();
mnuSystem.add(mnuItemPermissions);
mnuItemPermissions.setText("权限管理(E)...");
mnuItemPermissions.setToolTipText("系统用户及其授权管理");
mnuItemPermissions.setName("mnuItemPermissions");
mnuItemPermissions.setMnemonic(java.awt.event.KeyEvent.VK_E);
mnuItemPermissions.setIcon(new ImageIcon(getClass().getClassLoader().getResource("img/Permissions.png")));
mnuItemPermissions.setDoubleBuffered(false);
mnuItemPermissions.addActionListener(new ActionListener() {
/**
* 激活权限管理菜单项的事件方法
*/
public void actionPerformed(ActionEvent e) {
openOnlyOneInternalFrame(FrmInlPermissions.getInstance());
}
});
}
{
septSystemTop = new JSeparator();
mnuSystem.add(septSystemTop);
septSystemTop.setName("septSystemTop");
septSystemTop.setDoubleBuffered(false);
}
----------------------------------字数太多,只能分开发。
如何把窗体加入面板中 java
一般来说,我们常把JPanel[面板]放到JFrame窗体中
但是也有一种内部窗体JInternalFrame ,可以放到其他的容器JDesktopPane里,
效果图如下
代码如下
import java.awt.*;
import java.awt.event.*;
import java.beans.PropertyVetoException;
import javax.swing.*;
public class FrameDemo extends JFrame implements ActionListener{
JButton jb;
JDesktopPane jdp;
public FrameDemo(){
jb =new JButton("创建一个内部窗体");
jb.addActionListener(this);
jdp = new JDesktopPane();
add(jdp);
add(jb,BorderLayout.SOUTH);
setSize(500,500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new FrameDemo();
}
int index = 1;
int x = 50;
int y=50;
public void actionPerformed(ActionEvent e) {
//内部窗口
JInternalFrame iframe = new JInternalFrame("第"+index+"个内部窗口"
, true, true, true, true);
index++;
iframe.setLocation(x+=10, y+=10);
iframe.setSize(210, 180);
iframe.setVisible(true);
jdp.add(iframe);
try {
iframe.setSelected(true);//被选中
} catch (PropertyVetoException e1) {
e1.printStackTrace();
}
}
}
JAVA中的JPanel怎么使用呢?
使用方法:
JPanel可以为添加到窗体中的轻型控件提供通用的容器。默认情况下,面板容器不会向控件添加任何除自身背景之外的颜色,但是,可以轻松地向其添加边框(borders)并根据需要改制样式。
在大多数Java GUI外观体验(look and feel)中,面板容器默认是不透明。不透明的面板容器跟普通的目录窗格功能差别不大,并且可以有效帮助样式改进。
设置图层管理器
和其他容器(container)一样,面板容器panel也使用布局管理器(Layout Manager)对添加到容器中的组件(compnent)进行定位和设置尺寸大小。
默认情况下,面板容器的布局管理器是FlowLayout(流式布局)类的一个实例,这个类对放置在容器中的空间按行进行布局(从左到右诸行排列)。在创建面板容器时,你可以轻松地使用任何其他
布局管理器通过调用setLayout方法或指定一个布局管理器。
如下是一个在创建面板容器时设置图层管理器的例子:
JPanel p=new JPanel(new BorderLayout());
但这种方法不能用在BoxLayout(盒子布局)中,因为BoxLayout构造器需要一个预留(pre-existing)容器。如下所示:
JPanel p=new JPanel();
p.setLayout(new BoxLayout(p,BoxLayout.PAGE_AXIS));
添加控件
向面板容器中添加组件时使用add()方法,而向add()方法中传递的参数决定于该面板容器使用哪个布局管理器。当所用的布局管理器是FlowLayout,BoxLayout,GridLayout,或SpringLayout时,像通常那样向add()方法传递单一的参数即可,如下所示:
aFlowPanel.add(aComponent);
aFlowPanel.add(anotherComponent);
而当布局管理器为BorderLayout时,还需要提供另一个参数来指定添加到容器中控件的位置,例如:
aBorderPanel.add(aComponent,BorderLayout.CENTER);
aBorderPanel.add(anotherComponent,BorderLayout.PAGE_END);
对于GridBagLayout布局管理器,可以使用上述任一方法,但必须以某种方式对每个组件指定GridBagConstraints,例如:
JPanel pane=new JPanel(new GridBagLayout());
GridBagConstraints c=new GridBagConstraints();
警告
Swing不是线程安全的。
此类的序列化对象与以后的Swing版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同Swing版本的应用程序之间进行RMI(Remote Method Invocation,远程方法调用)。
扩展资料:
JPanel一个面板也是一个容器JPanel Pan=new JPanel();
Pan.setLayout(null);//设置为空布局也就是自由布局
Pan.add(控件);//添加控件
JPanel是java图形化界面中最常使用的容器。实例:在窗体中添加一个蓝色的面板
//PanelDemo.java
import javax.swing.*;
import java.awt.*;//引入AWT包,因为要使用到颜色类
class PanelDemo{
public static void main(String[]args)throws Exception
{JFrame f=new JFrame("第一个Java窗口");
f.setSize(300,200);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.setResizable(false);
f.setLocationRelativeTo(null);
f.setLayout(null);//设置窗体布局为空布局
JPanel p=new JPanel();//实例化一个面板
//设置面板背景色为蓝色,如果不引入AWT包,程序将出错,可以试试看
p.setBackground(Color.BLUE);
p.setSize(100,100);//设置面板对象大小
f.getContentPane().add(p);//将面板添加到窗体中
//如果使用下面添加面板的方法,面板将布满整个窗口,可以试试看
//f.setContentPane(p);
}
}
参考资料:
百度百科——JPanel
java面板窗体的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java窗口界面设计、java面板窗体的信息别忘了在本站进行查找喔。
发布于:2022-12-16,除非注明,否则均为
原创文章,转载请注明出处。