JFrame中壹個組件覆蓋另外壹個組件
步驟壹:設置布局為空布局
步驟二:設置兩個組件的位置,大小壹致,就可以實現壹個組件對另外壹個組件的覆蓋
說明:先加入的組件,會顯示在最上面,後加入的組件,會在底層。
為了比較直觀,清晰的顯示,我們可以把底層的組件大小,稍微設置大壹點
代碼如下
import?javax.swing.*;import?java.awt.Color;
public?class?FrameDemo?extends?JFrame?{
public?static?void?main(String[]?args)?{
FrameDemo?frame?=?new?FrameDemo();
frame.setVisible(true);
}
public?FrameDemo()?{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200,?200);
setLocationRelativeTo(null);
getContentPane().setLayout(null);//設置布局為空布局
JPanel?jp1?=?new?JPanel();
jp1.setBounds(10,?10,?50,?50);
getContentPane().add(jp1);//先加入的組件,顯示在上面
jp1.setBackground(Color.RED);//設置該組件的背景色為紅色
JPanel?jp2?=?new?JPanel();
jp2.setBounds(10,?10,?60,?60);
getContentPane().add(jp2);//後加入的組件,顯示在下面
jp2.setBackground(Color.BLACK);//設置該組件的背景色為黑色
}
}
讓壹個JLabel部件覆蓋到壹個按鈕部件的上面又可以看到下面的按鈕
註意的是按鈕組件比較特殊,獲得焦點後,內容區域會重繪,導致Label看不見。所以要進行特殊處理。
import?javax.swing.*;import?java.awt.Color;
public?class?FrameDemo2?extends?JFrame?{
public?static?void?main(String[]?args)?{
FrameDemo2?frame?=?new?FrameDemo2();
frame.setVisible(true);
}
public?FrameDemo2()?{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200,?200);
setLocationRelativeTo(null);
getContentPane().setLayout(null);//設置布局為空布局
JLabel?jl?=?new?JLabel("label文字");
jl.setForeground(Color.RED);
jl.setBounds(57,?81,?54,?15);
getContentPane().add(jl);
JButton?jb?=?new?JButton("按鈕");
jb.setBounds(32,?48,?104,?57);
jb.setFocusable(false);//設置不獲得焦點,避免獲得焦點後,按鈕內容重繪,導致JLabel無法顯示
//jb.setContentAreaFilled(false);//這行代碼可以使按鈕區域透明,就不會在獲得焦點後重繪了
getContentPane().add(jb);
}
}
怎麽讓文本換行 讓按鈕顯示多行文字?
JButton?jb1?=?new?JButton("測試\n按鈕");使用傳統的“\n”,"\r\n"對文字換行處理按鈕換行,沒有任何效果
那麽不得不另辟蹊徑了,swing支持簡單的HTML標簽,所以可以通過HTML標簽來實現換行的效果
JButton?jb2?=?new?JButton("<html>測試<br>按鈕</html>");//使用HTML標記語言來換行拓展:
雖然Swing對HTML的支持不完善,只支持簡單的壹些標簽效果的顯示,但是只要我們使用恰當,那麽會收到意想不到的效果。