스윙을 사용하여 채팅 UI를 디자인하려고하지만 메시지 부분에 적절한 들여 쓰기를 수행하는 방법이 너무 어리 석다. 후 여기에 스윙을 이용한 채팅 레이아웃 디자인
가 난 무엇의 예 : 여기난 그냥 함께 해킹 무엇을 (그냥 복사 및 붙여 넣기) : A와 창 크기를 조정하는
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
public class Scrap {
private static final int NICK_INDENT = 120;
private static final int MESSAGE_INDENT = NICK_INDENT + 10;
private static boolean applyHangingIndent = false;
public static void main(final String args[]) {
StyledDocument doc = new DefaultStyledDocument();
JTextPane pane = new JTextPane(doc) {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.drawLine(NICK_INDENT + 5, 0, NICK_INDENT + 5, getHeight());
}
};
TabStop[] tabs = new TabStop[2];
tabs[0] = new TabStop(NICK_INDENT, TabStop.ALIGN_RIGHT, TabStop.LEAD_NONE);
tabs[1] = new TabStop(MESSAGE_INDENT, TabStop.ALIGN_LEFT, TabStop.LEAD_NONE);
TabSet tabset = new TabSet(tabs);
StyleContext sc = StyleContext.getDefaultStyleContext();
AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.TabSet, tabset);
pane.setParagraphAttributes(aset, false);
insertString(doc, "\ta nickname:\tthis is the message blaa blaa blaa\n");
if (applyHangingIndent) {
applyHangingIndent(doc);
}
insertString(doc, "\tanother nickname:\there is another message blaa blaa blaablaa, try to resize the window\n");
if (applyHangingIndent) {
applyHangingIndent(doc);
}
insertString(doc, "\ta third nickname:\tnow try to set the applyHangingIndent to true!\n");
if (applyHangingIndent) {
applyHangingIndent(doc);
}
JFrame frame = new JFrame();
frame.setContentPane(new JScrollPane(pane));
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(600, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private static void insertString(StyledDocument doc, String str) {
try {
doc.insertString(doc.getLength(), str, null);
} catch (BadLocationException e) {
e.printStackTrace();
}
}
private static void applyHangingIndent(StyledDocument doc) {
SimpleAttributeSet sas = new SimpleAttributeSet();
int indent = MESSAGE_INDENT;
StyleConstants.setFirstLineIndent(sas, -indent);
StyleConstants.setLeftIndent(sas, indent);
doc.setParagraphAttributes(0, doc.getLength(), sas, false);
}
}
시도를 작은 크기.
이제 applyHangingIndent를 true로 설정하고 다시 크기를 조정하십시오.
하지만 내 첫 번째 줄 들여 쓰기 속성이 탭 스톱과 함께 작동하지 않는 것 같습니다.
누구나 들여 쓰기가 올바르게 작동하도록하는 방법에 대한 아이디어가 있습니까?
내 요구 사항에 잘 맞을 것 같아서 코드를 실험 해 보겠습니다. 감사! – n00bster
좋아요, 며칠 동안 코딩을 한 후 의도 한대로 모든 작업을 처리했습니다. 이 영리한 테이블을 만들어 주셔서 다시 한 번 감사드립니다! – n00bster
두 행이있는 표를 만들기위한 예제 코드를 추가 할 수 있습니까? 나는 완전히 언급 된 코드에서 길을 잃었다. –