close

1. 話嘴向左之泡泡對話框程式範例

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.geom.Area;
import java.awt.geom.RoundRectangle2D;

import javax.swing.JPanel;

/**
 *
 * @author Elsa
 */
public class LeftArrowBubble extends JPanel {
    private int strokeThickness = 5;
    private int padding = strokeThickness / 2;
    private int arrowSize = 6;
    private int radius = 10;
    private Color bubblecolor;
    
    public LeftArrowBubble() {
        bubblecolor = new Color(255, 199, 143);
    }

    public void setBubbleColor(Color color) {
        this.bubblecolor = color;
    }
    
    public Color getBubbleColor() {
        return bubblecolor;
    }
    
    @Override
    protected void paintComponent(final Graphics g) {
        final Graphics2D graphics2D = (Graphics2D) g;
        // 1.設置圖形之外框線條為具平滑線條(非鋸齒狀)
        RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        graphics2D.setRenderingHints(qualityHints);
        // 2.設置圖形之背景顏色與線條粗組
        graphics2D.setColor(getBubbleColor());
        graphics2D.setStroke(new BasicStroke(strokeThickness));
        
        // 3.繪製具圓角之方框範圍
        int x = padding + strokeThickness + arrowSize;
        int width = getWidth() - arrowSize - (strokeThickness * 2);
        int height = getHeight() - strokeThickness;
        graphics2D.fillRect(x, padding, width, height);
        RoundRectangle2D.Double rect = new RoundRectangle2D.Double(x, padding, width, height, radius, radius);
        // 4.繪製對話之話嘴的部分
        Polygon arrow = new Polygon();
        arrow.addPoint(14, 6);
        arrow.addPoint(arrowSize + 2, 10);
        arrow.addPoint(14, 12);
        // 5.將二個圖形加入 area中,並利用 draw() 方法畫出指定的圖形
        Area area = new Area(rect);
        area.add(new Area(arrow));
        graphics2D.draw(area);
    }
}

 

2. 話嘴向右之泡泡對話框程式範例

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.RenderingHints;
import java.awt.geom.Area;
import java.awt.geom.RoundRectangle2D;

import javax.swing.JPanel;

/**
 *
 * @author Elsa
 */
public class RightArrowBubble extends JPanel {
    private int strokeThickness = 5;
    private int padding = strokeThickness / 2;
    private int arrowSize = 6;
    private int radius = 10;
    private Color bubblecolor;
    
    public RightArrowBubble() {
        bubblecolor = new Color(255,234,215);
    }

    public void setBubbleColor(Color color) {
        this.bubblecolor = color;
    }
    
    public Color getBubbleColor() {
        return bubblecolor;
    }
    
    @Override
    protected void paintComponent(final Graphics g) {
        final Graphics2D graphics2D = (Graphics2D) g;
        // 1.設置圖形之外框線條為具平滑線條(非鋸齒狀)
        RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        graphics2D.setRenderingHints(qualityHints);
        // 2.設置圖形之背景顏色與線條粗組
        graphics2D.setColor(getBubbleColor());
        graphics2D.setStroke(new BasicStroke(strokeThickness));
        
        // 3.繪製具圓角之方框範圍
        int width = getWidth() - arrowSize - (strokeThickness * 2);
        int height = getHeight() - strokeThickness;
        graphics2D.fillRect(padding, padding, width, height);
        RoundRectangle2D.Double rect = new RoundRectangle2D.Double(padding, padding, width, height, radius, radius);
        // 4.繪製對話之話嘴的部分
        Polygon arrow = new Polygon();
        arrow.addPoint(width, 6);
        arrow.addPoint(width + arrowSize, 10);
        arrow.addPoint(width, 12);
        // 5.將二個圖形加入 area中,並利用 draw() 方法畫出指定的圖形
        Area area = new Area(rect);
        area.add(new Area(arrow));
        graphics2D.draw(area);
    }
}

 

3. 主執行之程式範例

import com.ruten.ChatRoom.Components.LeftArrowBubble;
import com.ruten.ChatRoom.Components.RightArrowBubble;
import java.awt.BorderLayout;
import java.awt.Insets;
import javax.swing.JTextArea;

/** 
 * 
 * @author Elsa 
 */
public class ArrowBubbleDemo extends java.awt.Dialog {    
    LeftArrowBubble leftArrowBubble = new LeftArrowBubble();
    RightArrowBubble rightArrowBubble = new RightArrowBubble();
    JTextArea txaMsg = new JTextArea();

   /**
    * Creates new form ArrowBubbleDemo
    */
    public ArrowBubbleDemo(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        txaMsg.setLineWrap(true);
        txaMsg.setOpaque(false);
        txaMsg.setEditable(false);
        txaMsg.setMargin(new Insets(10, 25, 10, 25));
        txaMsg.setText("可以把文字放到這裡面來哦~~\nTest123");
        leftArrowBubble.setLayout(new BorderLayout());
        leftArrowBubble.add(txaMsg, BorderLayout.CENTER);
        add(leftArrowBubble, java.awt.BorderLayout.CENTER);
    }

 

4. 執行結果

執行結果.png

 

 

 

 

arrow
arrow

    Elsa 發表在 痞客邦 留言(0) 人氣()