Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package anlavn.ui;
// Make By Bình An || AnLaVN || KatoVN
import com.k33ptoo.components.KGradientPanel;
import java.awt.*;
import javax.swing.*;
import org.netbeans.lib.awtextra.AbsoluteConstraints;
/**Lớp ChatBox hỗ trợ hiển thị hộp tin nhắn như messenger.
* @author AnLaVN - https://github.com/AnLaVN
*/
public class ChatBox extends JScrollPane{
private final Chat chat = new Chat();
/**Tạo một hộp tin nhắn mặc định. Ðể tùy chỉnh giao diện, hãy tham khảo các phương thức bên dưới.
* @see ChatBox#setFontSize(java.awt.Font)
* @see ChatBox#setBorderRadius(int)
* @see ChatBox#setNotifiColor(java.awt.Color)
* @see ChatBox#setRightBubble(java.awt.Color, java.awt.Color, int)
* @see ChatBox#setLeftBubble(java.awt.Color, java.awt.Color, int)
*/
public ChatBox() {
this.setHorizontalScrollBar(null);
this.setVerticalScrollBar(new anlavn.ui.ScrollBar());
this.setBorder(null);
this.setViewportBorder(null);
this.setViewportView(chat);
}
/**Sử dụng phương thức này để thêm bong bóng text ở bên phải hộp tin nhắn.
* @param message là tin nhắn bạn muốn thêm.
*/
public void addRightBubble(String message) { chat.addRightBubble(message); }
/**Sử dụng phương thức này để thêm bong bóng text ở bên trái hộp tin nhắn.
* @param message là tin nhắn bạn muốn thêm.
*/
public void addLeftBubble(String message) { chat.addLeftBubble(message); }
/**Sử dụng phương thức này để thêm thông báo trong hộp tin nhắn.
* @param message là thông báo bạn muốn thêm.
*/
public void addNotifiBox(String message) { chat.addNotifiBox(message); }
/** Sử dụng phương thức này để tùy chỉnh kích thước phông chữ của tin nhắn.
* @param font là phông chữ mong muốn của bạn.
*/
public void setFontSize(Font font) { chat.setFontSize(font); }
/**Sử dụng phương thức này để tùy chỉnh bán kính đường viền của bong bóng tin nhắn.
* @param BorderRadius là bán kính đường viền mong muốn của bạn.
*/
public void setBorderRadius(int BorderRadius) { chat.setBorderRadius(BorderRadius); }
/**Sử dụng phương thức này để tùy chỉnh màu của thông báo.
* @param NotifiColor là màu mong muốn của bạn.
*/
public void setNotifiColor(Color NotifiColor) { chat.setNotifiColor(NotifiColor); }
/**Sử dụng phương thức này để tùy chỉnh bong bóng ở bên phải hộp tin nhắn.
* @param StartColor là màu cuối của màu loang ở bên trái.
* @param EndColor là màu cuối của màu loang ở bên phải.
* @param GradientFocus là vị trí mà màu loang nên tập trung (chấp nhận giá trị âm)
*/
public void setRightBubble(Color StartColor, Color EndColor, int GradientFocus) {
chat.setRightBubble(StartColor, EndColor, GradientFocus);
}
/**Sử dụng phương thức này để tùy chỉnh bong bóng ở bên trái hộp tin nhắn.
* @param StartColor là màu cuối của màu loang ở bên trái.
* @param EndColor là màu cuối của màu loang ở bên phải.
* @param GradientFocus là vị trí mà màu loang nên tập trung (chấp nhận giá trị âm)
*/
public void setLeftBubble(Color StartColor, Color EndColor, int GradientFocus) {
chat.setLeftBubble(StartColor, EndColor, GradientFocus);
}
@Override protected void paintComponent(Graphics g) { super.paintComponent(g); }
@Override public void setLayout(LayoutManager mgr) { super.setLayout(mgr); }
private class Chat extends JPanel {
private int preHeight = 0, line, X, Y, widthPane, widthText, heightText,
BorderRadius = 20,
RightGradientFocus = 180,
LeftGradientFocus = 200;
private Color
RightStartColor = new Color(67, 156, 251),
RightEndColor = new Color(241, 135, 251),
LeftStartColor = new Color(150, 198, 234),
LeftEndColor = new Color(181, 151, 246),
NotifiColor = new Color(150, 150, 150);
private final Color Blind = new Color(0,0,0,0);
private final JLabel temp = new JLabel();
private Font font = new Font("Tahoma", 0, 17);
private Chat() {
this.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
this.setBorder(null);
}
private void setFontSize(Font font) {
this.font = font;
}
private void setBorderRadius(int BorderRadius) {
this.BorderRadius = BorderRadius;
}
private void setNotifiColor(Color NotifiColor) {
this.NotifiColor = NotifiColor;
}
private void setRightBubble(Color StartColor, Color EndColor, int GradientFocus){
RightStartColor = StartColor;
RightEndColor = EndColor;
RightGradientFocus = GradientFocus;
}
private void setLeftBubble(Color StartColor, Color EndColor, int GradientFocus) {
LeftStartColor = StartColor;
LeftEndColor = EndColor;
LeftGradientFocus = GradientFocus;
}
private void rePaint(Rectangle aRect) {
this.scrollRectToVisible(aRect);
super.validate();
super.repaint();
}
private void addRightBubble(String text){
text = text.trim();
if(!text.equals("")){
KGradientPanel RightBubble = new KGradientPanel();
JTextArea txt = new JTextArea();
txt.setFont(font);
txt.setText(text);
//Thuat toan tinh toan kich thuoc, vi tri cho chat bubble
temp.setFont(font);
temp.setText(text);
widthText = temp.getMaximumSize().width + 5;
heightText= temp.getMaximumSize().height;
line = widthText < widthPane - 50 ? 1 : ((widthText / (widthPane - 2*50)) + 1);
X = widthText < widthPane ? widthPane - widthText - 40 : 60;
Y = Y + preHeight + 25;
preHeight = (line * heightText);
//Tao chat bubble
RightBubble.setkBorderRadius(BorderRadius); txt.setBorder(null); //txt.setColumns(20);
RightBubble.setkStartColor(RightStartColor); txt.setWrapStyleWord(true); //txt.setRows(1000);
RightBubble.setkEndColor(RightEndColor); txt.setLineWrap(true); txt.setEditable(false);
RightBubble.setkGradientFocus(RightGradientFocus); txt.setEditable(false);
RightBubble.setBackground(Blind); txt.setBackground(Blind);
javax.swing.GroupLayout cboxLayout = new javax.swing.GroupLayout(RightBubble);
RightBubble.setLayout(cboxLayout);
cboxLayout.setHorizontalGroup(
cboxLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(cboxLayout.createSequentialGroup()
.addContainerGap()
.addComponent(txt, javax.swing.GroupLayout.DEFAULT_SIZE, widthText < widthPane ? widthText : widthPane - 2*50, Short.MAX_VALUE)
.addContainerGap())
);
cboxLayout.setVerticalGroup(
cboxLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(cboxLayout.createSequentialGroup()
.addContainerGap()
.addComponent(txt, javax.swing.GroupLayout.DEFAULT_SIZE, heightText, Short.MAX_VALUE)
.addContainerGap())
);
//setLocationRelativeTo(null);
this.add(RightBubble, new AbsoluteConstraints(X, Y, -1, -1));
Rectangle aRect = new Rectangle();
aRect.y = Y + preHeight + 100;
rePaint(aRect);
}
}
private void addLeftBubble(String text) {
text = text.trim();
if(!text.equals("")){
KGradientPanel LeftBubble = new KGradientPanel();
JTextArea txt = new JTextArea();
txt.setFont(font);
txt.setText(text.trim());
//Thuat toan tinh toan kich thuoc, vi tri cho chat bubble
temp.setFont(font);
temp.setText(text.trim());
widthText = temp.getMaximumSize().width + 5;
heightText= temp.getMaximumSize().height;
line = widthText < widthPane - 50 ? 1 : ((widthText / (widthPane - 2*50)) + 1);
X = 20;
Y = Y + preHeight + 25;
preHeight = (line * heightText);
//Tao chat bubble
LeftBubble.setkBorderRadius(BorderRadius); txt.setBorder(null); //txt.setColumns(20);
LeftBubble.setkStartColor(LeftStartColor); txt.setWrapStyleWord(true); //txt.setRows(1000);
LeftBubble.setkEndColor(LeftEndColor); txt.setLineWrap(true);
LeftBubble.setkGradientFocus(LeftGradientFocus); txt.setEditable(false);
LeftBubble.setBackground(Blind); txt.setBackground(Blind);
javax.swing.GroupLayout cboxLayout = new javax.swing.GroupLayout(LeftBubble);
LeftBubble.setLayout(cboxLayout);
cboxLayout.setHorizontalGroup(
cboxLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(cboxLayout.createSequentialGroup()
.addContainerGap()
.addComponent(txt, javax.swing.GroupLayout.DEFAULT_SIZE, widthText < widthPane ? widthText : widthPane - 2*50, Short.MAX_VALUE)
.addContainerGap())
);
cboxLayout.setVerticalGroup(
cboxLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(cboxLayout.createSequentialGroup()
.addContainerGap()
.addComponent(txt, javax.swing.GroupLayout.DEFAULT_SIZE, heightText, Short.MAX_VALUE)
.addContainerGap())
);
//setLocationRelativeTo(null);
this.add(LeftBubble, new AbsoluteConstraints(X, Y, -1, -1));
Rectangle aRect = new Rectangle();
aRect.y = Y + preHeight + 100;
rePaint(aRect);
}
}
private void addNotifiBox(String text) {
text = text.trim();
if(!text.equals("")){
JLabel label = new JLabel(text.trim());
label.setBackground(Blind);
label.setFont(font);
label.setForeground(NotifiColor);
label.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
Y = Y + preHeight + 20;
preHeight = heightText;
this.add(label, new AbsoluteConstraints(0, Y, widthPane, heightText));
Rectangle aRect = new Rectangle();
aRect.y = Y + 50;
rePaint(aRect);
}
}
@Override protected void paintComponent(Graphics g) { widthPane = getWidth(); }
@Override public final void setLayout(LayoutManager mgr){ super.setLayout(mgr); }
}
}