java jinternalframe_JInternalFrame的使用
類層次結(jié)構(gòu)圖:
--javax.swing.JComponent
--javax.swing.JLayeredPane
--javax.swing.JDesktop
我們先來看看如何構(gòu)造JInternalFrame與JDesktopPane,再來看它跟Desktop Pane之間的關(guān)系。下面分別是JInternalFram與JDesktopPane的構(gòu)造函數(shù):
JInternalFrame構(gòu)造函數(shù):
JInternalFrame():建立一個不能更改大小、不可關(guān)閉、不可最大最小化、也沒有標(biāo)題的Internal Frame。
JInternalFrame(String title):建立一個不能更改大小、不可關(guān)閉、不可最大最小化、但具有標(biāo)題的Internal Frame。
JInternalFrame(String title,boolean resizable):建立一個不可關(guān)閉、不可最大最小化、但可變更大小且具有標(biāo)題的Internal Frame。
JInternalFrame(String title,boolean resizable,boolean closable):建立一個可關(guān)閉、可更改大小、且具有標(biāo)題,但不可最大化最小化的Internal Frame.
JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable):建立一個可關(guān)閉、可更改大小、具有標(biāo)題、可最大化,但不可最小化的Internal Frame.
JInternalFrame(String title,boolean resizable,boolean closable,boolean maximizable,boolean iconifiable):建立一個可關(guān)閉、可更改大小、具有標(biāo)題、可最大化與最小化的Internal Frame.
JDesktopPane構(gòu)造函數(shù):
JDesktopPane():建立JDesktopPane組件。
如何利用JDesktoPane來管理JInternalFrame:
JInternalFrame1.java
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class JInternalFrame1 extends JFrame implements ActionListener{
JDesktopPane desktopPane;
int count = 1;
public JInternalFrame1() {
super("JInternalFrame1");
Container contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
JButton b = new JButton("Create New Internal Frames");
b.addActionListener(this);//當(dāng)用戶按下按鈕時,將運(yùn)行actionPerformed()中的程序
contentPane.add(b, BorderLayout.SOUTH);
/*建立一個新的JDesktopPane并加入于contentPane中
*/
desktopPane = new JDesktopPane();
contentPane.add(desktopPane);
setSize(350, 350);
show();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
/*產(chǎn)生一個可關(guān)閉、可改變大小、具有標(biāo)題、可最大化與最小化的Internal Frame.
*/
public void actionPerformed(ActionEvent e)
{
JInternalFrame internalFrame = new JInternalFrame(
"Internal Frame "+(count++), true, true, true, true);
internalFrame.setLocation( 20,20);
internalFrame.setSize(200,200);
internalFrame.setVisible(true);
//取得JInternalFrame的Content Pane,用以加入新的組件。
Container icontentPane = internalFrame.getContentPane();
JTextArea textArea = new JTextArea();
JButton b = new JButton("Internal Frame Button");
/*將JTextArea與JButton對象加入JInternalFrame中。由此呆知,JInteranlFrame加入組件
*的方式與JFrame是一模一樣。
*/
icontentPane.add(textArea,"Center");
icontentPane.add(b,"South");
//將JInternalFrame加入JDesktopPane中,如此一來,即使產(chǎn)生很多JInternalFrame,JDesktopPane也
//能將它們之間的關(guān)系管理得相當(dāng)良好。
desktopPane.add(internalFrame);
try {
internalFrame.setSelected(true);
} catch (java.beans.PropertyVetoException ex) {
System.out.println("Exception while selecting");
}
}
public static void main(String[] args) {
new JInternalFrame1();
}
}
JPanel的使用:類層次結(jié)構(gòu)圖:
--javax.swing.JComponent
--javax.swing.JPanel
Panel民是java中時常用到的容器之一,Panel除了可以讓組件加入外,有效的利用Panel可以使版面管理更為容易。Swing的JPanel支持double buffering的功能,使得JPanel在處理動畫上更為流暢,較不會有畫面閃爍的情況發(fā)生。下面為它的構(gòu)造函數(shù):
JPanel構(gòu)造函數(shù):
JPanel():建立一個具有double buffering功能的JPanel,默認(rèn)的版面管理是Flow Layout.
JPanel(boolean isDoubleBuffered):選擇建立是否具有double buffering功能的JPanel,默認(rèn)的版面管理是Flow Layout.
JPanel(LayoutManager layout):建立一個具有double buffering功能JPanel,可自定義版面管理器.
JPanel(LayoutManager layout,boolean isDoubleBuffered):選擇建立是否具有double buffering功能的JPanel,并自定義版面管理器.
下面這個例子我們用JPanel來排列5個JLabel對象,你將可以發(fā)現(xiàn)利用JPanel搭配版面管理,可以做出更復(fù)雜的排列效果。
JPanel1.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JPanel1
{
public JPanel1()
{
JFrame f = new JFrame("JPanelDemo");
Container contentPane = f.getContentPane();
contentPane.setLayout(new GridLayout(2,1));
JLabel[] label = new JLabel[5];
for(int i=0; i
{
label[i] = new JLabel("Label "+(i+1),JLabel.CENTER);
label[i].setBackground(Color.lightGray);
label[i].setBorder(BorderFactory.createEtchedBorder());
label[i].setOpaque(true);//setOpaqueIture)方法的目的是讓組件變成不透明,這樣我們在JLabel上所設(shè)置的顏色?才能顯示出來。
}
JPanel panel1 = new JPanel(new GridLayout(1,1));
panel1.add(label[0]);
JPanel panel2 = new JPanel(new GridLayout(1,2));
JPanel panel3 = new JPanel(new GridLayout(1,2));
panel3.add(label[1]);
panel3.add(label[2]);
JPanel panel4 = new JPanel(new GridLayout(2,1));
panel4.add(label[3]);
panel4.add(label[4]);
panel2.add(panel3);
panel2.add(panel4);
contentPane.add(panel1);
contentPane.add(panel2);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] arg)
{
new JPanel1();
}
}
由上例可知,利用JPanel可以使版面的排列方式更生動,若沒有JPanel的幫助,想直接由contentPane排列成如上例所示,便必須借助復(fù)雜的GridBagLayout版面管理器了。
JSplitPane的使用:
--javax.swing.JComponent
--javax.swing.JSplitPane
Split Pane(分割面版)一次可將兩個組件同時顯示在兩個顯示區(qū)中,若你想要同時在多個顯示區(qū)顯示組件,你便必須同時使用多個Split Pane。JSplitPane提供兩個常數(shù)讓你設(shè)置到底是要水平分割還是垂直分割。這兩個常數(shù)分別是:HORIZONTAL_SPIT,VERTICAL_SPLIT.除了這兩個重要的常數(shù)外,JSplitPane還提供許多類常數(shù)讓你使用,我們會在下面的例子中介紹比較常用的類常數(shù),其余信息請參年java API.
JsplitPane構(gòu)造函數(shù):
JSplitPane():建立一個新的JSplitPane,里面含有兩個默認(rèn)按鈕,并以水平方向排列,介沒有Continuous Layout功能。
JSplitPane(int newOrientation):建立一個指定水平或垂直方向切割JSplitPane,但沒有Continuous Layout功能。
JSplitPnae(int newOrientation,boolean newContinuousLayout):建立一個指定水平或垂直方向切割的JSplitPane,且指定是否具有Continuous Layout功能。
JSplitPane(int newOrientation,boolean newContinuousLayout,Component newLeftComponent,Component newRightComponent):建立一個指定水平或垂直方向切割的JSplitPane,且指定顯示區(qū)所要顯示的組件,并設(shè)置是否ContinuousLayout功能。
JSplitPane(int newOrientation,COmponent newLeftComponent,COmponent newRightComponent):建立一個指定水平或垂直方向切割的JSplitPane,且指定顯示區(qū)所要顯示的組件,但沒有Continuous Layout功能。
上面所說的Continuous Layout意思是指當(dāng)你拖曳切割面版的分隔線時,窗口內(nèi)的組件是否會隨著分隔線的拖曳而動態(tài)改變大小。newContinuousLayout是一個boolean值,若設(shè)為true,則組件大小會隨著分隔線的拖曳而一起改動;若設(shè)為false,則組件大小在分隔線停止改動時才確定。你也可以使用JSplitPane中的setContinuousLayout()方法來設(shè)置此項目。
JSplitPane的例子:JSplitPane1.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JSplitPane1{
public JSplitPane1(){
JFrame f=new JFrame("JSplitPaneDemo");
Container contentPane=f.getContentPane();
JLabel label1=new JLabel("Label 1",JLabel.CENTER);
label1.setBackground(Color.green);
label1.setOpaque(true);//setOpaqueIture)方法的目的是讓組件變成不透明,這樣我們在JLabel上所設(shè)置的顏色
// 才能顯示出來。
JLabel label2=new JLabel("Label 2",JLabel.CENTER);
label2.setBackground(Color.pink);
label2.setOpaque(true);
JLabel label3=new JLabel("Label 3",JLabel.CENTER);
label3.setBackground(Color.yellow);
label3.setOpaque(true);
/*加入label1,label2到splitPane1中,并設(shè)置此splitPane1為水平分割且具有Continuous Layout的
*功能。
*/
JSplitPane splitPane1=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,false,label1,label2);
/*設(shè)置splitPane1的分隔線位置,0.3是相對于splitPane1的大小而定,因此這個值的范圍在0.0~1.0
*中。若你使用整數(shù)值來設(shè)置splitPane的分隔線位置,如第34行所示,則所定義的值以pixel為計算單位
*/
splitPane1.setDividerLocation(0.3);
/*設(shè)置JSplitPane是否可以展開或收起(如同文件總管一般),設(shè)為true表示打開此功能。
*/
splitPane1.setOneTouchExpandable(true);
splitPane1.setDividerSize(10);//設(shè)置分隔線寬度的大小,以pixel為計算單位。
JSplitPane splitPane2=new JSplitPane(JSplitPane.VERTICAL_SPLIT,false,splitPane1,label3);
splitPane2.setDividerLocation(35);
//設(shè)置JSplitPane是否可以展開或收起(如同文件總管一般),設(shè)為true表示打開此功能.
splitPane2.setOneTouchExpandable(false);
splitPane2.setDividerSize(5);
contentPane.add(splitPane2);
f.setSize(250,200);
f.show();
f.addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
public static void main(String[] args){
new JSplitPane1();
}
}
總結(jié)
以上是生活随笔為你收集整理的java jinternalframe_JInternalFrame的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 随机生成10个整数_Java:
- 下一篇: java gc 次数_浅谈如何减少GC的