<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 功能強大 支持多語言、二開方便! 廣告
                # Jython Swing 中的繪圖 > 原文: [http://zetcode.com/gui/jythonswing/painting/](http://zetcode.com/gui/jythonswing/painting/) 在 Jython Swing 編程教程的這一部分中,我們將進行繪圖。 我們使用繪圖來創建圖表,自定義組件或創建游戲。 要進行繪圖,我們使用 Swing 工具包提供的繪圖 API。 繪圖是在`paintComponent()`方法中完成的。 在繪圖過程中,我們使用`Graphics2D`對象。 它是一個圖形上下文,允許應用繪制到組件上。 它是渲染二維形狀,文本和圖像的基礎類。 ## 色彩 顏色是代表紅色,綠色和藍色(RGB)強度值的組合的對象。 我們使用`Color`類在 Swing 中處理顏色。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial This program draws ten rectangles filled with different colors. author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import Color from javax.swing import JFrame from javax.swing import JPanel class Canvas(JPanel): def __init__(self): super(Canvas, self).__init__() def paintComponent(self, g): self.drawColorRectangles(g) def drawColorRectangles(self, g): g.setColor(Color(125, 167, 116)) g.fillRect(10, 15, 90, 60) g.setColor(Color(42, 179, 231)) g.fillRect(130, 15, 90, 60) g.setColor(Color(70, 67, 123)) g.fillRect(250, 15, 90, 60) g.setColor(Color(130, 100, 84)) g.fillRect(10, 105, 90, 60) g.setColor(Color(252, 211, 61)) g.fillRect(130, 105, 90, 60) g.setColor(Color(241, 98, 69)) g.fillRect(250, 105, 90, 60) g.setColor(Color(217, 146, 54)) g.fillRect(10, 195, 90, 60) g.setColor(Color(63, 121, 186)) g.fillRect(130, 195, 90, 60) g.setColor(Color(31, 21, 1)) g.fillRect(250, 195, 90, 60) class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.canvas = Canvas() self.getContentPane().add(self.canvas) self.setTitle("Colors") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setSize(360, 300) self.setLocationRelativeTo(None) self.setVisible(True) if __name__ == '__main__': Example() ``` 在代碼示例中,我們繪制了九個矩形,并用不同的顏色值填充它們。 ```py def paintComponent(self, g): ``` 在大多數情況下,自定義繪圖是在`paintComponent()`中完成的。 `g`參數是圖形上下文。 我們稱此對象為繪圖操作。 ```py g.setColor(Color(125, 167, 116)) ``` 我們將上下文的當前顏色設置為指定的顏色。 使用此圖形上下文的所有后續圖形操作均使用此指定的顏色。 ```py g.fillRect(10, 15, 90, 60) ``` 我們使用上面指定的顏色值填充位于`x = 10`,`y = 15`且寬度`= 90`和高度`= 60`的矩形。 ![Colors](https://img.kancloud.cn/c5/73/c573bbd56762becf3f7255f5a7a90593_363x309.jpg) 圖:顏色 ## 形狀 Swing 繪圖 API 可以繪制各種形狀。 以下編程代碼示例將顯示其中的一些。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial This program draws basic shapes author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import Color from java.awt import RenderingHints from java.awt.geom import Ellipse2D from javax.swing import JFrame from javax.swing import JPanel class Canvas(JPanel): def __init__(self): super(Canvas, self).__init__() def paintComponent(self, g): self.drawShapes(g) def drawShapes(self, g): g.setColor(Color(150, 150, 150)) rh = RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON) rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY) g.setRenderingHints(rh) g.fillRect(20, 20, 50, 50) g.fillRect(120, 20, 90, 60) g.fillRoundRect(250, 20, 70, 60, 25, 25) g.fill(Ellipse2D.Double(10, 100, 80, 100)) g.fillArc(120, 130, 110, 100, 5, 150) g.fillOval(270, 130, 50, 50) class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.canvas = Canvas() self.getContentPane().add(self.canvas) self.setTitle("Shapes") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setSize(350, 250) self.setLocationRelativeTo(None) self.setVisible(True) if __name__ == '__main__': Example() ``` 在此代碼示例中,我們在窗口上繪制了六個不同的形狀。 正方形,矩形,圓角矩形,橢圓形,弧形和橢圓形。 我們不會繪制形狀的輪廓,但是會用灰色填充形狀的內部空間。 ```py rh = RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON) ``` 借助渲染提示,我們可以控制繪圖的質量。 在上面的代碼中,我們實現了抗鋸齒。 使用抗鋸齒,形狀更平滑。 ```py g.setColor(Color(150, 150, 150)) ``` 我們將以某種灰色繪圖。 ```py g.fillRect(20, 20, 50, 50) g.fillRect(120, 20, 90, 60) g.fillRoundRect(250, 20, 70, 60, 25, 25) ``` 在這里,我們繪制一個矩形,一個正方形和一個圓角矩形。 這些方法中的前四個參數是 x,y 坐標以及寬度和高度。 `fillRoundRect()`的最后兩個參數是四個角處圓弧的水平和垂直直徑。 ```py g.fill(Ellipse2D.Double(10, 100, 80, 100)) g.fillArc(120, 130, 110, 100, 5, 150) g.fillOval(270, 130, 50, 50) ``` 這三條線繪制一個橢圓,一個弧形和一個橢圓形。 ![Shapes](https://img.kancloud.cn/95/02/9502cba04079b2a58d423e3f9267b808_350x250.jpg) 圖:形狀 ## 透明矩形 透明性是指能夠透視材料的質量。 了解透明度的最簡單方法是想象一塊玻璃或水。 從技術上講,光線可以穿過玻璃,這樣我們就可以看到玻璃后面的物體。 在計算機圖形學中,我們可以使用 alpha 合成來實現透明效果。 Alpha 合成是將圖像與背景組合以創建部分透明外觀的過程。 合成過程使用 Alpha 通道。 (wikipedia.org,answers.com) ```py """ ZetCode Jython Swing tutorial This program draws ten rectangles with different levels of transparency. author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import AlphaComposite from java.awt import Color from javax.swing import JFrame from javax.swing import JPanel class Canvas(JPanel): def __init__(self): super(Canvas, self).__init__() def paintComponent(self, g): self.drawRectangles(g) def drawRectangles(self, g): g.setColor(Color.BLUE) for i in range(1, 11): g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, i * 0.1)) g.fillRect(50 * i, 20, 40, 40) class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.canvas = Canvas() self.getContentPane().add(self.canvas) self.setTitle("Transparent rectangles") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setSize(590, 120) self.setLocationRelativeTo(None) self.setVisible(True) if __name__ == '__main__': Example() ``` 在示例中,我們將繪制十個具有不同透明度級別的矩形。 ```py g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, i * 0.1)) ``` `AlphaComposite`類實現基本的 alpha 合成規則。 ![Transparent rectangles](https://img.kancloud.cn/74/1d/741dace54ad1347dd09c35b676a67d30_590x120.jpg) 圖:透明矩形 ## 甜甜圈形狀 在下面的示例中,我們通過旋轉一堆橢圓來創建復雜的形狀。 仿射變換由零個或多個線性變換(旋轉,縮放或剪切)和平移(移位)組成。 `AffineTransform`是 Swing 中用于執行仿射變換的類。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial In this program, we create a donut shape. author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import BasicStroke from java.awt import Color from java.awt import RenderingHints from java.awt.geom import AffineTransform from java.awt.geom import Ellipse2D from javax.swing import JFrame from javax.swing import JPanel import math class Canvas(JPanel): def __init__(self): super(Canvas, self).__init__() def paintComponent(self, g): self.drawDonutShape(g) def drawDonutShape(self, g): rh = RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON) rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY) g.setRenderingHints(rh) size = self.getSize() w = size.getWidth() h = size.getHeight() e = Ellipse2D.Double(0, 0, 80, 130) g.setStroke(BasicStroke(1)) g.setColor(Color.gray) for deg in range(0, 360, 5): at = AffineTransform.getTranslateInstance(w / 2, h / 2) at.rotate(math.radians(deg)) g.draw(at.createTransformedShape(e)) class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.canvas = Canvas() self.getContentPane().add(self.canvas) self.setTitle("Donut") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setSize(350, 320) self.setLocationRelativeTo(None) self.setVisible(True) if __name__ == '__main__': Example() ``` 在此示例中,我們創建一個甜甜圈。 形狀類似于曲奇,因此得名“甜甜圈”。 甜甜圈在窗口中居中。 ```py size = self.getSize() w = size.getWidth() h = size.getHeight() ``` 在這里,我們確定窗口的寬度和高度。 我們需要這些值來使甜甜圈形狀居中。 ```py e = Ellipse2D.Double(0, 0, 80, 130) ``` 我們創建一個橢圓形。 我們將旋轉此橢圓以創建甜甜圈形狀。 ```py g.setStroke(BasicStroke(1)) g.setColor(Color.gray) ``` 我們為形狀的輪廓設置筆觸和顏色。 ```py for deg in range(0, 360, 5): ``` 我們繪制一個橢圓對象 72 次。 每次,我們再將橢圓旋轉 5 度。 這將創建我們的甜甜圈形狀。 ```py at = AffineTransform.getTranslateInstance(w / 2, h / 2) at.rotate(math.radians(deg)) g.draw(at.createTransformedShape(e)) ``` 在`AffineTransform`類的幫助下,我們將圖形轉換到窗口的中心。 然后我們進行旋轉。 `createTransformedShape()`方法會將這些仿射變換應用于橢圓。 然后使用`draw()`方法繪制變換后的橢圓。 ## 繪制文字 在最后一個示例中,我們將在窗口上繪制文本。 ```py #!/usr/local/bin/jython # -*- coding: utf-8 -*- """ ZetCode Jython Swing tutorial This program draws lyrics of a song on the window. author: Jan Bodnar website: www.zetcode.com last modified: November 2010 """ from java.awt import Font from java.awt import RenderingHints from javax.swing import JFrame from javax.swing import JPanel class Canvas(JPanel): def __init__(self): super(Canvas, self).__init__() def paintComponent(self, g): self.drawLyrics(g) def drawLyrics(self, g): rh = RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON) g.setRenderingHints(rh) g.setFont(Font("Purisa", Font.PLAIN, 13)) g.drawString("Most relationships seem so transitory", 20, 30) g.drawString("They're all good but not the permanent one", 20, 60) g.drawString("Who doesn't long for someone to hold", 20, 90) g.drawString("Who knows how to love you without being told", 20, 120) g.drawString("Somebody tell me why I'm on my own", 20, 150) g.drawString("If there's a soulmate for everyone", 20, 180) class Example(JFrame): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.canvas = Canvas() self.getContentPane().add(self.canvas) self.setTitle("Soulmate") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setSize(400, 250) self.setLocationRelativeTo(None) self.setVisible(True) if __name__ == '__main__': Example() ``` 我們在窗口上畫一首歌的歌詞。 ```py rh = RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON) g.setRenderingHints(rh) ``` 我們在畫上應用文字抗鋸齒。 ```py g.setFont(Font("Purisa", Font.PLAIN, 13)) ``` 我們指定字體名稱,樣式和磅值,并在其中繪制歌詞。 ```py g.drawString("Most relationships seem so transitory", 20, 30) ``` `drawString()`方法繪制文本。 ![Drawing text](https://img.kancloud.cn/ab/2d/ab2d64b8f143c10f85d418c14168e2d0_400x250.jpg) 圖:繪制文本 在 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>

                              哎呀哎呀视频在线观看