JPanel 使用大全

1,302 阅读1分钟

JPanel

1、默认的布局方式:流式布局。

2、创建一个JPanel 默认使用流式布局,而且居中显示,要想改变它的显示方式,使用
JPanel(FlowLayout(FlowLayout.LEFT)

JPanel + BorderLayout

代码如下:

package com.cdx.test.test

import java.awt.BorderLayout
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JPanel

class JPanelExample : JFrame() {

    init {
        val jb1 = JButton("西瓜") 
        val jb2 = JButton("苹果") 
        val jb3 = JButton("香蕉") 
        val jb4 = JButton("荔枝") 
        val jb5 = JButton("葡萄") 
        val jb6 = JButton("桔子") 

        val jp1 = JPanel()
        val jp2 = JPanel()

        jp1.add(jb1) 
        jp1.add(jb2) 
        jp2.add(jb4) 
        jp2.add(jb5) 
        jp2.add(jb6) 

        // 定位南边位置
        this.add(jp1, BorderLayout.NORTH)
        // 定位北边位置
        this.add(jp2, BorderLayout.SOUTH)
        this.add(jb3)

        this.title = "多种布局格式" 
        // 定义大小
        this.setSize(/* width = */ 400, /* height = */ 200)
        // 定义位置
        this.setLocation(1000, 300)
        // 定义关闭的操作
        this.defaultCloseOperation = JFrame.EXIT_ON_CLOSE
        // 显示JFrame
        this.isVisible = true
    }

    companion object {

        @JvmStatic
        fun main(args: Array<String>) {
            JPanelExample()
        }

    }
}

JPanel 实现竖直依次排列

代码如下:

package com.cdx.test.test

import java.awt.FlowLayout
import javax.swing.*


class JPanelExample2 : JFrame() {

    init {
        defaultCloseOperation = WindowConstants.EXIT_ON_CLOSE

        // 第 1 个 JPanel, 使用默认的浮动布局
        val panel01 = JPanel()
        panel01.add(JLabel("用户名"))
        panel01.add(JTextField(10))

        // 第 2 个 JPanel, 使用默认的浮动布局
        val panel02 = JPanel()
        panel02.add(JLabel("密  码"))
        panel02.add(JPasswordField(10))


        // 第 3 个 JPanel, 使用浮动布局, 并且容器内组件居中显示
        val panel03 = JPanel(FlowLayout(FlowLayout.CENTER))
        panel03.add(JButton("登录"))
        panel03.add(JButton("注册"))

        // 创建一个垂直盒子容器, 把上面 3 个 JPanel 串起来作为内容面板添加到窗口
        val vBox: Box = Box.createVerticalBox()
        vBox.add(panel01)
        vBox.add(panel02)
        vBox.add(panel03)

        contentPane = vBox

        pack()
        setLocationRelativeTo(null)
        isVisible = true
    }

    companion object {

        @JvmStatic
        fun main(args: Array<String>) {
            JPanelExample2()
        }

    }
}

JPanel 实现竖直排列方式2

主要是利用BoxLayout 和 FlowLayout进行组合使用

package com.cdx.test.view

import com.cdx.test.constant.Constant
import java.awt.Color
import java.awt.Dimension
import java.awt.FlowLayout
import java.awt.GridLayout
import java.awt.event.MouseAdapter
import java.awt.event.MouseEvent
import java.io.File
import javax.swing.*


/**
 * 查找丢失的View
 */
class FindLostIdView() : JPanel() {

    init {
        addView()
    }

    private fun addView() {
        layout = BoxLayout(this,BoxLayout.Y_AXIS)

        val chooseRes = JPanel(FlowLayout(FlowLayout.LEFT)).apply { add(JButton("选择Res")) }
        val filePath = JPanel(FlowLayout(FlowLayout.LEFT)).apply { add(JLabel("文件夹路径为:")) }
        val startCheck = JPanel(FlowLayout(FlowLayout.LEFT)).apply { add(JButton("开始检测")) }

        add(chooseRes, LEFT_ALIGNMENT)
        add(filePath, LEFT_ALIGNMENT)
        add(startCheck, LEFT_ALIGNMENT)
    }

    private fun getAbsolutePath(): String {
        val chooser = JFileChooser()
        chooser.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY
        chooser.showOpenDialog(this@FindLostIdView)
        val file: File = chooser.selectedFile
        return file.absolutePath
    }
}