精华内容
下载资源
问答
  • C#创建的自定义窗口和面板在加载到CAD进行显示时,会自动获取句柄,有时候需要返回CAD界面进行操作(如选择对象)时,鼠标离开自定义窗口或者面板后,CAD无法获得句柄,需要点选一下CAD操作空间后,才能开始交互操作...

    C#创建的自定义窗口和面板在加载到CAD进行显示时,会自动获取句柄,有时候需要返回CAD界面进行操作(如选择对象)时,鼠标离开自定义窗口或者面板后,CAD无法获得句柄,需要点选一下CAD操作空间后,才能开始交互操作,给程序运行带来诸多不便:
    在这里插入图片描述
    为了解决该问题,需要利用Windows API函数SetFocus实现,具体步骤为:
    在类开头添加api函数申明

    [DllImport("user32.dll", EntryPoint = "SetFocus")]
    public static extern int SetFocus(IntPtr hWnd);
    
    同时,在窗体或面板类的MouseLeave事件中调运SetFocus函数
    
            private void PaletteDict_MouseLeave(object sender, EventArgs e)
            {
                SetFocus(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Window.Handle);
            }
    
    但是,测试发现该方式在鼠标快速移动时,焦点切换明显滞后,为此,本人亲测发现,可以在具体的交互操作中继续添加SetFocus函数的调用:
    
                Document doc = acadApp.DocumentManager.MdiActiveDocument;
                DocumentLock docLock = doc.LockDocument();
                Database db = doc.Database;
                Editor ed = doc.Editor;
    
                SetFocus(doc.Window.Handle);//提前调用
    
                PromptEntityResult per = ed.GetEntity("\n请选择对象");
                using (Transaction tran=db.TransactionManager.StartTransaction()
                {
                	...
                }
    
    可有效解决焦点切换滞后的问题!
    
    展开全文
  • Java Swing:窗体面板,菜单,组件

    千次阅读 多人点赞 2019-05-30 21:34:21
    Java中对图形化知识Swing的基本认识(窗体+面板+菜单+组件)

    GUI----图形用户接口(Graphical User Interface)

    就是采用图形的方式,进行操作页面的显示
    Java提供了两个对GUI的实现:

    • AWT(Abstract Window Toolkit,抽象窗体工具包)
    • Swing(是后来出现的版本,功能更多,效果更好看,而且Swing是轻量级的)

    创建可见窗体

    使用JFrame frame = new JFrame();frame.setVisible(true);

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
        
        public static void main(String[] args) {
            //1.先创建一个窗体
            JFrame frame = new JFrame();
            
            //2.设置窗体的属性状态--从隐藏变为显示
            frame.setVisible(true);
    
        }
    }
    
    

    运行后,看电脑屏幕的左上角:
    在这里插入图片描述
    可以通过鼠标把它拉伸:
    在这里插入图片描述

    使右上角按钮真实的关闭

    使用frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    这个窗体被创建出来后,右上方的三个按钮都是有用的(最小化,最大化,关闭)

    但是关闭按钮的作用实际上不是真的关闭窗体,你看:
    在这里插入图片描述
    还在执行中,实际上他只是把窗体的状态切换回隐藏状态

    解决办法:

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            frame.setVisible(true);
            
            //设置点击关闭按钮,则窗体执行完毕
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        }
    }
    
    

    设置窗体出现的位置和大小

    frame.setBounds(500,250,300,300);
    这个窗体有点羞涩啊,每次都从左上角出现,这很不好
    而且出现时的大小就这么一丢丢,也不好

    在Java中坐标系是这么表示的:
    在这里插入图片描述
    解决办法:

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            //设置窗体出现时的位置和初始大小
            frame.setBounds(500,250,300,300);
            //四个参数:窗体左上角的x坐标,窗体左上角的y坐标,width,height
        }
    }
    
    

    执行后:
    在这里插入图片描述

    设置窗体的标题

    有两种方法:

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            //第一种方法:构造JFrame时传的参数就是titile
            JFrame frame = new JFrame("第一种设置标题的方法");
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,400,300);
        }
    }
    
    

    执行后:
    在这里插入图片描述

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("第一种设置标题的方法");
            //第二种方法:
            frame.setTitle("第二种设置标题的方法");
            
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,400,300);
        }
    }
    
    

    运行后:
    在这里插入图片描述

    添加按钮

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("添加按钮");
    
            //1.创建一个按钮
            JButton button = new JButton("我是一个大按钮");
    
            //2.将按钮添加到窗体内
            frame.add(button);
    
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,400,300);
        }
    }
    
    

    运行后:
    在这里插入图片描述
    一个屏幕都是按钮,真丑啊

    添加面板

    面板可以在创建多个,是对窗体进行区域分隔的
    面板是个无色透明的

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("添加按钮");
            JButton button = new JButton("我是一个大按钮");
            
            //1.创建一个面板
            JPanel panel = new JPanel();
            //2.将面板添加到窗体内
            frame.add(panel);
            //3.将按钮添加到面板内
            panel.add(button);
    
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,400,300);
        }
    }
    
    

    运行后:
    在这里插入图片描述
    JPanel和JFrame都有自身的管控组件排布的布局管理规则,JPanel是流式的,JFrame是边界式的
    所以才会两次显示不一样

    添加文本框

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("添加按钮");
            JButton button = new JButton("我是一个大按钮");
            JPanel panel = new JPanel();
            
            //1.创建一个文本框
            JTextField text = new JTextField("亚索,你一路走好啊");
            panel.add(text);
    
            frame.add(panel);
            panel.add(button);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,400,300);
        }
    }
    
    

    运行后:
    在这里插入图片描述
    我还可以在窗体的文本框中,直接重新输入

    文本框的长度还可以设置:

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("添加按钮");
            JButton button = new JButton("我是一个大按钮");
            JPanel panel = new JPanel();
           
            //参数内传数值,就是设置文本框的长度
            JTextField text = new JTextField(20);
            
            panel.add(text);
            frame.add(panel);
            panel.add(button);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,400,300);
        }
    }
    
    

    运行后:
    在这里插入图片描述

    添加密码框,添加标签

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("登录");
    
            JButton button = new JButton("登录");
            JTextField text = new JTextField(20);
            JPanel panel = new JPanel();
    
            //创建一个密码框
            JPasswordField pass = new JPasswordField(20);
    
            //创建两个标签
            JLabel lable1 = new JLabel("账户:");
            JLabel lable2 = new JLabel("密码:");
    
            frame.add(panel);
            panel.add(lable1);
            panel.add(text);
            panel.add(lable2);
            panel.add(pass);
            panel.add(button);
    
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,400,300);
        }
    }
    
    

    运行结果:
    在这里插入图片描述
    然后我通过鼠标,把窗体拉伸的好看一点:
    在这里插入图片描述

    设置不让窗体可以被鼠标拖拽大小

    加一句这个就行frame.setResizable(false);

    添加复选框

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("登录");
    
            JButton button = new JButton("登录");
            JTextField text = new JTextField(20);
            JPanel panel = new JPanel();
            JPasswordField pass = new JPasswordField(20);
            JLabel lable1 = new JLabel("账户:");
            JLabel lable2 = new JLabel("密码:");
            
            //创建三个复选框
            JCheckBox box1 = new JCheckBox("抽烟");
            JCheckBox box2 = new JCheckBox("喝酒");
            JCheckBox box3 = new JCheckBox("烫头");
            
    
            frame.add(panel);
            panel.add(lable1);
            panel.add(text);
            panel.add(lable2);
            panel.add(pass);
            panel.add(button);
            panel.add(box1);
            panel.add(box2);
            panel.add(box3);
    
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,300,300);
            frame.setResizable(false);
        }
    }
    
    

    运行后:
    在这里插入图片描述
    所谓复选框,就是三个按钮,我想选几个就几个
    比如,我三个都选
    在这里插入图片描述

    添加单选框

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("登录");
    
            JButton button = new JButton("登录");
            JTextField text = new JTextField(20);
            JPanel panel = new JPanel();
            JPasswordField pass = new JPasswordField(20);
            JLabel lable1 = new JLabel("账户:");
            JLabel lable2 = new JLabel("密码:");
    
            //创建三个单选框
            JRadioButton r1 = new JRadioButton("男");
            JRadioButton r2 = new JRadioButton("女");
            JRadioButton r3 = new JRadioButton("不可描述");
            
    
            frame.add(panel);
            panel.add(lable1);
            panel.add(text);
            panel.add(lable2);
            panel.add(pass);
            panel.add(button);
            panel.add(r1);
            panel.add(r2);
            panel.add(r3);
    
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,300,300);
            frame.setResizable(false);
        }
    }
    
    

    运行后:
    在这里插入图片描述
    不过有个小问题,现在这还不是单选按钮,因为这三个按钮没有关系,还不是单选;
    要将这三个单选框放到一个组里,才能成为单选

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("登录");
    
            JButton button = new JButton("登录");
            JTextField text = new JTextField(20);
            JPanel panel = new JPanel();
            JPasswordField pass = new JPasswordField(20);
            JLabel lable1 = new JLabel("账户:");
            JLabel lable2 = new JLabel("密码:");
    
            //创建三个单选框
            JRadioButton r1 = new JRadioButton("男");
            JRadioButton r2 = new JRadioButton("女");
            JRadioButton r3 = new JRadioButton("不可描述");
            //这三个单选框放到一个组里
            ButtonGroup group = new ButtonGroup();//但是这个组本身不是组件
            group.add(r1);
            group.add(r2);
            group.add(r3);
    
            frame.add(panel);
            panel.add(lable1);
            panel.add(text);
            panel.add(lable2);
            panel.add(pass);
            panel.add(button);
            panel.add(r1);
            panel.add(r2);
            panel.add(r3);
    
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,300,300);
            frame.setResizable(false);
        }
    }
    
    

    运行后,我选了一个按钮
    在这里插入图片描述

    添加文本域

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("登录");
    
            JButton button = new JButton("登录");
            JTextField text = new JTextField(20);
            JPanel panel = new JPanel();
            JPasswordField pass = new JPasswordField(20);
            JLabel lable1 = new JLabel("账户:");
            JLabel lable2 = new JLabel("密码:");
            JRadioButton r1 = new JRadioButton("男");
            JRadioButton r2 = new JRadioButton("女");
            JRadioButton r3 = new JRadioButton("不可描述");
            ButtonGroup group = new ButtonGroup();
            group.add(r1);
            group.add(r2);
            group.add(r3);
    
            //创建文本域
            JTextArea area = new JTextArea(5,20);
            //参数:行数,列数
    
            frame.add(panel);
            panel.add(lable1);
            panel.add(text);
            panel.add(lable2);
            panel.add(pass);
            panel.add(button);
            panel.add(r1);
            panel.add(r2);
            panel.add(r3);
            panel.add(area);
    
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,300,300);
            frame.setResizable(false);
        }
    }
    
    

    运行后:
    在这里插入图片描述
    但是它还存在一个小问题,随着我的输入,他会变大
    在这里插入图片描述
    我给它加个滚动条

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("登录");
    
            JButton button = new JButton("登录");
            JTextField text = new JTextField(20);
            JPanel panel = new JPanel();
            JPasswordField pass = new JPasswordField(20);
            JLabel lable1 = new JLabel("账户:");
            JLabel lable2 = new JLabel("密码:");
            JRadioButton r1 = new JRadioButton("男");
            JRadioButton r2 = new JRadioButton("女");
            JRadioButton r3 = new JRadioButton("不可描述");
            ButtonGroup group = new ButtonGroup();
            group.add(r1);
            group.add(r2);
            group.add(r3);
    
            JTextArea area = new JTextArea(5,20);
            //滚动条
            JScrollPane pane = new JScrollPane(area);//是滚动条包着文本域
    
            frame.add(panel);
            panel.add(lable1);
            panel.add(text);
            panel.add(lable2);
            panel.add(pass);
            panel.add(button);
            panel.add(r1);
            panel.add(r2);
            panel.add(r3);
            panel.add(pane);//所以这里只添加滚动条即可
    
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,300,300);
            frame.setResizable(false);
        }
    }
    
    

    运行后:
    在这里插入图片描述

    瞎吉儿输入后:
    在这里插入图片描述

    菜单条,菜单,带单项

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("菜单条,菜单,菜单项");
            JPanel panel = new JPanel();
    
            //创建菜单条
            JMenuBar bar = new JMenuBar();
    
            //创建三个菜单
            JMenu menu1 = new JMenu("File");
            JMenu menu2 = new JMenu("Edit");
            JMenu menu3 = new JMenu("Navigation");
            bar.add(menu1);
            bar.add(menu2);
            bar.add(menu3);
            
            //创建若干个菜单项
            JMenuItem item1 = new JMenuItem("New");
            JMenuItem item2 = new JMenuItem("Open");
            menu1.add(item1);
            menu1.add(item2);
            JMenuItem item3 = new JMenuItem("Cut");
            JMenuItem item4 = new JMenuItem("Copy");
            menu2.add(item3);
            menu2.add(item4);
            JMenuItem item5 = new JMenuItem("Class...");
            menu3.add(item5);
    
            frame.add(panel);
            panel.add(bar);
    
    
    
    
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,300,300);
            frame.setResizable(false);
        }
    }
    
    

    运行后:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    将菜单条,直接放置在JFrame上,有不同的表示效果:

    package GUI;
    
    import javax.swing.*;
    
    public class TestGUI {
    
        public static void main(String[] args) {
            JFrame frame = new JFrame("菜单条,菜单,菜单项");
    
            //创建菜单条
            JMenuBar bar = new JMenuBar();
            frame.setJMenuBar(bar);
    
            //创建三个菜单
            JMenu menu1 = new JMenu("File");
            JMenu menu2 = new JMenu("Edit");
            JMenu menu3 = new JMenu("Navigation");
            bar.add(menu1);
            bar.add(menu2);
            bar.add(menu3);
    
            //创建若干个菜单项
            JMenuItem item1 = new JMenuItem("New");
            JMenuItem item2 = new JMenuItem("Open");
            menu1.add(item1);
            menu1.add(item2);
            JMenuItem item3 = new JMenuItem("Cut");
            JMenuItem item4 = new JMenuItem("Copy");
            menu2.add(item3);
            menu2.add(item4);
            JMenuItem item5 = new JMenuItem("Class...");
            menu3.add(item5);
    
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setBounds(500,250,300,300);
            frame.setResizable(false);
        }
    }
    
    

    运行后:
    在这里插入图片描述

    布局管理

    在这里插入图片描述

    展开全文
  • 都快半个多月了,因为我们数据库课设(是做一个 ***系统)要用到Java-Swing创建窗体,而我想实现这样一个功能:就是一个窗体上有几个不同的按钮,和一个主面板,通过点击按钮,切换不同的面板,即显示不同的内容。...

    今天聊聊关于Swing窗体如何实现在同一个窗体实现不同面板的切换的解决方案,这个问题也是一直困扰了我很久,都快半个多月了,因为我们数据库课设(是做一个 ***系统)要用到Java-Swing创建窗体,而我想实现这样一个功能:就是一个窗体上有几个不同的按钮,和一个主面板,通过点击按钮,切换不同的面板,即显示不同的内容。

    这个之前也在百度上找了很多很多的实现方案,但感觉实现方式都不是很理想,这里我做了一个改进的解决方案。实现步骤大体如下:

    1. 创建一个主窗体JFrame
    2. 在主窗体上添加一个主显示JPanel
    3. 在主窗体上添加切换按钮或者在菜单栏上添加按钮也行
    4. 写要替换显示的JPanel类,直接继承JPanel,这个JPanel类对应的面板大小建议设置和步骤2主显示JPanel的宽和高一致
    5. 在主窗体类中添加一个CardLayout cardLayout=new CardLayout()成员
    6. 给主显示JPanel设置步骤5的布局方式
    7. 创建要替换显示JPanel类的对象,将其添加到主显示JPanel中
    8. 给对应的按钮添加事件,调用cardLayout.show()方法要选择点击按钮后要切换显示的面板

    下面是我做的一个小demo,简单演示一下: 

    主窗体类:

    package gui2;
    
    import java.awt.BorderLayout;
    import java.awt.CardLayout;
    import java.awt.EventQueue;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    public class Jrame1 extends JFrame {
    
    	private JPanel contentPane;
    	CardLayout cardLayout=new CardLayout();
    
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					Jrame1 frame = new Jrame1();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	/**
    	 * Create the frame.
    	 */
    	public Jrame1() {
    		setTitle("demo—同一个窗口不同面板切换");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
    		
    		JPanel panel = new JPanel();
    		panel.setBounds(60, 10, 300, 200);
    		contentPane.add(panel);
    //		给主要显示面板添加布局方式
    		panel.setLayout(cardLayout);
    //		创建相应面板类的对象
    		P1 p1=new P1();
    //		将面板添加到住面板中,注意:add()方法里有两个参数,第一个是要添加的对象,第二个给这个对象所放置的卡片
    //		起个名字,后面调用显示的时候要用到这个名字
    		panel.add(p1,"p1");
    		P2 p2=new P2();
    		panel.add(p2,"p2");
    		
    		
    		JButton btnNewButton = new JButton("页面1");
    		btnNewButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    //				这里是点击按钮切换不同的页面
    //				cardLayout.show(参数 1,参数2)方法里面也有两个参数,
    //				参数1是表示指明你要在哪个容器上显示,
    //				参数2是指明要显示哪个卡片,即你要给出对应卡片的名字
    				cardLayout.show(panel, "p1");
    			}
    		});
    		btnNewButton.setBounds(70, 220, 97, 23);
    		contentPane.add(btnNewButton);
    		
    		JButton btnNewButton_1 = new JButton("页面2");
    		btnNewButton_1.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    //				同上
    				cardLayout.show(panel, "p2");
    			}
    		});
    		btnNewButton_1.setBounds(251, 220, 97, 23);
    		contentPane.add(btnNewButton_1);
    	}
    }
    

    测试面板1: 

    package gui2;
    import javax.swing.JPanel;
    import javax.swing.JLabel;
    import java.awt.Font;
    import javax.swing.JTextField;
    import javax.swing.JButton;
    
    public class P1 extends JPanel {
    	private JTextField jt1;
    
    	/**
    	 * Create the panel.
    	 */
    	public P1() {
    		setLayout(null);
    		
    		JLabel lblNewLabel = new JLabel("我是页面1  (*^-^)");
    		lblNewLabel.setFont(new Font("宋体", Font.BOLD, 22));
    		lblNewLabel.setBounds(34, 26, 233, 69);
    		add(lblNewLabel);
    		
    		jt1 = new JTextField();
    		jt1.setBounds(34, 105, 100, 21);
    		add(jt1);
    		jt1.setColumns(10);
    		
    		JButton btnNewButton = new JButton("提交");
    		
    		btnNewButton.setBounds(146, 104, 97, 23);
    		add(btnNewButton);
    
    	}
    }
    

    测试面板2:

    package gui2;
    
    import javax.swing.JPanel;
    import javax.swing.JLabel;
    import java.awt.Font;
    import javax.swing.JButton;
    import javax.swing.JTextField;
    
    public class P2 extends JPanel {
    
    	/**
    	 * Create the panel.
    	 */
    	public P2() {
    		setLayout(null);
    		JLabel lblNewLabel = new JLabel("我是页面2  (*^▽^*)");
    		lblNewLabel.setFont(new Font("Dialog", Font.BOLD, 24));
    		lblNewLabel.setBounds(23, 10, 245, 94);
    		add(lblNewLabel);
    		
    		JTextField jt2 = new JTextField();
    		jt2.setBounds(42, 114, 206, 21);
    		add(jt2);
    		jt2.setColumns(10);
    		
    		JButton btnNewButton = new JButton("确定");
    		btnNewButton.setBounds(42, 145, 97, 23);
    		add(btnNewButton);
    		
    	}
    }
    

    相关效果图:点击下面按钮显示对应的面板内容

     

     

    这个实现方式自我感觉还是比较简洁方便的,有兴趣的可以尝试一下,哪有不对,欢迎各路大神指正!!!(*^▽^*)

     

    展开全文
  • Swing组件:简简单单实现菜单栏窗体切换

    千次阅读 热门讨论 2019-06-05 21:32:36
    了解更多swing ...我们在用到swing组件开发界面时,用到菜单栏时,我们心中想,我们要怎样设计,才能实现窗体切换,注意在这里我们只出现一个窗体,于是我们可能会出现这样一种想法,通过隐藏一个...

    了解更多swing

    最近,因为种种原因,使我不得不经常性的用到swing组件,这次做课设又要用到swing组件来写界面,本来想写个网页版的?但自生条件不允许呀!!!打算这个暑假把java学习视频看完,加油!!!

    回到这次总结:
    我们在用到swing组件开发界面时,用到菜单栏时,我们心中想,我们要怎样设计,才能实现窗体的切换,注意在这里我们只出现一个窗体,于是我们可能会出现这样一种想法,通过隐藏一个窗体,然后在打开一个窗体,的方法来实现,窗体的切换,但这样做,有一个问题,这样确实可以实现窗体的切换,但是这个切换的过程中会出现窗体闪烁这种现象,通俗而言就是肉眼很容易看出是通过隐藏这种方法来实现窗体切换的,那我们要怎样才能实现,窗体不闪烁,但还是能进行窗体的切换

    重点来了!!!
    接下来,我来讲讲我的,窗体切换的实现过程,大致思路是:我们只创建一个 frame (JFrame)窗体,然后创造多个 panel(JPanel),我们将菜单栏定义在 frame上,其他地方通过,frame.remove(panel) 和 frame.add(panel),来实现窗体的切换,在我的方法中实际就是 panel的切换,从而实现 窗体内容的改变,下面我们通过代码,进一步了解这种方法的实现过程。

    代码如下:

    首页:

    package 窗体切换;
    
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    
    public class MainFrame {
    
    	//创造全局变量,并且私有
    	private static JFrame frame = new JFrame();
    	
    	private static JPanel panel = null;
    	
    	public MainFrame() {
    		
    		frame = new JFrame("切换界面");
    		frame.setBounds(100, 100, 1116, 790);
    		frame.getContentPane().setLayout(null);
    		
    		//使窗体不能放大
    		frame.setResizable(false);
    		
    		//使窗体在屏幕中间出现
    		frame.setResizable(false);
    		
    		// 菜单栏
    		// 新建一个菜单条
    		JMenuBar jb = new JMenuBar();
    		jb.setBounds(0, 0, 1116, 30);
    		frame.getContentPane().add(jb);
    
    		
    		// 新建一个菜单选项
    		JMenu jmenu1 = new JMenu("界面");
    		jb.add(jmenu1);
    				
    		// 新建一个菜单项
    		JMenuItem jm1 = new JMenuItem("界面一");
    
    		jmenu1.add(jm1);
    				
    		JMenuItem jm2 = new JMenuItem("界面二");
    		jmenu1.add(jm2);
    		
    		
    		//初始  panel
    		panel = new JPanel();
    		
    		frame.add(panel);
    		
    		panel.setBounds(-1, 31, 1103, 718);
    		panel.setLayout(null);
    		 
    		JLabel label = new JLabel("首页");
    		label.setFont(new Font("宋体", Font.PLAIN, 99));
    		label.setBounds(356, 108, 326, 297);
    		panel.add(label);
    		
    		
    		
    		//关键地方来了,下面就是窗体的切换过程了。
    		
    		//打开界面一
    		jm1.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				
    				frame.remove(panel);
    				panel = FirstPanel.firstView();
    				
    				//在这里,我们为什么要先frame.remove(panel),这是因为,如果我们不是remove,
    				//而是add()话,会出现,有一些组件重合,那么就会导致我们一些功能,无法使用,所以我们要先remve掉frame当前的panel。
    				
    				//为什么要?panel = FirstPanel.firstView();
    				//这是因为,frame添加的panel已经改变了,如果我们不重新赋值panel的话,那我们,想要再次切换时,将会remove以前的panel
    				//对frame现在添加的panel,没有任何影响,所以要重新赋值panel
    			}
    		});
    		
    		//打开界面二
    		jm2.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    
    				frame.remove(panel);
    				panel = SecondPanel.secondView();
    				//原因同上。
    			}
    		});
    		
    		
    		//使窗体可见
    		frame.setVisible(true);		
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    	}
    	
    	public static JFrame returnJFrame() {
    		
    		return frame;
    	}
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    		new MainFrame();
    	}
    
    }
    

    界面一:

    package 窗体切换;
    
    import java.awt.Font;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class FirstPanel {
    
    	private static JPanel panel = null;
    	private static JFrame frame = null;
    	
    	public static JPanel firstView(){
    		
    		//导入frame
    		frame = MainFrame.returnJFrame();
    		
    		panel = new JPanel();
    		
    		//添加新的panel
    		frame.add(panel);
    		
    		panel.setBounds(-1, 31, 1103, 718);
    		panel.setLayout(null);
    		 
    		JLabel label = new JLabel("界面一");
    		label.setFont(new Font("宋体", Font.PLAIN, 99));
    		label.setBounds(356, 108, 326, 297);
    		panel.add(label);
    		
    		return panel;
    	}
    	
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    	}
    
    }
    

    界面二:

    package 窗体切换;
    
    import java.awt.Font;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class SecondPanel {
    	private static JPanel panel = null;
    	private static JFrame frame = null;
    	
    	public static JPanel secondView() {
    		
    		//导入frame
    		frame = MainFrame.returnJFrame();
    		
    		panel = new JPanel();
    		
    		//添加新的panel
    		frame.add(panel);
    		
    		panel.setBounds(-1, 31, 1103, 718);
    		panel.setLayout(null);
    		 
    		JLabel label = new JLabel("界面二");
    		label.setFont(new Font("宋体", Font.PLAIN, 99));
    		label.setBounds(356, 108, 326, 297);
    		panel.add(label);
    		
    		return panel;
    	}
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    
    	}
    
    }
    

    效果如下:
    在这里插入图片描述
    最后在说一片:该方法一定要保证只有一个frame,有多个panel,通过不断的removeadd来实现窗体的切换。

    如果看了我的讲解,和源码,还是有些地方不明白,可以在评论区留言。

    展开全文
  • 首先我们先创建几个窗体,其中一个窗体作为mdi窗体窗体有个属性叫IsMdiContair ,并设为true,在mdi窗体加一个panel控件 代码如下:  private void toolStripLabel2_Click(object sender, EventArgs e)  {  ...
  • 窗体一: package gui.awt; import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; public class Test1 { public static void main(String[]args){ Frame f = new Frame("我的...
  • 知识点:控件排列和对齐的方法、创建MDI窗体的方法、高级控件(工具条ToolStrip、状态条StatusStrip、图片框PictureBox、图片列表ImageList、定时器Timer)的使用、数据验证代码的编写、窗体间数据传递的方法 ...
  • Avalondock 第三步 创建停靠面板组 前一章介绍了文档面板的建立,本章主要介绍可停靠面板和文档面板组的使用,在avalondock中,任何可停靠内容都可以分组,并且通过Orientation属性,来设定窗体的浮动方向。 1、可...
  • 第2节 多界面切换面板调用

    千次阅读 2020-05-03 09:55:13
    第2节 多界面切换面板调用 本节主要实现多界面之间的切换,并以登录界面说明。 1. 登录界面前面板设置 首先在前面板中拖入字符串输入控件,并设置为用户名和密码;其次拖入确定和取消按钮,以实现登录和取消功能。...
  • 所有窗体

    2017-08-25 09:58:16
    窗体是程序与用户交互的可视界面,窗体也是对象,窗体类定义了...属性:图标、标题、位置、背景等可在窗体属性面板设置,也可以代码实现。 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性
  • 前言 图形用户界面简称GUI,通过GUI用户可以更好地与计算机进行交互。从JDK1.2版本后Java就引入了...第一步:创建图形界面中所要用到的组件,进行合理布局; 第二步:定义界面上的组件对用户交互事件的响应和对事件
  • 使用 Visual Studio 2013 创建基本 ASP.NET 4.5 Web 窗体页03/03/2014本文内容对于新的 web 应用程序开发,我们建议 Razor Pages。 有关详细信息,请参阅Razor Pages 入门。本演练介绍了Microsoft Visual Studio ...
  • 第3节 labview多界面切换之:一个子面板显示多个VI

    千次阅读 热门讨论 2020-05-03 10:40:13
    第3节 labview多界面切换之:一个子面板显示多个VI 个人感觉使用较为方便,可实现多种不同界面的切换要求。下面举个例子,使用时可以按照需要修改。 假设需要在一个界面中实现三个不同的图形显示,按下不同选择按钮...
  • 示例Demo2_1用PyQt5的一些类创建了一个简单的GUI应用程序,窗体窗体上的标签对象的创建和属性设置都完全由代码完成。显然这种纯代码方式构造UI的方式是比较麻烦的,特别是在窗体上组件比较多、层次比较复杂的时候...
  • Visual Studio 2019 windows窗体 学习

    千次阅读 2021-01-12 11:28:10
    RADSDI窗体创建 Windows 窗体应用程序控件的添加与删除窗体的属性如何设置窗体的常用属性窗体常用事件窗体中添加控件与窗体显示与隐藏 SDI窗体 单文档窗体 创建 Windows 窗体应用程序 创建 Windows 窗体应用程序 ...
  • 但是这样写出现了一个问题,就是打开其他窗口界面会导致之前的部分界面出现无法关闭或者隐藏的情况,因为本来的设想是在新窗口打开后,对之前旧窗口隐藏,但是还是在某些界面切换时出现无法将旧界面全部隐藏,改了也...
  • Windows窗体

    2012-01-19 09:50:00
    Windows窗体 窗体 .NET Framework提供了一系列与窗体编程相关的类,用来供开发人员使用。这些类主要包含于System.Windows.Forms命名空间中。 其中与窗体和控件相关的基类见下表: .NET Framework窗体...
  • C#父子窗体

    千次阅读 2013-01-16 16:47:02
    在设计时创建 MDI 父窗体创建 MDI 子窗体确定活动的 MDI 子窗体将它的文本复制到剪贴板将数据从剪贴板发送到活动 MDI 子窗口排列子窗体 C#中,怎么实现在第一个窗体上点一个按钮,出现第二个窗体? 在按钮的...
  • C#WinForm父级窗体内Panel容器中嵌入子窗体、程序主窗体设计例子在项目开发中经常遇到父级窗体嵌入子窗体所以写了一个例子程序,顺便大概划分了下界面模块和配色,不足之处还望指点主窗体窗体采用前面一篇博客设计...
  • 对话框与多窗体设计

    2020-09-15 17:03:37
    - 创建一个在多页组件中管理的多窗体应用,子窗体与主窗体的交互 - 创建MDI程序 - 创建带启动界面和登录界面窗体,保存和读取应用参数 标准对话框 概述 对话框 常用静态函数 函数功能 QFileDialog...
  • 准备表查询报表 制作数据查询窗体 制作成绩维护窗体 建应用系统切换面板 返回主页 退出放映 ;使用自动创建窗体向导创建数据查询窗体 ;在设计视图中修改窗体;制作成绩维护窗体;在删除记录命令按钮的快捷菜单中单击...
  • 10. Windows窗体

    2021-04-14 22:38:55
    Windows窗体 1 From窗体 Form窗体也成称为窗口,是.NET框架的智能客户端技术,使用窗体可以显示信息、请求用户输入以及通过网络与远程计算机通讯。 1.1 Form窗体的概念 在Windows中,窗体是向用户显示信息的可视图...
  • 示例Demo2_1用PyQt5的一些类创建了一个简单的GUI应用程序,窗体窗体上的标签对象的创建和属性设置都完全由代码完成。显然这种纯代码方式构造UI的方式是比较麻烦的,特别是在窗体上组件比较多、层次比较复杂的时候...
  • 分享本案例为:QT创建窗体时parent父窗体传野指针引起异常。 本案例源码如下: 1.1 默认新建一个QT工程(ps:本地QT版本为5.3) (1)工程目录结构 (2)工程pro文件 1 QT += core gui 2 3 ...
  • C#窗体程序编写 • 【五子棋】

    千次阅读 多人点赞 2021-03-07 23:10:00
    拖控件:拖两个 panel(面板)控件,三个 button(按钮)控件,一个 label(标签)控件 设属性:为一个 panel 控件的 Dock属性选择 Fill(填满),另一个选择 right(右侧)。其他属性 如背景颜色根据喜好设置 三个...
  • 由于集团填报预算的Excel插件使用的是侧边自定义面板,感觉这种...默认的侧边面板是绑定工作簿的c#教程窗体的,不会自动切换,为了解决这个问题,创建了窗口句柄字典。最终实现效果如下 具体代码如下 private CustomT
  • java swing开发窗体程序开发(一)GUI编程

    万次阅读 多人点赞 2019-04-05 21:37:27
    Java SWing就是java提供的一个类库专门用于开发窗体程序的,相对于C#的winform,java swing的开发要比C#更加麻烦,他不像C#拥有可视化的界面编辑工具 而是需要像QT一样纯代码式GUI编程。java的好处就是通用性强,跨...
  • C#学习笔记四 Windows窗体应用程序

    万次阅读 多人点赞 2011-06-18 20:52:00
    窗体是程序与用户交互的可视界面...1、常用属性属性:图标、标题、位置、背景等可在窗体属性面板设置,也可以代码实现。(1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体。(2)WindowS

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,499
精华内容 1,799
关键字:

创建窗体切换面板