GUI编程-Swing

Swing

1.窗口和面板

/**
 * JFrame
 */
public class S01JFrame {
    public static void main(String[] args) {
        new S01JFrame().init();
    }
    public void init(){
        JFrame jFrame = new JFrame();
        jFrame.setSize(500,400);
        jFrame.setLocationRelativeTo(null);
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //获取窗体的容器,设置背景色才有效
        Container container = jFrame.getContentPane();
        container.setBackground(Color.BLUE);
        jFrame.setVisible(true);
        Label label = new Label("this is us");
        label.setAlignment(Label.CENTER);
        jFrame.add(label);
        JLabel jLabel = new JLabel("hello world");
        jLabel.setHorizontalAlignment(2);
        jFrame.add(jLabel);
    }
}

2.对话框(弹窗)

用来提示信息,或确认某系信息

/**
 * Dialog
 */
public class S02DialogWindow extends JFrame {
    public S02DialogWindow(){
        setVisible(true);
        setSize(500,300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //JFrame 放东西,容器
        Container container = getContentPane();
        //绝对布局
        container.setLayout(null);
        //按钮
        JButton button=new JButton("点击弹出对话框");
        button.setBounds(30,30,100,30);
        //按钮监听
        button.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //弹窗
                new MyDialog();
            }
        });
        container.add(button);
    }
    public static void main(String[] args) {
        new S02DialogWindow();
    }
}
class MyDialog extends JDialog{
    public MyDialog(){
        setVisible(true);
        setBounds(50,50,200,200);
    }
}

3.标签(JLabel),图标(Icon,ImageIcon)

/**
 * Icon IconImage
 */
public class S03Icon extends JFrame implements Icon{
    private int width;
    private int height;
    public S03Icon(){

    }
    public S03Icon (int width,int height){
        this.width=width;
        this.height=height;
    }
    public  void init(){
        S03Icon icon=new S03Icon(50,50);
        //Icon,图标放在标签上,中间对齐;也可放在按钮上!
        JLabel jLabel1=new JLabel("Icon",icon,SwingConstants.CENTER);
        Container container=getContentPane();
        //设置布局方式,以布置多个组建
        container.setLayout(new FlowLayout());
        container.add(jLabel1);
        //ImageIcon
        URL url = S03Icon.class.getResource("green.jpg");
        JLabel jLabel2=new JLabel("ImageIcon");
        jLabel2.setIcon(new ImageIcon(url));
        container.add(jLabel2);
        //设置窗口属性
        setVisible(true);
        setBounds(200,100,500,300);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new S03Icon().init();
    }
    @Override
    public void paintIcon(Component c, Graphics g, int x, int y) {
        g.fillOval(x,y,width,height);
    }
    @Override
    public int getIconWidth() {
        return width;
    }
    @Override
    public int getIconHeight() {
        return height;
    }
}

4.滚动面板(JScrollPane),文本域(JTextArea)

/**
 * JScrollPane,JTextArea
 */
public class S04ScrollPane extends JFrame {
    public S04ScrollPane(){
        Container container = this.getContentPane();
        //JTextArea文本域
        JTextArea textArea = new JTextArea(30, 50);
        textArea.setText("hello world!");
        //JScrollPane面板
        JScrollPane scrollPane = new JScrollPane(textArea);
        container.add(scrollPane);
        //JFrame设置
        setVisible(true);
        setBounds(100,100,500,300);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new S04ScrollPane();
    }
}

5.按钮(JButton),单选按钮(JRadioButton),复选按钮(JCheckBox)

/**
 * JButton,JRadioButton,JCheckBox
 */
public class S05JButton extends JFrame {
    public S05JButton(){
        Container container=this.getContentPane();
        //将图片变为图标
        URL url=S05JButton.class.getResource("green.jpg");
        Icon icon = new ImageIcon(url);
        //1.JButton 把图标放在按钮上
        JButton jButton = new JButton();
        jButton.setIcon(icon);
        jButton.setToolTipText("图片按钮");
        //按钮放入容器
        container.add(jButton);
        //2.RadioButton 单选框
        JRadioButton radioButton1 = new JRadioButton("RadioButton1");
        JRadioButton radioButton2 = new JRadioButton("RadioButton2");
        JRadioButton radioButton3 = new JRadioButton("RadioButton3");
        //分组
        ButtonGroup btnGroup = new ButtonGroup();
        btnGroup.add(radioButton1);
        btnGroup.add(radioButton2);
        btnGroup.add(radioButton3);
        //按钮放入容器
        container.add(jButton);
        container.add(radioButton1, BorderLayout.NORTH);
        container.add(radioButton2, BorderLayout.CENTER);
        container.add(radioButton3, BorderLayout.SOUTH);
        //3.CheckBox 复选框
        JCheckBox checkBox1 = new JCheckBox("checkBox1 ");
        JCheckBox checkBox2 = new JCheckBox("checkBox2 ");
        JCheckBox checkBox3 = new JCheckBox("checkBox3 ");
        //按钮放入容器
        container.add(checkBox1);
        container.add(checkBox2);
        container.add(checkBox3);
        //JFrame设置
        setVisible(true);
        setBounds(100,100,500,300);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new S05JButton();
    }
}

6.下拉框(JComboBox),列表框(JList)

7.文本框(JTextField)、密码框(JPasssordField)、文本域(JTextArea)

/**
 * JTextField,JPasswordField,JTextArea
 */
public class S07JText extends JFrame {
    public S07JText(){
        Container container=getContentPane();
        //1.JTextField文本框
        JTextField jTextField = new JTextField("hello");
        container.add(jTextField,BorderLayout.NORTH);
        //2.JPasswordField密码框
        JPasswordField jPasswordField = new JPasswordField("password");
        container.add(jPasswordField, BorderLayout.CENTER);
        //3.JTextArea文本域
        JTextArea jTextArea = new JTextArea();
        jTextArea.setText("This is us");
        container.add(jTextArea,BorderLayout.SOUTH);
        //JFrame设置
        setVisible(true);
        setBounds(100,100,500,300);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new S07JText();
    }
}

8.菜单条(JMenuBar)、菜单(JMenu)、菜单项(JMenuItem)

java中的菜单,可以通过引入 java.swing来实现。
在java中菜单有如下三大组件:JMenuBar,JMenu,JMenuItem。

JMenuBar是相关的菜单栏,一般一个窗体中有一个就可以了;
JMenu有两种功能,一是在菜单栏中显示,二是当它被加入到另一个JMenu中时,会产生引出子菜单的效果;
JMenuItem是JMenu目录下的菜单。

菜单由 Swing 中的 JMenu 类实现,可以包含多个菜单项和带分隔符的菜单。在菜单中,菜单项由 JMenuItem 类表示,分隔符由 JSeparator 类表示。

菜单本质上是带有关联 JPopupMenu 的按钮。当按下“按钮”时,就会显示 JPopupMenu。如果“按钮”位于 JMenuBar 上,则该菜单为顶层窗口。如果“按钮”是另一个菜单项,则 JPopupMenu 就是“下拉”菜单。

菜单如果依附到 JMenuBar 对象上,则此菜单就是菜单栏中的菜单。菜单如果依附在 JPopupMenu 对象上,此菜单就是弹出式菜单。实现菜单栏和弹出式菜单的原理是一样的,但在具体的实现方式上有一些区别。

构造方法
  JMenu(); //创建一个无文本的 JMenu 对象;
  JMenu(String s); //创建一个带有指定文本的 Menu 对象;

JMenu 类的常用方法
  add(Action a); //创建连接到指定 Action 对象的新菜单项,并将其追加到此菜单的末尾
  add(Component c); //将某个组件追加到此菜单的末尾
  add(Component c,int index); //将指定组件添加到此容器的给定位置
  add(JMenuItem menultem); //将某个菜单项追加到此菜单的末尾
  add(String s); //创建具有指定文本的新菜单项,并将其追加到此菜单的末尾
  addSeparator(); //将新分隔符追加到菜单的末尾
  doCliclc(int pressTime); //以编程方式执行“单击”操作
  getDelay(); //返回子菜单向上或向下弹出前建议的延迟(以毫秒为单位)
  getltem(int pos); //返回指定位置的 JMenuItem
  getItemCount(); //返回菜单上的项数,包括分隔符
  getMenuComponent(int n); //返回位于位置 n 的组件
  getMenuComponents(); //返回菜单子组件的 Component 数组
  getSubElements(); //返回由 MenuElement 组成的数组,其中包含此菜单组件的子菜单
  insert(JMenuItem mi,int pos); //在给定位置插入指定的 JMenuitem
  insert(String s,pos); //在给定位置插入具有指定文本的新菜单项
  insertSeparator(int index); //在指定的位置插入分隔符
  isMenuComponent(Component c); //如果在子菜单层次结构中存在指定的组件,则返回 true
  isPopupMenuVisible(); //如果菜单的弹出窗口可见,则返回 rue
  isSelected(); //如果菜单是当前选择的(即高亮显示的)菜单,则返回 true
  isTopLevelMenu(); //如果菜单是“顶层菜单”(即菜单栏的直接子级),则返回 true
  setDelay(int d); //设置菜单的 PopupMenu 向上或向下弹出前建议的延迟
  setMenuLocation(int x,int y); //设置弹出组件的位置
  setPopupMenuVisible(boolean b); //设置菜单弹出的可见性
  setSelected(boolean b); //设置菜单的选择状态

/**
 * JMenuBar,JMenu,JMenuItem
 */
public class S08JMenu extends JMenuBar {
    public S08JMenu(){
        add(createFileMenu());
        add(createEditMenu());
        setVisible(true);
    }
    //定义“文件”菜单
    private JMenu createFileMenu() {
        JMenu menu = new JMenu("文件(F)");
        menu.setMnemonic(KeyEvent.VK_F);//设置跨界访问符

        JMenuItem item = new JMenuItem("新建(N)", KeyEvent.VK_N);
        item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
        menu.add(item);

        item = new JMenuItem("打开(O)", KeyEvent.VK_O);
        item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
        menu.add(item);

        return menu;
    }
    //定义“编辑”菜单
    private JMenu createEditMenu() {
        JMenu menu = new JMenu("编辑(E)");
        menu.setMnemonic(KeyEvent.VK_E);//设置跨界访问符

        JMenuItem item = new JMenuItem("撤销(U)", KeyEvent.VK_U);
        item.setEnabled(false);
        menu.add(item);
        menu.addSeparator();

        item = new JMenuItem("复制(C)", KeyEvent.VK_C);
        menu.add(item);
        item = new JMenuItem("粘贴(P)", KeyEvent.VK_P);
        menu.add(item);
        menu.addSeparator();

        JCheckBoxMenuItem cbMenuItem = new JCheckBoxMenuItem("自动换行");
        menu.add(cbMenuItem);
        return menu;
    }
    //主程序
    public static void main(String[] args) {
        JFrame frame = new JFrame("菜单栏");
        frame.setSize(300,200);
        frame.setLocationRelativeTo(null);
        frame.setJMenuBar(new S08JMenu());
        frame.setVisible(true);
    }
}

上述代码调用 JMenu 对象的 setMnemonic() 方法设置当前菜单的快速访问符。该符号必须对应键盘上的一个键,并且应该使用 java.awt.event.KeyEvent 中定义的 VK—XXX 键代码之一指定。

提示:快速访问符是一种快捷键,通常在按下 Alt 键和某个字母时激活。例如,常用的 Alt+F 是“文件” 菜单的快速访问符。

JMenuItem 类实现的是菜单中的菜单项。菜单项本质上是位于列表中的按钮。当用户单击“按钮”时,则执行与菜单项关联的操作。JMenuItem 的常用构造方法有以下三个。

JMenuItem(String text):创建带有指定文本的 JMenuItem。
JMenuItem(String text,Icon icon):创建带有指定文本和图标的 JMenuItem。
JMenuItem(String text,int mnemonic):创建带有指定文本和键盘助记符的 JMenuItem。

在该实例中,创建菜单项后调用 JMenuItem 对象的 setAccelerator(KeyStroke) 方法来设置修改键,它能直接调用菜单项的操作监听器而不必显示菜单的层次结构。在本实例中没有实现事件监听机制,所以使用快捷键时将得不到程序的任何响应,但是在菜单项中将出现快捷键。

在一般的菜单设置中,二级菜单的模式是:JMenu-----JMenuItem
而三级菜单的实质是:JMenu-----JMenu-----JMenuItem,也就是把原来的 JMenuItem 换成了一个新的 JMenu。

运行该实例,图 1 所示是“文件”菜单展开效果,图 2 所示是“编辑”菜单展开的效果。

posted @   老李学Java  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示