<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/components/](http://zetcode.com/gui/jythonswing/components/) 在 Jython Swing 編程教程的這一部分中,我們將介紹基本的 Swing 組件。 組件是 GUI 應用的基本構建塊。 多年來,一些組件已成為所有 OS 平臺上所有工具包中的標準組件。 例如,按鈕,復選框或滾動條。 Swing 具有豐富的組件集,可滿足大多數編程需求。 可以將更多專用組件創建為自定義組件。 ## `JCheckBox` `JCheckBox`是具有兩種狀態的組件:開和關。 開狀態通過復選標記顯示。 它用來表示一些布爾屬性。 `JCheckBox`組件提供了一個帶有文本標簽的復選框。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial This program uses JCheckBox component to show/hide the title of the window author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import Dimension from javax.swing import Box from javax.swing import BoxLayout from javax.swing import JCheckBox from javax.swing import JFrame class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.setLayout(BoxLayout(self.getContentPane(), BoxLayout.Y_AXIS)) self.add(Box.createRigidArea(Dimension(15, 20))) cb = JCheckBox("Show Title", True, actionPerformed=self.onSelect) cb.setFocusable(False) self.add(cb) self.setTitle("JCheckBox example") self.setSize(280, 200) self.setResizable(False) self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setLocationRelativeTo(None) self.setVisible(True) def onSelect(self, e): source = e.getSource() isSelected = source.isSelected() if isSelected: self.setTitle("JCheckBox example") else: self.setTitle("") if __name__ == '__main__': Example() ``` 在我們的示例中,我們在窗口上放置了一個復選框。 復選框顯示/隱藏窗口的標題。 ```py self.setLayout(BoxLayout(self.getContentPane(), BoxLayout.Y_AXIS)) self.add(Box.createRigidArea(Dimension(15, 20))) ``` 在此示例中,我們使用`BoxLayout`布局管理器。 我們在此處放置一些空間,以使復選框不太靠近角落。 ```py cb = JCheckBox("Show Title", True, actionPerformed=self.onSelect) ``` `JCheckBox`組件已創建。 構造器的第一個參數是其文本標簽。 第二個參數是一個布爾值,指示初始選擇狀態。 如果為`True`,則選中該復選框。 第三個參數指定方法,當我們選中或取消選中復選框時將調用該方法。 ```py cb.setFocusable(False) ``` 我們禁用復選框的焦點。 可以使用空格鍵選擇或取消選擇具有焦點的`JCheckBox`。 ```py source = e.getSource() isSelected = source.isSelected() if isSelected: self.setTitle("JCheckBox example") else: self.setTitle("") ``` 從事件對象,我們獲得源組件。 在我們的例子中是一個復選框。 我們找出復選框的選擇狀態。 根據復選框的狀態,我們顯示或隱藏窗口的標題。 ![JCheckBox](https://img.kancloud.cn/19/45/19456c98bb3e481240460fd9157fadad_280x200.jpg) 圖:`JCheckBox` ## `JLabel` `JLabel`組件用于顯示文本,圖像或兩者。 沒有用戶交互。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial This program uses JLabel component to show lyrics of a song author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import BorderLayout from java.awt import Font from javax.swing import BorderFactory from javax.swing import JFrame from javax.swing import JLabel from javax.swing import JPanel class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): lyrics = """<html>It's way too late to think of<br> Someone I would call now<br> And neon signs got tired<br> Red eye flights help the stars out<br> I'm safe in a corner<br> Just hours before me<br> <br> I'm waking with the roaches<br> The world has surrendered<br> I'm dating ancient ghosts<br> The ones I made friends with<br> The comfort of fireflies<br> Long gone before daylight<br> <br> And if I had one wishful field tonight<br> I'd ask for the sun to never rise<br> If God leant his voice for me to speak<br> I'd say go to bed, world<br> <br> I've always been too late<br> To see what's before me<br> And I know nothing sweeter than<br> Champaign from last New Years<br> Sweet music in my ears<br> And a night full of no fears<br> <br> But if I had one wishful field tonight<br> I'd ask for the sun to never rise<br> If God passed a mic to me to speak<br> I'd say stay in bed, world<br> Sleep in peace</html>""" panel = JPanel() panel.setLayout(BorderLayout(10, 10)) label = JLabel(lyrics) label.setFont(Font("Georgia", Font.PLAIN, 14)) panel.add(label, BorderLayout.CENTER) panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)) self.add(panel) self.pack() self.setTitle("No Sleep") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setLocationRelativeTo(None) self.setVisible(True) if __name__ == '__main__': Example() ``` 我們的示例在窗口中顯示了歌曲的歌詞。 我們可以在`JLabel`組件中使用 HTML 標簽。 我們使用`<br>`標簽來分隔行。 ```py lyrics = """<html>It's way too late to think of<br> Someone I would call now<br> And neon signs got tired<br> ... ``` 我們定義了多行文字。 ```py label = JLabel(lyrics) label.setFont(Font("Georgia", Font.PLAIN, 14)) ``` 在這里,我們創建標簽組件。 我們將其字體設置為 14 像素高的普通喬治亞州。 ```py panel.add(label, BorderLayout.CENTER) panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)) ``` 我們將標簽放在面板的中央。 我們在標簽周圍放置了 10px。 ![JLabel component](https://img.kancloud.cn/87/bf/87bf6211fd747113d29168b5f04b0f51_253x579.jpg) 圖:`JLabel`組件 ## `JSlider` `JSlider`是一個組件,使用戶可以通過在有限的間隔內滑動旋鈕來以圖形方式選擇一個值。 我們的示例將顯示音量控制。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial In this program we use the JSlider component to create a volume control user interface author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import BorderLayout from java.awt import Dimension from javax.swing import BorderFactory from javax.swing import Box from javax.swing import BoxLayout from javax.swing import ImageIcon from javax.swing import JFrame from javax.swing import JLabel from javax.swing import JPanel from javax.swing import JSlider class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.mute = ImageIcon("mute.png") self.min = ImageIcon("min.png") self.med = ImageIcon("med.png") self.max = ImageIcon("max.png") panel = JPanel() panel.setLayout(BoxLayout(panel, BoxLayout.X_AXIS)) panel.setBorder(BorderFactory.createEmptyBorder(40, 40, 40, 40)) self.setLayout(BorderLayout()) panel.add(Box.createHorizontalGlue()) slider = JSlider(0, 150, 0, stateChanged=self.onSlide) slider.setPreferredSize(Dimension(150, 30)) panel.add(slider) panel.add(Box.createRigidArea(Dimension(5, 0))) self.label = JLabel(self.mute, JLabel.CENTER) panel.add(self.label) panel.add(Box.createHorizontalGlue()) self.add(panel, BorderLayout.CENTER) self.pack() self.setTitle("JSlider") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setLocationRelativeTo(None) self.setVisible(True) def onSlide(self, e): sender = e.getSource() value = sender.getValue() if value == 0: self.label.setIcon(self.mute) elif value > 0 and value <= 30: self.label.setIcon(self.min) elif value > 30 and value < 80: self.label.setIcon(self.med) else: self.label.setIcon(self.max) if __name__ == '__main__': Example() ``` 在代碼示例中,我們顯示了`JSlider`和`JLabel`。 通過拖動滑塊,我們可以更改標簽組件上的圖標。 我們有四個代表聲音各種狀態的圖像。 ```py self.mute = ImageIcon("mute.png") ``` 在這里,我們創建一個圖像圖標。 ```py panel.setLayout(BoxLayout(panel, BoxLayout.X_AXIS)) ``` 面板組件具有水平`BoxLayout`。 ```py panel.setBorder(BorderFactory.createEmptyBorder(40, 40, 40, 40)) ``` 我們在面板周圍創建 40px 的邊框。 ```py panel.add(Box.createHorizontalGlue()) ``` 我們在左右兩側都放置了可調整大小的空間。 這是為了防止`JSlider`增長到不自然的大小。 ```py slider = JSlider(0, 150, 0, stateChanged=self.onSlide) ``` 這是一個`JSlider`構造器。 參數為最小值,最大值和當前值。 當我們滑動滑塊的旋鈕時,將調用`onSlide()`方法。 ```py panel.add(Box.createRigidArea(Dimension(5, 0))) ``` 我們在兩個組件之間放置一個 5px 的剛性空間。 當滑塊位于末端位置時,它們彼此之間過于靠近。 ```py self.label = JLabel(self.mute, JLabel.CENTER) ``` 該行創建一個具有指定圖像和水平對齊方式的`JLabel`實例。 默認情況下,標簽在其顯示區域中垂直居中。 ![JSlider component](https://img.kancloud.cn/a5/ec/a5ec92e57b69e7d227e1f0ad7c50d1ca_261x142.jpg) 圖:`JSlider`組件 ## `JToggleButton` `JToggleButton`是具有兩種狀態的按鈕。 已按下但未按下。 通過單擊可以在這兩種狀態之間切換。 在某些情況下此功能非常合適。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial This program uses toggle buttons to change the background color of a panel author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import Color from java.awt import Dimension from javax.swing import BorderFactory from javax.swing import Box from javax.swing import BoxLayout from javax.swing import JFrame from javax.swing import JPanel from javax.swing import JToggleButton from javax.swing.border import LineBorder class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.setPreferredSize(Dimension(280, 200)) bottom = JPanel() bottom.setLayout(BoxLayout(bottom, BoxLayout.X_AXIS)) bottom.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)) leftPanel = JPanel() leftPanel.setLayout(BoxLayout(leftPanel, BoxLayout.Y_AXIS)) redButton = JToggleButton("red", actionPerformed=self.onToggle) greenButton = JToggleButton("green", actionPerformed=self.onToggle) blueButton = JToggleButton("blue", actionPerformed=self.onToggle) blueButton.setMaximumSize(greenButton.getMaximumSize()) redButton.setMaximumSize(greenButton.getMaximumSize()) leftPanel.add(redButton) leftPanel.add(Box.createRigidArea(Dimension(25, 7))) leftPanel.add(greenButton) leftPanel.add(Box.createRigidArea(Dimension(25, 7))) leftPanel.add(blueButton) bottom.add(leftPanel) bottom.add(Box.createRigidArea(Dimension(20, 0))) self.display = JPanel() self.display.setPreferredSize(Dimension(110, 110)) self.display.setBorder(LineBorder.createGrayLineBorder()) self.display.setBackground(Color.black) bottom.add(self.display) self.add(bottom) self.pack() self.setTitle("JToggleButton") self.setResizable(False) self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setLocationRelativeTo(None) self.setVisible(True) def onToggle(self, e): color = self.display.getBackground() red = color.getRed() green = color.getGreen() blue = color.getBlue() if e.getActionCommand() == "red": if red == 0: red = 255 else: red = 0 if e.getActionCommand() == "green": if green == 0: green = 255 else: green = 0 if e.getActionCommand() == "blue": if blue == 0: blue = 255 else: blue = 0 setCol = Color(red, green, blue) self.display.setBackground(setCol) if __name__ == '__main__': Example() ``` 在代碼示例中,我們使用三個切換按鈕來更改矩形組件的顏色。 ```py redButton = JToggleButton("red", actionPerformed=self.onToggle) ``` 我們創建一個`JToggleButton`組件。 當我們單擊該按鈕時,將啟動`onToggle()`方法。 ```py blueButton.setMaximumSize(greenButton.getMaximumSize()) redButton.setMaximumSize(greenButton.getMaximumSize()) ``` 我們使三個按鈕的大小相等。 ```py color = self.display.getBackground() red = color.getRed() green = color.getGreen() blue = color.getBlue() ``` 我們確定顯示背景顏色的當前紅色,綠色,藍色部分。 ```py if e.getActionCommand() == "red": if red == 0: red = 255 else: red = 0 ``` 我們確定切換了哪個按鈕,并相應地更新 RGB 值的顏色部分。 ```py setCol = Color(red, green, blue) self.display.setBackground(setCol) ``` 在此創建新的顏色,并將顯示面板更新為新的顏色。 ![JToggleButton component](https://img.kancloud.cn/6b/3b/6b3bbc87fe2bdd1285cff74e4ad1091d_272x202.jpg) 圖:`JToggleButton`組件 ## `JList` `JList`是顯示對象列表的組件。 它允許用戶選擇一項或多項。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial This program shows all system fonts in a JList component author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import BorderLayout from java.awt import Dimension from java.awt import Font from java.awt import GraphicsEnvironment from javax.swing import JFrame from javax.swing import BorderFactory from javax.swing import JScrollPane from javax.swing import JPanel from javax.swing import JLabel from javax.swing import JList class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): panel = JPanel() panel.setLayout(BorderLayout()) panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)) ge = GraphicsEnvironment.getLocalGraphicsEnvironment() fonts = ge.getAvailableFontFamilyNames() list = JList(fonts, valueChanged=self.onChanged) pane = JScrollPane() pane.getViewport().add(list) pane.setPreferredSize(Dimension(250, 200)) panel.add(pane) self.label = JLabel("Aguirre, der Zorn Gottes") self.label.setFont(Font("Serif", Font.PLAIN, 12)) self.add(self.label, BorderLayout.SOUTH) self.add(panel) self.pack() self.setTitle("JList") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setLocationRelativeTo(None) self.setVisible(True) def onChanged(self, e): sender = e.getSource() if not e.getValueIsAdjusting(): name = sender.getSelectedValue() font = Font(name, Font.PLAIN, 13) self.label.setFont(font) if __name__ == '__main__': Example() ``` 在我們的示例中,我們將顯示`JList`和`JLabel`組件。 列表組件包含我們系統上所有可用字體系列名稱的列表。 如果我們從列表中選擇一項,則標簽將以我們選擇的字體顯示。 ```py ge = GraphicsEnvironment.getLocalGraphicsEnvironment() fonts = ge.getAvailableFontFamilyNames() ``` 在這里,我們獲得系統上所有可能的字體系列名稱。 ```py list = JList(fonts, valueChanged=self.onChanged) ``` 我們創建`JList`組件的實例。 如果我們從列表中選擇一個選項,則會調用`onChanged()`方法。 ```py if not e.getValueIsAdjusting(): ``` 列表選擇中的事件被分組。 我們收到選擇和取消選擇事件。 為了僅過濾選擇事件,我們使用`getValueIsAdjusting()`方法。 ```py name = sender.getSelectedValue() font = Font(name, Font.PLAIN, 13) self.label.setFont(font) ``` 我們得到所選項目并為標簽設置新字體。 ```py pane = JScrollPane() pane.getViewport().add(list) ``` 默認情況下,`JList`組件不可滾動。 我們將列表放入`JScrollPane`以使其可滾動。 ![JList component](https://img.kancloud.cn/f3/3a/f33ae6c0f2b1e68619e6a168d6c6aac1_292x287.jpg) 圖:`JList`組件 在 Jython Swing 教程的這一部分中,我們介紹了幾個 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>

                              哎呀哎呀视频在线观看