讓我們從最簡單的Swing程序開始。
我們將使用JFrame(它是一個頂層容器)來創(chuàng)建我們的第一個應(yīng)用程序。要創(chuàng)建和顯示JFrame,我們需要執(zhí)行以下操作:
要創(chuàng)建JFrame對象,我們可以使用JFrame類的構(gòu)造函數(shù)。
在下面的代碼中,我們使用接受字符串的構(gòu)造函數(shù)。字符串值將顯示為JFrame的標(biāo)題。
表示Swing組件的類位于javax.swing包中,所以是JFrame類。
以下代碼創(chuàng)建一個JFrame對象,其標(biāo)題設(shè)置為“Swing":
// Create a JFrame object JFrame frame = new JFrame("Swing");
當(dāng)我們創(chuàng)建一個JFrame對象,默認(rèn)情況下,它是不可見的。我們必須調(diào)用它的 setVisible(boolean visible)
方法使其可見。true參數(shù)使框架可見,隱藏框架通過false到setVisible方法。
使JFrame在屏幕上可見
frame.setVisible(true);
以下代碼將兩個語句封裝為一個語句,以創(chuàng)建和顯示JFrame。
new JFrame("Swing").setVisible(true);
import javax.swing.JFrame; /*from w ww . jav a2 s . c o m*/ public class Main { public static void main(String[] args) { // Create a frame JFrame frame = new JFrame("Swing"); // Display the frame frame.setVisible(true); } }
我們可以定義JFrame的四個行為之一確定當(dāng)JFrame關(guān)閉時會發(fā)生什么。
常量在javax.swing.WindowsConstants接口中定義。
JFrame類實現(xiàn)了WindowsConstants接口。我們可以使用JFrame.CONSTANT_NAME語法或引用所有這些常量我們可以使用WindowsConstants.CONSTANT_NAME語法。
四個常數(shù)是
DO_NOTHING_ON_CLOSE
HIDE_ON_CLOSE
DISPOSE_ON_CLOSE
EXIT_ON_CLOSE
我們可以通過將四個常量之一傳遞給它來設(shè)置JFrame的默認(rèn)關(guān)閉行為setDefaultCloseOperation()方法。
以下代碼顯示了當(dāng)JFrame關(guān)閉時如何退出應(yīng)用程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
上面的JFrame沒有可視區(qū)域。它只顯示標(biāo)題欄。
我們需要設(shè)置JFrame的大小和位置以顯示其內(nèi)容區(qū)域。
幀的大小由其寬度和高度(以像素為單位)定義我們可以使用setSize(int width,int height)方法設(shè)置它們。
該位置由相對于屏幕左上角的JFrame左上角的(x,y)坐標(biāo)以像素為單位定義。
默認(rèn)情況下,它的位置設(shè)置為(0,0),這是JFrame顯示的原因在屏幕的左上角。
我們可以使用其 setLocation(int x,int y)
方法設(shè)置JFrame的(x,y)坐標(biāo)。
要在一個步驟中設(shè)置其大小和位置,請使用其setBounds(int x,int y,int width,int height)方法。
下面的代碼給出了JFrame的大小和位置。
import javax.swing.JFrame; /* ww w . ja v a2s . c o m*/ public class Main { public static void main(String[] args) { JFrame frame = new JFrame("Swing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Set the x, y, width and height properties frame.setBounds(50, 50, 200, 200); frame.setVisible(true); } }
要將JFrame放在屏幕中央,使用null參數(shù)調(diào)用其setLocationRelativeTo()方法。
當(dāng)向JFrame添加UI控件時,我們將它們添加到JFrame的內(nèi)容窗格。
JFrame的內(nèi)容窗格保存JFrame的Swing組件。
要從JFrame獲取內(nèi)容窗格的引用,請使用以下代碼。
// Create a JFrame JFrame frame = new JFrame("Test"); // Get the reference of the content pane Container contentPane = frame.getContentPane();
從JFrame獲取內(nèi)容窗格的引用后,我們可以添加組件通過使用add()方法。
// Add aComponent to contentPane contentPane.add(aComponent);
下面的代碼向JFrame添加了一個JButton。JButton類的一個對象表示一個按鈕,例如消息框上的OK按鈕。
JButton包含標(biāo)簽文本。 下一行使用關(guān)閉作為JButton的標(biāo)簽文本。
// Create a JButton with Close text JButton closeButton = new JButton("Close");
要將closeButton添加到JFrame的內(nèi)容窗格,我們必須做兩件事情:
獲取JFrame的內(nèi)容窗格的引用。
Container contentPane = frame.getContentPane();
調(diào)用內(nèi)容窗格的add()方法。
contentPane.add(closeButton);
要使用一行代碼將JButton添加到JFrame,請將所有語句合并為一個語句。
frame.getContentPane().add(new JButton("Close"));
要使用一行代碼將JButton添加到JFrame,請將所有語句合并為一個語句。...
import java.awt.Container; //from ww w. j a va2 s .c o m import javax.swing.JButton; import javax.swing.JFrame; public class Main { public static void main(String[] args) { JFrame frame = new JFrame("JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = frame.getContentPane(); // Add a close button JButton closeButton = new JButton("Close"); contentPane.add(closeButton); // set the size of the frame 300 x 200 frame.setBounds(50, 50, 300, 200); frame.setVisible(true); } }
JFrame的pack()方法檢查JFrame上的所有組件,并決定它們的首選大小,并設(shè)置JFrame的大小剛好足以顯示所有組件。
當(dāng)我們調(diào)用pack()方法時,我們不需要設(shè)置JFrame的大小。pack()方法將計算JFrame的大小并設(shè)置它。
當(dāng)使用pack()方法時,我們不需要調(diào)用setBounds()方法。
要在pack()方法后定位JFrame,請使用setLocation(x,y)方法。
import java.awt.Container; // w ww . j a v a 2 s .co m import javax.swing.JButton; import javax.swing.JFrame; public class Main { public static void main(String[] args) { JFrame frame = new JFrame("JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Add a close button JButton closeButton = new JButton("Close"); Container contentPane = frame.getContentPane(); contentPane.add(closeButton); // Calculates and sets appropriate size for the frame frame.pack(); frame.setVisible(true); } }
我們可以使用編程方式設(shè)置JFrame的狀態(tài)setExtendedState(int state)方法。
使用在繼承JFrame類的java.awt.Frame類中定義的常量來指定狀態(tài)。
使用在繼承JFrame類的java.awt.Frame類中定義的常量來指定狀態(tài)。...
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
下表列出了定義JFrame的狀態(tài)的常量
JFrame狀態(tài)常量 | 描述 |
---|---|
NORMAL | JFrame以正常大小顯示。 |
ICONIFIED | JFrame顯示為最小化狀態(tài)。 |
MAXIMIZED_HORIZ | JFrame顯示為水平最大化,但垂直尺寸正常。 |
MAXIMIZED_VERT | JFrame顯示為水平最大化,但垂直尺寸正常。... |
MAXIMIZED_BOTH | JFrame顯示為水平和垂直最大化。 |
有時我們可能想在JFrame或JDialog中使用默認(rèn)按鈕。默認(rèn)按鈕是的一個實例JButton類,當(dāng)用戶按下鍵盤上的一個鍵時激活。
激活默認(rèn)按鈕的鍵由外觀定義。
通常,激活默認(rèn)按鈕的鍵是Enter鍵。
我們可以為JRootPane設(shè)置一個默認(rèn)按鈕,它存在于JFrame,JDialog,JWindow,JApplet和JInternalFrame中。
通常,我們將OK按鈕設(shè)置為JDialog上的默認(rèn)按鈕。如果JRootPane設(shè)置了默認(rèn)按鈕,按Enter鍵將激活該按鈕。
// Create a JButton JButton okButton = new JButton("OK"); // Set okButton as the default button frame.getRootPane().setDefaultButton(okButton);
我們可以向JFrame或任何其他頂級Swing窗口添加一個窗口偵聽器,以便通知窗口狀態(tài)的更改。
下面的代碼將一個窗口偵聽器添加到一個名為frame的JFrame。
如果我們感興趣的只是監(jiān)聽幾個窗口狀態(tài)的變化,我們可以使用WindowAdapter類而不是WindowListener接口。
WindowAdapter類提供了WindowListener接口中所有七個方法的空實現(xiàn)。
import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.io.IOException; //ww w . j a v a 2s. c o m import javax.swing.JFrame; public class Main { public static void main(String[] args) throws IOException { JFrame frame = new JFrame(); frame.addWindowListener(new WindowListener() { @Override public void windowOpened(WindowEvent e) { System.out.println("JFrame has been made visible first time"); } @Override public void windowClosing(WindowEvent e) { System.out.println("JFrame is closing."); } @Override public void windowClosed(WindowEvent e) { System.out.println("JFrame is closed."); } @Override public void windowIconified(WindowEvent e) { System.out.println("JFrame is minimized."); } @Override public void windowDeiconified(WindowEvent e) { System.out.println("JFrame is restored."); } @Override public void windowActivated(WindowEvent e) { System.out.println("JFrame is activated."); } @Override public void windowDeactivated(WindowEvent e) { System.out.println("JFrame is deactivated."); } }); // Use the WindowAdapter class to intercept only the window closing event frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.out.println("JFrame is closing."); } }); } }
我們完成了一個窗口(JFrame,JDialog或JWindow),我們應(yīng)該調(diào)用它的dispose()方法。
dispose()方法使窗口不可見,并將資源釋放到操作系統(tǒng)。
更多建議: