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. 執行結果
文章標籤
全站熱搜