idea插件开发(5) 您所在的位置:网站首页 swing中的窗体 idea插件开发(5)

idea插件开发(5)

2024-01-21 08:26| 来源: 网络整理| 查看: 265

     Java-GUI提供了两套设计AWT和Swing,其中Swing是基于AWT开发的,两者在功能上基本一样。发展至今天,最大的区别就是在显示样式上,AWT会匹配当前操作系统的UI而在不同平台下表现出不同的样式,但Swing不会。所以建议插件开发时采用Swing-GUI。

一、Idea-UI开发基础 1、UI控件架构

        Idea的图形界面是基于Swing开发的,官方文档也有推荐,详细的UI控件可查看官方文档IntelliJ Platform UI Guidelines ,虽说Swing内容比较多,但相对来讲比较简单。 所有GUI开发基本都遵循如下关系来设计:

2、Swing体系

        idea控件开发只要了解这一张图即可,开发时参考此图再查相应的API文档。不需要太高深的技术(Canvas开发除外,那个涉及很多图形方面的专业知识。

 二、Swing容器

        本章会从容器、布局、复杂控件几个方式给出一些示例。

1、JFrame

        显示一个空白窗口

public class Windowsdemo { public static void main(String[] args) { //1.创建一个窗口对象 JFrame frame = new JFrame("window窗口演示"); //2.指定窗口的位置,大小 frame.setLocation(100,100); frame.setSize(500,300); //3.设置窗口对象可见 frame.setVisible(true); } }

2、JDialog public class DialogTest { public static void main(String[] args) { JFrame frame = new JFrame("这里测试Dialog"); JDialog d1 = new JDialog(frame, "模式对话框", true); //2.通过setBounds方法设置Dialog的位置以及大小 d1.setBounds(20,30,300,200); //3.创建两个按钮 JButton b1 = new JButton("打开模式对话框"); //4.给这两个按钮添加点击后的行为 b1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { d1.setVisible(true); } }); //5.把按钮添加到frame中 frame.add(b1, BorderLayout.NORTH); //设置frame最佳大小并可见 frame.pack(); frame.setVisible(true); } }

 

3、MessageDialog

        简化版本的弹出窗口确定框,注意这些Dialog全是模态化的。

public class MessageDialogTest { JFrame jf = new JFrame("测试消息对话框"); JTextArea jta = new JTextArea(6, 30); //声明按钮 JButton btn = new JButton(new AbstractAction("弹出消息对话框") { @Override public void actionPerformed(ActionEvent e) { //弹出一个消息对话框,并且显示 文本域中输入的内容 String text = jta.getText(); //参数:int messageType 指定消息对话框的类型: 错误消息,警告消息,问题消息... //JOptionPane.showMessageDialog(jf,text,"消息对话框",JOptionPane.ERROR_MESSAGE); //JOptionPane.showMessageDialog(jf,text,"消息对话框",JOptionPane.INFORMATION_MESSAGE); //JOptionPane.showMessageDialog(jf,text,"消息对话框",JOptionPane.WARNING_MESSAGE); //JOptionPane.showMessageDialog(jf,text,"消息对话框",JOptionPane.QUESTION_MESSAGE); //JOptionPane.showMessageDialog(jf,text,"消息对话框",JOptionPane.PLAIN_MESSAGE); JOptionPane.showMessageDialog(jf,text,"消息对话框",JOptionPane.WARNING_MESSAGE,new ImageIcon("E:\\GUISwing\\img\\component\\female.png")); } }); public void init(){ //组装视图 jf.add(jta); jf.add(btn, BorderLayout.SOUTH); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.pack(); jf.setVisible(true); } public static void main(String[] args) { new MessageDialogTest().init(); }

4、为容器添加工具栏 Frame菜单

        菜单分为两种:一种是嵌入到Frame中的,另一种是右键。

public class SimpleMenu { //创建窗口 private JFrame frame = new JFrame("这里测试菜单相关组件"); //创建菜单条 JMenuBar menuBar = new JMenuBar(); //创建菜单组件 JMenu fileMenu = new JMenu("文件"); JMenu editMenu = new JMenu("编辑"); //菜单项组件 JMenuItem copy = new JMenuItem("复制"); JMenuItem paste = new JMenuItem("粘贴"); public void init(){ //组装编辑菜单 editMenu.add(copy); editMenu.add(paste); //组装菜单条 menuBar.add(fileMenu); menuBar.add(editMenu); //把菜单条放入到Frame中 frame.setJMenuBar(menuBar); //设置frame最佳大小并可见 frame.pack(); frame.setVisible(true); } public static void main(String[] args) { new SimpleMenu().init(); } }

Toolbar工具栏

        这个工具栏是可以拖动的。

public class JToolBarTest { JFrame jf = new JFrame("测试工具条"); JTextArea jta = new JTextArea(6,35); //声明工具条相关内容 JToolBar jToolBar = new JToolBar("播放工具条",SwingConstants.HORIZONTAL); //创建3个Action对象 //传递的参数,name和icon,最终在添加到工具条中时,会被拿出来作为按钮的名称和图标 Action pre = new AbstractAction("上一曲",new ImageIcon("E:\\GUISwing\\img\\component\\上一曲16.png")) { @Override public void actionPerformed(ActionEvent e) { jta.append("上一曲.\n"); } }; public void init(){ //通过Action对象来创建JButton JButton preBtn = new JButton(pre); jToolBar.add(preBtn); jToolBar.addSeparator(); //让工具条可以拖动 jToolBar.setFloatable(true); jf.add(jToolBar, BorderLayout.NORTH); //把一个组件设置到JScrollPane中,那么该组件就支持滚动条了 JScrollPane jScrollPane = new JScrollPane(jta); jf.add(jScrollPane); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.pack(); jf.setVisible(true); } public static void main(String[] args) { new JToolBarTest().init(); } }

5、特殊容器  JSplitPane-可调整大小的面板 public class SplitPaneTest { Book[] books = {new Book("java自学宝典", "国内关于 Java 编程最全面的图书 \n 看得懂 , 学得会"), new Book("轻量级的JAVAEE企业应用实战", "SSM整合开发的经典图书,值的拥有"), }; JFrame jf = new JFrame("测试JSplitPane"); //声明程序中用到的组件 JList bookJList = new JList(books); JLabel bookCover = new JLabel(); JTextArea bookDesc = new JTextArea(); public void init(){ //组装视图 //设定组件大小 bookJList.setPreferredSize(new Dimension(150,400)); bookCover.setPreferredSize(new Dimension(220,270)); bookDesc.setPreferredSize(new Dimension(220,130)); //为jList设置条目选中监听器 bookJList.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { //获取当前选中的是哪个条目 Book book = bookJList.getSelectedValue(); //把书籍的图片用bookCover展示 bookDesc.setText(book.getDesc()); } }); //组装左边区域 JSplitPane left = new JSplitPane(JSplitPane.VERTICAL_SPLIT,bookCover,new JScrollPane(bookDesc)); left.setOneTouchExpandable(true);//一触即展 //组装整体 JSplitPane hole = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,left,bookJList); //支持连续布局 hole.setContinuousLayout(true); hole.setDividerSize(10); jf.add(hole); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.pack(); jf.setVisible(true); } public static void main(String[] args) { new SplitPaneTest().init(); } } @Data @AllArgsConstructor class Book { private String name; private String desc; }

 TabbedPane-标签页面板 public class JTabbedPaneTest { JFrame jf = new JFrame("测试JTabbedPane"); JTabbedPane tabbedPane = new JTabbedPane(SwingConstants.LEFT,JTabbedPane.SCROLL_TAB_LAYOUT); public void init(){ //添加标签 tabbedPane.addTab("用户管理",new ImageIcon("swing\\img\\container\\open.gif"),new JList(new String[]{"用户一","用户二","用户三"})); tabbedPane.addTab("商品管理",new JList(new String[]{"商品一","商品二","商品三"})); tabbedPane.addTab("订单管理",new ImageIcon("swing\\img\\container\\open.gif"),new JList(new String[]{"订单一","订单二","订单三","订单四"})); //完成设置 tabbedPane.setEnabledAt(0,false);//禁用用户管理 tabbedPane.setSelectedIndex(1);//默认商品管理 //监听当前标签面板的选中情况 tabbedPane.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { int selectedIndex = tabbedPane.getSelectedIndex(); JOptionPane.showMessageDialog(jf,"当前选中了第 "+(selectedIndex+1)+"个标签"); } }); jf.add(tabbedPane); jf.setBounds(400,400,400,400); jf.setResizable(false); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } public static void main(String[] args) { new JTabbedPaneTest().init(); } }

三、Swing布局 1、BorderLayout

        其中边上的4个方向可以不设置,这样就可以实现列和行布局模式了。

public class BorderLayoutTest extends JFrame { //0.继承JFrame public BorderLayoutTest() { //1. 创建组件 JButton jButton = new JButton("中间"); JButton jButton2 = new JButton("北间"); JButton jButton3 = new JButton("西间"); JButton jButton4 = new JButton("东间"); JButton jButton5 = new JButton("南间"); //2. 添加各个组件 this.add(jButton, BorderLayout.CENTER); //布局的中间 this.add(jButton2, BorderLayout.NORTH); //布局的北边 this.add(jButton3, BorderLayout.WEST); //布局的西边 this.add(jButton4, BorderLayout.EAST); //布局的东边 this.add(jButton5, BorderLayout.SOUTH); //布局的南边 //3. 设置窗体属性 this.setTitle("演示边界布局管理器"); this.setSize(300, 200); this.setLocation(200, 200); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new BorderLayoutTest(); } }

 2、FlowLayout

        一种流布局模式,控件会按添加顺序依次摆放,如果超过容器大小会自动换行。

public class FlowLayoutTest extends JFrame { //0.继承JFrame public FlowLayoutTest() { //1. 创建组件 JButton jButton1 = new JButton("A"); JButton jButton2 = new JButton("B"); JButton jButton3 = new JButton("C"); JButton jButton4 = new JButton("D"); JButton jButton5 = new JButton("E"); //2. 添加各个组件 this.add(jButton1); this.add(jButton2); this.add(jButton3); this.add(jButton4); this.add(jButton5); //设置流布局 this.setLayout(new FlowLayout(FlowLayout.LEFT)); //4. 设置窗体属性 this.setTitle("演示流布局管理器"); //设置标题 this.setSize(300, 200); //设置 this.setLocation(200, 200); //设置窗体出现的位置 this.setVisible(true); //设置窗体可见 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体关闭的同时关闭jvm this.setResizable(false); //Resizable:可调整大小的,设置窗体大小不可变 } public static void main(String[] args) { new FlowLayoutTest(); } }

 3、GridLayout

        网格模式,适合比较复杂的布局方式。

public class GridLayoutTest extends JFrame { //定义组件 int size = 9; //定义按钮数组 JButton jButton[] = new JButton[size]; //构造函数 public GridLayoutTest() { //创建组件 for(int i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有