[JavaSwing] 的JPanel

内容
创建的JPanel
设置布局和边境

开幕后推出 的JFrame 并引进 的JLabel, JButton的JTextField的 也许你已经熟悉了如何创建的Java Swing界面. 此前出台频繁使用的对象, 我认为,我们应该学会一个很重要的它是集装箱 (集装箱, 持有人) 和配售 布局 (布局) 在容器中它.

的JPanel
JPanel是一个容器 (集装箱) 它用于包含相似的对象的JFrame但它不是 1 的JFrame. 容易理解,你可以想像我们的房子 1 的JFrame, 剩余的卧室, 客厅, 餐厅是在JPanel, 即在一个JFrame包含的JPanel, 在每个的JPanel可以含有对象或甚至其他的JPanel.

创建的JPanel

我们有 2 构造函数或使用的JPanel这是:
– 的JPanel(): 创建 1 默认布局的JP​​anel具有FlowLayout.
– 的JPanel(布局管理布局): 创建 1 的JPanel与指定布局.

例 1: 创建 1 包含的JFrame 2 的JPanel, 1 包含的JPanel 的JLabel, 1 包含的JPanel 2 JButton的允许添加或删除的JLabel.

package nguyenvanquan7826.JPanel;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class CreateJPanel extends JFrame implements ActionListener {
	private int numlabel = 0; // number JLabel in panel
	JPanel panel1, panel2;

	public CreateJPanel() {
		createJFrame();
	}

	// create JFrame
	private void createJFrame() {
		setTitle("Create JPanel");
		setLayout(new GridLayout(2, 1, 5, 5));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		createContent();

		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}

	private void createContent() {
		// create panel1 with layout default is FlowLayout
		panel1 = new JPanel();
		// add a label into panel1
		addJLabel(panel1);

		// create panel2 with GridLayout
		panel2 = new JPanel(new GridLayout(1, 2, 5, 5));
		panel2.add(createJButton("Add a JLabel"));
		panel2.add(createJButton("Remove all JLabel"));

		// add panel1 and panel2 into JFrame
		add(panel1);
		add(panel2);
	}

	// add JLabel to panel and repaint
	private void addJLabel(JPanel panel) {
		panel.add(new JLabel("JLabel" + (++numlabel)));
		panel.validate();
		panel.repaint();
	}

	// remove all JLabel and repaint JPanel
	private void removeAllJLabel(JPanel panel) {
		panel.removeAll();
		panel.validate();
		panel.repaint();
		numlabel = 0;
	}

	// create a JButton
	private JButton createJButton(String buttonName) {
		JButton btn = new JButton(buttonName);
		btn.addActionListener(this);
		return btn;
	}

	@Override
	public void actionPerformed(ActionEvent evt) {
		String command = evt.getActionCommand();
		if (command == "Add a JLabel") {
			addJLabel(panel1);
			System.out.println("add" + panel1.getComponentCount());
		}
		if (command == "Remove all JLabel") {
			removeAllJLabel(panel1);
		}
	}

	public static void main(String[] args) {
		new CreateJPanel();
	}
}

创建的JPanel
在这个例子中,我们创建 2 的JPanel, Panel1的是默认初始化, 没有参数​​传递给它的默认布局的FlowLayout (在序列对象的布局). 是Panel2与指定布局初始化是GridLayout的 (每个单元中的对象的布局是相等).
你也有讲究 2 颚 addJLabel(面板的JPanel)removeAllJLabel(面板的JPanel), 使用add方法后,, 或JPanel的中的removeAll, 想改变它 (更多的JLabel, 或删除全部的JLabel) 如图, 在JFrame的更新,我们需要调用 2 验证方法() 和重绘() 渲染对象,可以的JPanel. 我们也可以用做同样的 的JFrame.

设置布局和边境进行的JPanel

布局边境 方法我们使用的JPanel的setLayout和setBorder.

请参阅: 一流的JPanel, 利用面板