<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Jython Swing 中的布局管理 > 原文: [http://zetcode.com/gui/jythonswing/layout/](http://zetcode.com/gui/jythonswing/layout/) 在 Jython Swing 編程教程的這一部分中,我們將介紹布局管理器。 在設計應用的 GUI 時,我們決定要使用哪些組件以及如何在應用中組織這些組件。 為了組織我們的組件,我們使用專門的不可見對象,稱為布局管理器。 Swing 工具箱包含兩種組件:容器和子組件。 容器將子項分組為合適的布局。 要創建布局,我們使用布局管理器。 ## 絕對定位 在大多數情況下,程序員應使用布局管理器。 在某些情況下,我們可以使用絕對定位。 在絕對定位中,程序員以像素為單位指定每個小部件的位置和大小。 如果我們調整窗口大小,則小部件的大小和位置不會改變。 在各種平臺上,應用看起來都不同,在 Linux 上看起來不錯,在 Mac OS 上看起來不太正常。 在應用中更改字體可能會破壞布局。 如果將應用翻譯成另一種語言,則必須重做布局。 對于所有這些問題,僅在有理由時才使用絕對定位。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial In this program, we lay out widgets using absolute positioning author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import Color from javax.swing import ImageIcon from javax.swing import JFrame from javax.swing import JPanel from javax.swing import JLabel class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): panel = JPanel() panel.setLayout(None) panel.setBackground(Color(66, 66, 66)) self.getContentPane().add(panel) rot = ImageIcon("rotunda.jpg") rotLabel = JLabel(rot) rotLabel.setBounds(20, 20, rot.getIconWidth(), rot.getIconHeight()) min = ImageIcon("mincol.jpg") minLabel = JLabel(min) minLabel.setBounds(40, 160, min.getIconWidth(), min.getIconHeight()) bar = ImageIcon("bardejov.jpg") barLabel = JLabel(bar) barLabel.setBounds(170, 50, bar.getIconWidth(), bar.getIconHeight()) panel.add(rotLabel) panel.add(minLabel) panel.add(barLabel) self.setTitle("Absolute") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setSize(350, 300) self.setLocationRelativeTo(None) self.setVisible(True) if __name__ == '__main__': Example() ``` 在此示例中,我們使用絕對定位顯示了三幅圖像。 ```py panel.setLayout(None) ``` Swing 中的容器已經具有默認的布局管理器。 `JPanel`具有`FlowLayout`管理器作為其默認布局管理器。 我們將`setLayout()`方法與無參數一起使用,以刪除默認的布局管理器,而改用絕對定位。 ```py rot = ImageIcon("rotunda.jpg") rotLabel = JLabel(rot) rotLabel.setBounds(20, 20, rot.getIconWidth(), rot.getIconHeight()) ``` 我們創建一個`ImageIcon`對象。 我們將圖標放入`JLabel`組件中以顯示它。 然后,我們使用`setBounds()`方法將標簽放置在面板上。 前兩個參數是標簽的 x,y 位置。 第 3 和第 4 個參數是圖標的寬度和高度。 ```py panel.add(rotLabel) ``` 我們將標簽添加到面板容器中。 ![Absolute](https://img.kancloud.cn/ef/ba/efba37c6cc9d90d132d2879c9161e001_350x300.jpg) 圖:絕對定位 ## 按鈕示例 在下面的示例中,我們將在窗口的右下角放置兩個按鈕。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial In this program, use box layouts to position two buttons in the bottom right corner of the window author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import Dimension from javax.swing import JButton from javax.swing import JFrame from javax.swing import JPanel from javax.swing import BoxLayout from javax.swing import Box class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): basic = JPanel() basic.setLayout(BoxLayout(basic, BoxLayout.Y_AXIS)) self.add(basic) basic.add(Box.createVerticalGlue()) bottom = JPanel() bottom.setAlignmentX(1.0) bottom.setLayout(BoxLayout(bottom, BoxLayout.X_AXIS)) okButton = JButton("OK") closeButton = JButton("Close") bottom.add(okButton) bottom.add(Box.createRigidArea(Dimension(5, 0))) bottom.add(closeButton) bottom.add(Box.createRigidArea(Dimension(15, 0))) basic.add(bottom) basic.add(Box.createRigidArea(Dimension(0, 15))) self.setTitle("Buttons") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setSize(300, 150) self.setLocationRelativeTo(None) self.setVisible(True) if __name__ == '__main__': Example() ``` 我們將創建兩個面板。 基本面板具有垂直框布局。 底部面板有一個水平面板。 我們將在基礎面板中放置一個底部面板。 我們將右對齊底部面板。 窗口頂部和底部面板之間的空間是可擴展的。 這是通過垂直膠水完成的。 ```py basic = JPanel() basic.setLayout(BoxLayout(basic, BoxLayout.Y_AXIS)) ... bottom = JPanel() ... bottom.setLayout(BoxLayout(bottom, BoxLayout.X_AXIS)) ``` 基本面板具有垂直框布局。 底部面板具有水平框布局。 ```py bottom.setAlignmentX(1.0) ``` 底部面板右對齊。 ```py basic.add(Box.createVerticalGlue()) ``` 我們創建一個垂直膠水。 膠水是垂直可擴展的白色空間,它將帶有按鈕的水平框推到底部。 ```py okButton = JButton("OK") closeButton = JButton("Close") ``` 這是兩個將進入窗口右下角的按鈕。 ```py bottom.add(okButton) bottom.add(Box.createRigidArea(Dimension(5, 0))) ``` 我們將“確定”按鈕放入水平框中。 我們在按鈕旁邊放置了一些剛性空間。 這樣兩個按鈕之間會有一些空間。 ```py basic.add(Box.createRigidArea(Dimension(0, 15))) ``` 我們在按鈕和窗口的邊框之間留出一些空間。 ![Buttons example](https://img.kancloud.cn/f4/f1/f4f1f6125ed8ef2d0238272a4f4ee8d5_300x150.jpg) 圖:按鈕示例 ## Windows 示例 以下示例使用`GroupLayout`管理器創建 Windows 對話框。 該對話框來自 JDeveloper 應用。 `GroupLayout`管理器將布局的創建分為兩個步驟。 第一步,我們沿著水平軸布置組件。 在第二步中,我們沿垂直軸布置組件。 這在布局管理器中是一個不尋常的想法,但效果很好。 有兩種類型的安排:順序安排和并行安排。 在兩種布局中,我們都可以順序或并行排列組件。 在水平布局中,一行組件稱為順序組。 一列組件稱為并行組。 在垂直布局中,一列組件稱為順序組。 一排組件稱為并行組。 您必須正確理解這些定義才能與`GroupLayout`管理器一起使用。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial This code lays out components using the GroupLayout manager author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import Dimension from java.awt import Color from javax.swing import JButton from javax.swing import SwingConstants from javax.swing import JFrame from javax.swing import JLabel from javax.swing import JTextArea from javax.swing import BorderFactory from javax.swing import GroupLayout class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): layout = GroupLayout(self.getContentPane()) self.getContentPane().setLayout(layout) layout.setAutoCreateGaps(True) layout.setAutoCreateContainerGaps(True) self.setPreferredSize(Dimension(350, 300)) windows = JLabel("Windows") area = JTextArea() area.setEditable(False) area.setBorder(BorderFactory.createLineBorder(Color.gray)) activate = JButton("Activate") close = JButton("Close") help = JButton("Help") ok = JButton("OK") layout.setHorizontalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup() .addComponent(windows) .addComponent(area) .addComponent(help)) .addGroup(layout.createParallelGroup() .addComponent(activate) .addComponent(close) .addComponent(ok)) ) layout.setVerticalGroup(layout.createSequentialGroup() .addComponent(windows) .addGroup(layout.createParallelGroup() .addComponent(area) .addGroup(layout.createSequentialGroup() .addComponent(activate) .addComponent(close))) .addGroup(layout.createParallelGroup() .addComponent(help) .addComponent(ok)) ) layout.linkSize(SwingConstants.HORIZONTAL, [ok, help, close, activate]) self.pack() self.setTitle("Windows") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setLocationRelativeTo(None) self.setVisible(True) if __name__ == '__main__': Example() ``` 在上面的示例中,我們看到了`addComponent()`方法的鏈式調用。 這是可能的,因為`addComponent()`方法返回了調用它的組。 因此,我們不需要局部變量來保存組。 另請注意,代碼已適當縮進以提高可讀性。 ```py layout.setHorizontalGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup() .addComponent(windows) .addComponent(area) .addComponent(help)) .addGroup(layout.createParallelGroup() .addComponent(activate) .addComponent(close) .addComponent(ok)) ) ``` 第一步,我們有一個水平布局。 它由兩組平行的三個部分組成。 ```py layout.setVerticalGroup(layout.createSequentialGroup() .addComponent(windows) .addGroup(layout.createParallelGroup() .addComponent(area) .addGroup(layout.createSequentialGroup() .addComponent(activate) .addComponent(close))) .addGroup(layout.createParallelGroup() .addComponent(help) .addComponent(ok)) ) ``` 垂直布局有點復雜。 首先,我們添加一個組件。 然后,我們添加一個包含單個組件的并行組和一個包含兩個組件的順序組。 最后,我們添加兩個組件的并行組。 ```py layout.linkSize(SwingConstants.HORIZONTAL, [ok, help, close, activate]) ``` 此行使所有按鈕的大小相同。 我們只需要設置它們的寬度,因為默認情況下它們的高度已經相同。 ![Windows example](https://img.kancloud.cn/3c/b3/3cb3db6d3440588e69d9bfec3653c00b_342x302.jpg) 圖:窗口示例 查看示例的屏幕截圖。 注意,可以將組件分為垂直和水平組件集。 例如,標簽區域和“幫助”按鈕組件可以形成垂直的組件組。 這正是`GroupLayout`管理器所做的。 它通過形成組件的垂直和水平組來布局組件。 在 Jython Swing 教程的這一部分中,我們提到了小部件的布局管理。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看