需求:用實(shí)線把各個(gè)面板圈起來,然后把面板的名字寫在圈圈的左上角。
原始畫面:
由于原來的程序使用的是AWT中的Panel,而這個(gè)控件我們沒有設(shè)置titleBorder的方法。
現(xiàn)在將更新為Swing中的JPanel面板,代碼分別為:
舊代碼:
Panel pRoboCtrl=new Panel();
pRoboCtrl.setLayout(new GridLayout(5, 1, 2, 5));
// Robot控制面板的第一排,面板的標(biāo)題
Panel pR1=new Panel();
pR1.setLayout(new GridLayout(1, 1, 2, 3));
//Row One
pR1.add(new Label("Robot Control",Label.CENTER));
新代碼:
JPanel pRoboCtrl=new JPanel();
pRoboCtrl.setLayout(new GridLayout(4, 1, 2, 5));
Border titleBorder1=BorderFactory.createTitledBorder("Robot Control");
pRoboCtrl.setBorder(titleBorder1);
原來的處理方式是將一個(gè)Label放到Panel中,然后將這個(gè)Panel放到外層的Panel中,新方式是將外層Panel定義成JPanel,然后設(shè)置Border的值為BorderFactory產(chǎn)生的一個(gè)實(shí)例。
解決這個(gè)問題后,新問題又來了,兩個(gè)JPanel中的內(nèi)容不一樣,上面多,下面少,但是現(xiàn)在面板卻是一樣大,要改成面板高度自動適應(yīng)。
其實(shí)這只需要修改一行代碼就可以了,代碼如下:
舊代碼:
CP.setLayout(new GridLayout(3, 1, 2, 5));
新代碼:
CP.setLayout(new BoxLayout(CP, BoxLayout.Y_AXIS)); // 沿垂直方向布置組件
舊代碼的處理方式是網(wǎng)格布局,新代碼的方式是用BoxLayout布局管理器,它會按要求垂直或水平分布。

以下代碼創(chuàng)建了一個(gè)JPanel容器,它采用垂直 BoxLayout,在這個(gè)容器中包含兩個(gè)Button,這兩個(gè)Button沿垂直方向分布,并且保持像素為 5 的固定垂直間隔。
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));// 沿垂直方向布置組件
panel.add(new JButton("Button1"));
panel.add(Box.createVerticalStrut(5));
panel.add(new JButton("Button2"));
源代碼:
下載