<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # JRuby Swing 中的組件 > 原文: [http://zetcode.com/gui/jrubyswing/components/](http://zetcode.com/gui/jrubyswing/components/) 在 JRuby Swing 編程教程的這一部分中,我們將介紹基本的 Swing 組件。 組件是 GUI 應用的基本構建塊。 多年來,一些組件已成為所有 OS 平臺上所有工具包中的標準組件。 例如,按鈕,復選框或滾動條。 Swing 具有豐富的組件集,可滿足大多數編程需求。 可以將更多專用組件創建為自定義組件。 ## `JCheckBox` `JCheckBox`是具有兩種狀態的組件:開和關。 開狀態通過復選標記顯示。 它用來表示一些布爾屬性。 `JCheckBox`組件提供了一個帶有文本標簽的復選框。 ```rb #!/usr/local/bin/jruby # ZetCode JRuby Swing tutorial # # This program uses JCheckBox # component to show/hide the title # of the window # # author: Jan Bodnar # website: www.zetcode.com # last modified: December 2010 include Java import java.awt.Dimension import javax.swing.JCheckBox import javax.swing.Box import javax.swing.BoxLayout import javax.swing.JFrame class Example < JFrame def initialize super "JCheckBox example" self.initUI end def initUI self.setLayout BoxLayout.new getContentPane, BoxLayout::Y_AXIS self.add Box.createRigidArea Dimension.new 15, 20 cb = JCheckBox.new "Show Title", true cb.setBounds 50, 60, 80, 30 cb.setFocusable(false) cb.add_action_listener do |e| if self.getTitle.empty? self.setTitle "JCheckBox example" else self.setTitle "" end end add cb self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE self.setSize 300, 200 self.setLocationRelativeTo nil self.setVisible true end end Example.new ``` 在我們的示例中,我們在窗口上放置了一個復選框。 復選框顯示或隱藏窗口的標題。 ```rb self.setLayout BoxLayout.new getContentPane, BoxLayout::Y_AXIS self.add Box.createRigidArea Dimension.new 15, 20 ``` 在此示例中,我們使用`BoxLayout`布局管理器。 我們在此處放置一些空間,以使復選框不太靠近角落。 ```rb cb = JCheckBox.new "Show Title", true ``` `JCheckBox`組件已創建。 構造器的第一個參數是其文本標簽。 第二個參數是一個布爾值,指示初始選擇狀態。 如果為`true`,則選中該復選框。 ```rb cb.setFocusable false ``` 我們禁用復選框的焦點。 可以使用空格鍵選擇或取消選擇具有焦點的`JCheckBox`。 ```rb cb.add_action_listener do |e| if self.getTitle.empty? self.setTitle "JCheckBox example" else self.setTitle "" end end ``` 在動作監聽器內部,我們檢查標題是否已設置。 如果有標題,我們將其刪除。 如果沒有標題,我們設置一個。 這樣,我們可以切換標題的可見性。 ![JCheckBox](https://img.kancloud.cn/19/45/19456c98bb3e481240460fd9157fadad_280x200.jpg) 圖:`JCheckBox` ## `JLabel` `JLabel`組件用于顯示文本,圖像或兩者。 沒有用戶交互。 ```rb #!/usr/local/bin/jruby # ZetCode JRuby Swing tutorial # # In this program, we show lyrics of a # song in a window. # # author: Jan Bodnar # website: www.zetcode.com # last modified: December 2010 include Java import java.awt.BorderLayout import java.awt.Color import java.awt.Font import javax.swing.JFrame import javax.swing.BorderFactory import javax.swing.JPanel import javax.swing.JLabel class Example < JFrame def initialize super "Lyrics" self.initUI end def initUI 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.new panel.setLayout BorderLayout.new 10, 10 label = JLabel.new lyrics label.setFont Font.new "Georgia", Font::PLAIN, 14 label.setForeground Color.new 50, 50, 25 panel.add label, BorderLayout::CENTER panel.setBorder BorderFactory.createEmptyBorder 10, 10, 10, 10 self.add panel self.pack self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE self.setLocationRelativeTo nil self.setVisible true end end Example.new ``` 我們的示例在窗口中顯示了歌曲的歌詞。 我們可以在`JLabel`組件中使用 HTML 標簽。 我們使用`<br>`標簽來分隔行。 ```rb lyrics = "<html>It's way too late to think of<br> Someone I would call now<br> And neon signs got tired<br> ... ``` 我們定義了多行文字。 ```rb label = JLabel.new lyrics label.setFont Font.new "Georgia", Font::PLAIN, 14 ``` 在這里,我們創建標簽組件。 我們將其字體設置為 14 像素高的純喬治亞州。 ```rb 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`是一個組件,使用戶可以通過在有限的間隔內滑動旋鈕來以圖形方式選擇一個值。 我們的示例將顯示音量控制。 ```rb #!/usr/local/bin/jruby # ZetCode JRuby Swing tutorial # # In this program we use a JSlider # component to control volume images. # # author: Jan Bodnar # website: www.zetcode.com # last modified: December 2010 include Java import java.awt.Dimension import java.awt.BorderLayout import javax.swing.event.ChangeListener import javax.swing.JFrame import javax.swing.JSlider import javax.swing.JLabel import javax.swing.JPanel import javax.swing.BorderFactory import javax.swing.Box import javax.swing.BoxLayout import javax.swing.ImageIcon class ChangeEvent include ChangeListener def setLabel label @label = label end def setIcons mute, min, med, max @mute = mute @min = min @med = med @max = max end def stateChanged e sender = e.getSource value = sender.getValue if value == 0 @label.setIcon(@mute) elsif value > 0 and value <= 30 @label.setIcon(@min) elsif value > 30 and value < 80 @label.setIcon(@med) else @label.setIcon(@max) end end end class Example < JFrame def initialize super "JSlider" self.initUI end def initUI mute = ImageIcon.new "mute.png" min = ImageIcon.new "min.png" med = ImageIcon.new "med.png" max = ImageIcon.new "max.png" panel = JPanel.new panel.setLayout BoxLayout.new panel, BoxLayout::X_AXIS panel.setBorder BorderFactory.createEmptyBorder 40, 40, 40, 40 self.setLayout BorderLayout.new panel.add Box.createHorizontalGlue label = JLabel.new mute, JLabel::CENTER slider = JSlider.new 0, 150, 0 ce = ChangeEvent.new ce.setLabel label ce.setIcons mute, min, med, max slider.add_change_listener ce slider.setPreferredSize Dimension.new 150, 30 panel.add slider panel.add label panel.add Box.createRigidArea Dimension.new 5, 0 panel.add Box.createHorizontalGlue self.add panel, BorderLayout::CENTER self.pack self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE self.setSize 300, 200 self.setLocationRelativeTo nil self.setVisible true end end Example.new ``` 在代碼示例中,我們顯示了`JSlider`和`JLabel`。 通過拖動滑塊,我們可以更改標簽組件上的圖標。 我們有四個代表聲音各種狀態的圖像。 ```rb mute = ImageIcon.new "mute.png" ``` 在這里,我們創建一個圖像圖標。 ```rb panel.setLayout BoxLayout.new panel, BoxLayout::X_AXIS ``` 面板組件具有水平`BoxLayout`。 ```rb panel.setBorder BorderFactory.createEmptyBorder 40, 40, 40, 40 ``` 我們在面板周圍創建 40px 的邊框。 ```rb panel.add Box.createHorizontalGlue ``` 我們在左右兩側都放置了可調整大小的空間。 這是為了防止`JSlider`增長到不自然的大小。 ```rb label = JLabel.new mute, JLabel::CENTER ``` 該行創建一個具有指定圖像和水平對齊方式的`JLabel`實例。 默認情況下,標簽在其顯示區域中垂直居中。 ```rb slider = JSlider.new 0, 150, 0 ``` 這是一個`JSlider`構造器。 參數為最小值,最大值和當前值。 ```rb ce = ChangeEvent.new ce.setLabel label ce.setIcons mute, min, med, max ``` 創建一個`ChangeEvent`對象。 我們為此對象設置了標簽和圖標。 ```rb slider.add_change_listener ce ``` 每次我們移動滑塊時,都會調用`ChangeEvent`對象的`stateChanged`方法。 ```rb panel.add Box.createRigidArea Dimension.new 5, 0 ``` 我們在兩個組件之間放置一個 5px 的剛性空間。 當滑塊位于末端位置時,它們彼此之間過于靠近。 ```rb class ChangeEvent include ChangeListener ``` 這是一個`ChangeEvent`類,它實現了`ChangeListener`。 因此,此類必須實現`changeEvent`方法。 ```rb sender = e.getSource value = sender.getValue ``` 在`changeEvent`方法內部,我們獲取事件源。 它是產生事件的滑塊。 從發送者,我們獲得當前值。 ```rb if value == 0 @label.setIcon(@mute) ``` 如果該值等于零,我們將更新標簽以具有`mute.png`圖像。 ![JSlider](https://img.kancloud.cn/a5/ec/a5ec92e57b69e7d227e1f0ad7c50d1ca_261x142.jpg) 圖:`JSlider` ## `JToggleButton` `JToggleButton`是具有兩種狀態的按鈕。 已按下但未按下。 通過單擊可以在這兩種狀態之間切換。 在某些情況下此功能非常合適。 ```rb #!/usr/local/bin/jruby # ZetCode JRuby Swing tutorial # # This program uses toggle buttons to # change the background color of # a panel. # # author: Jan Bodnar # website: www.zetcode.com # last modified: December 2010 include Java import java.awt.Color import java.awt.Dimension import java.awt.event.ActionListener import javax.swing.JToggleButton import javax.swing.Box import javax.swing.BoxLayout import javax.swing.BorderFactory import javax.swing.JFrame import javax.swing.JPanel import javax.swing.border.LineBorder class Example < JFrame include ActionListener def initialize super "JToggleButton" self.initUI end def initUI self.setPreferredSize Dimension.new 280, 200 bottom = JPanel.new bottom.setLayout BoxLayout.new bottom, BoxLayout::X_AXIS bottom.setBorder BorderFactory.createEmptyBorder 20, 20, 20, 20 leftPanel = JPanel.new leftPanel.setLayout BoxLayout.new leftPanel, BoxLayout::Y_AXIS @display = JPanel.new @display.setPreferredSize Dimension.new 110, 110 @display.setBorder LineBorder.createGrayLineBorder @display.setBackground Color.black bottom.add @display redButton = JToggleButton.new "red" redButton.addActionListener self greenButton = JToggleButton.new "green" greenButton.addActionListener self blueButton = JToggleButton.new "blue" blueButton.addActionListener self blueButton.setMaximumSize greenButton.getMaximumSize redButton.setMaximumSize greenButton.getMaximumSize leftPanel.add redButton leftPanel.add Box.createRigidArea Dimension.new 25, 7 leftPanel.add greenButton leftPanel.add Box.createRigidArea Dimension.new 25, 7 leftPanel.add blueButton bottom.add leftPanel bottom.add Box.createRigidArea Dimension.new 20, 0 self.add bottom self.pack self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE self.setSize 300, 200 self.setLocationRelativeTo nil self.setVisible true end def actionPerformed e color = @display.getBackground red = color.getRed green = color.getGreen blue = color.getBlue if e.getActionCommand == "red" if red == 0 red = 255 else red = 0 end end if e.getActionCommand == "green" if green == 0 green = 255 else green = 0 end end if e.getActionCommand == "blue" if blue == 0 blue = 255 else blue = 0 end end setCol = Color.new red, green, blue @display.setBackground setCol end end Example.new ``` 在代碼示例中,我們使用三個切換按鈕來更改矩形組件的顏色。 ```rb class Example < JFrame include ActionListener ``` 該類實現`ActionListener`。 我們將在`Example`類的`actionPerformed`方法中執行一些操作。 ```rb redButton = JToggleButton.new "red" redButton.addActionListener self ``` 我們創建一個`JToggleButton`組件。 我們向按鈕添加一個動作監聽器。 動作監聽器是`Example`類。 當我們單擊`redButton`時,將調用`Example`類的`actionPerformed`方法。 ```rb blueButton.setMaximumSize greenButton.getMaximumSize redButton.setMaximumSize greenButton.getMaximumSize ``` 我們使三個按鈕的大小相等。 ```rb color = @display.getBackground red = color.getRed green = color.getGreen blue = color.getBlue ``` 我們確定顯示背景顏色的當前紅色,綠色,藍色部分。 ```rb if e.getActionCommand == "red" if red == 0 red = 255 else red = 0 end end ``` 我們確定切換了哪個按鈕,并相應地更新 RGB 值的顏色部分。 ```rb setCol = Color.new red, green, blue @display.setBackground setCol ``` 在此創建新的顏色,并將顯示面板更新為新的顏色。 ![JToggleButton](https://img.kancloud.cn/6b/3b/6b3bbc87fe2bdd1285cff74e4ad1091d_272x202.jpg) 圖:`JToggleButton` ## `JList` `JList`是顯示對象列表的組件。 它允許用戶選擇一項或多項。 ```rb #!/usr/local/bin/jruby # ZetCode JRuby Swing tutorial # # In this program, we show all # available fonts of a system in # a JList component. # # author: Jan Bodnar # website: www.zetcode.com # last modified: December 2010 include Java import java.awt.BorderLayout import java.awt.Dimension import java.awt.Font import java.awt.GraphicsEnvironment import javax.swing.JFrame import javax.swing.BorderFactory import javax.swing.JScrollPane import javax.swing.JPanel import javax.swing.JLabel import javax.swing.JList class Example < JFrame def initialize super "JList" initUI end def initUI panel = JPanel.new panel.setLayout BorderLayout.new panel.setBorder BorderFactory.createEmptyBorder 20, 20, 20, 20 ge = GraphicsEnvironment.getLocalGraphicsEnvironment fonts = ge.getAvailableFontFamilyNames list = JList.new fonts list.add_list_selection_listener do |e| sender = e.source if not e.getValueIsAdjusting name = sender.getSelectedValue font = Font.new name, Font::PLAIN, 13 @label.setFont font end end pane = JScrollPane.new pane.getViewport.add list pane.setPreferredSize Dimension.new 250, 200 panel.add pane @label = JLabel.new "Aguirre, der Zorn Gottes" @label.setFont Font.new "Serif", Font::PLAIN, 12 self.add @label, BorderLayout::SOUTH self.add panel self.pack self.setDefaultCloseOperation JFrame::EXIT_ON_CLOSE self.setLocationRelativeTo nil self.setVisible true end end Example.new ``` 在我們的示例中,我們將顯示`JList`和`JLabel`組件。 列表組件包含我們系統上所有可用字體系列名稱的列表。 如果我們從列表中選擇一項,則標簽將以我們選擇的字體顯示。 ```rb ge = GraphicsEnvironment.getLocalGraphicsEnvironment fonts = ge.getAvailableFontFamilyNames ``` 在這里,我們獲得系統上所有可能的字體系列名稱。 ```rb list = JList.new fonts ``` 我們創建`JList`組件的實例。 它將顯示所有字體系列名稱。 ```rb if not e.getValueIsAdjusting ``` 列表選擇中的事件被分組。 我們收到選擇和取消選擇事件。 為了僅過濾選擇事件,我們使用`getValueIsAdjusting`方法。 ```rb name = sender.getSelectedValue font = Font.new name, Font::PLAIN, 13 @label.setFont font ``` 我們得到所選項目并為標簽設置新字體。 ```rb pane = JScrollPane.new pane.getViewport.add list ``` 默認情況下,`JList`組件不可滾動。 我們將列表放入`JScrollPane`以使其可滾動。 ![JList component](https://img.kancloud.cn/f3/3a/f33ae6c0f2b1e68619e6a168d6c6aac1_292x287.jpg) 圖:`JList`組件 在 JRuby 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>

                              哎呀哎呀视频在线观看