Java Swing常用面板之普通面板JPanel

一、简介

JPanel为轻量级组件提供了通用容器,其自身是可以嵌套的。可以存放其他组件,比如JButton、JTextArea、JTextField,也可以将JPanel放入到JFrame窗体以及其他容器中。JPanel的默认布局是FlowLayout,也使用布局管理器(Layout Manager)对添加到JPanel中的组件(compnent)进行定位和大小设置。JPanel边界以及背景是可以设置。

二、构造函数

//创建JPanel,默认是布局是FlowLayout

JPanel()

//以指定的布局layout创建JPanel

JPanel(LayoutManager layout)

三、常用操作

//设置JPanel的布局方式

setLayout(LayoutManager mgr)

//设置JPanel的背景颜色

setBackground(Color bg)

//JPanel添加组件

add(Component comp)

//JPanel指定的索引处添加组件

add(Component comp, int index)

//以指定的约束向JPanel添加组件

add(Component comp, Object constraints)

//获取指定索引处的组件

Component getComponent(int n)

//获取指定坐标处的组件

Component getComponentAt(int x, int y)

//获取此Panel所包含的所有组件

Component[] getComponents()

四、常用事件

  1. 键盘事件

panel.addKeyListener(new KeyListener() {

    @Override

    public void keyTyped(KeyEvent e) {

       // TODO Auto-generated method stub

    }

    @Override

    public void keyReleased(KeyEvent e) {

       // TODO Auto-generated method stub

    }

    @Override

    public void keyPressed(KeyEvent e) {

       // TODO Auto-generated method stub

    }

});

  1. 鼠标事件

panel.addMouseListener(new MouseListener() {

    @Override

    public void mouseReleased(MouseEvent e) {

       // TODO Auto-generated method stub

    }

    @Override

    public void mousePressed(MouseEvent e) {

        // TODO Auto-generated method stub

    }

    @Override

    public void mouseExited(MouseEvent e) {

    // TODO Auto-generated method stub

    }

    @Override

    public void mouseEntered(MouseEvent e) {

       // TODO Auto-generated method stub

    }

    @Override

    public void mouseClicked(MouseEvent e) {

       // TODO Auto-generated method stub

    }

});

  1. 鼠标移动事件

panel.addMouseMotionListener(new MouseMotionListener() {

    @Override

    public void mouseMoved(MouseEvent e) {

       // TODO Auto-generated method stub

    }

    @Override

    public void mouseDragged(MouseEvent e) {

       // TODO Auto-generated method stub

    }

});

五、示例

示例中的窗体展示了两个JPanel,一个采用默认布局,一个采用绝对布局。

public class TestJPane extends JFrame{

    private static final long serialVersionUID = 1L;

   

    public static void main(String[] args) {

       new TestJPane();

    }

   

    public TestJPane() {

       initFrame();

    }

    private void initFrame() {

       this.setTitle("JPanel测试");

       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       addComponents();

       this.setSize(400, 300);

       this.setLocationRelativeTo(null);

       this.setVisible(true);

    }

   

    private void addComponents() {

       //设置窗体容器的布局为2*1的网格布局

       this.setLayout(new GridLayout(2, 1));

      

       //panel1默认布局FlowLayout

       JPanel panel1 = new JPanel();

       panel1.setBackground(new Color(255, 182, 193));     

       panel1.add(new JLabel("测试标签11"));

       panel1.add(new JLabel("测试标签12"));

       this.add(panel1);

       //panel2绝对布局

       JPanel panel2 = new JPanel(null);

       panel2.setBackground(new Color(200, 182, 193));

       JLabel lb21 = new JLabel("测试标签21");

       lb21.setBounds(20, 20, 100, 25);

       panel2.add(lb21);

       JLabel lb22 = new JLabel("测试标签22");

       lb22.setBounds(20, 60, 100, 25);

       panel2.add(lb22);

       this.add(panel2);

    }

}

要在Java Swing中的JPanel面板上添加背景图片,可以通过自定义JPanel类并在其paintComponent()方法中绘制背景图片来实现。以下是一个示例代码: ```java import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JPanel; public class ImagePanel extends JPanel { private Image backgroundImage; public ImagePanel(String imagePath) { this.backgroundImage = new ImageIcon(imagePath).getImage(); Dimension dimension = new Dimension(backgroundImage.getWidth(null), backgroundImage.getHeight(null)); setPreferredSize(dimension); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), this); } } ``` 然后,你可以使用这个自定义的ImagePanel类作为JFrame或其他容器中的一个面板,并将背景图片路径作为参数传递给它: ```java import javax.swing.JFrame; public class MainFrame extends JFrame { public MainFrame() { setTitle("Background Image Example"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建一个背景图片面板 ImagePanel panel = new ImagePanel("path/to/image.jpg"); // 添加其他组件到面板上 // panel.add(...); setContentPane(panel); pack(); setLocationRelativeTo(null); } public static void main(String[] args) { java.awt.EventQueue.invokeLater(() -> { new MainFrame().setVisible(true); }); } } ``` 在这个示例中,你需要将"path/to/image.jpg"替换为你的实际背景图片的路径。然后,创建一个MainFrame类并设置它的内容面板为ImagePanel实例。你可以在ImagePanel上添加其他组件或进行其他自定义操作。最后,调用pack()方法将窗口调整为适当的大小,并使用setVisible(true)显示它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值