格式化 Jlabel - JTextBox
Format Jlabel - JTextBox
我有一个简单的二叉树打印机:
public String displayTree(){
if(root != null){
return this.toString(new StringBuilder(), true, new StringBuilder(), root).toString();
}else{
return "Empty tree";
}
}
private StringBuilder toString(StringBuilder prefix, boolean isLeft, StringBuilder sb, BinaryNode<T> node) {
if(node.getRight() !=null) {
toString(new StringBuilder().append(prefix).append(esIzquierdo ? "│ " : " "), false, sb, node.getRight());
}
sb.append(prefix).append(isLeft? "└── " : "┌── ").append(node.getItem().toString()).append("\n");
if(node.getLeft() != null) {
toString(new StringBuilder().append(prefix).append(esIzquierdo ? " " : "│ "), true, sb, node.getLeft());
}
return sb;
}
如果我在 eclipse 控制台中 运行 它,我得到:
│ ┌── K
│ ┌── F
│ │ │ ┌── L
│ │ └── J
│ ┌── C
│ │ │ ┌── I
│ │ └── E
└── A
│ ┌── H
│ ┌── D
│ │ └── G
└── B
我的问题是我试图在 UI 上显示它,所以当我把它放在 JLabel 上时它不起作用,我尝试用 < html 格式化它> 而不是 \n -> < br > 但它也不起作用,最好的方法是什么?我已尝试使用 JFormattedTextField,但它似乎不起作用。
谢谢。
您可以通过多种方式实现这一目标。您可以创建一个可以绘制结构的自定义组件;你可以使用 JTree
或者你可以使用像 JTextArea
.
这样的东西
诀窍是确保您使用的是固定宽度的字体
String tree = "│ ┌── K\n"
+ "│ ┌── F\n"
+ "│ │ │ ┌── L\n"
+ "│ │ └── J\n"
+ "│ ┌── C\n"
+ "│ │ │ ┌── I\n"
+ "│ │ └── E\n"
+ "└── A\n"
+ " │ ┌── H\n"
+ " │ ┌── D\n"
+ " │ │ └── G\n"
+ " └── B";
JTextArea ta = new JTextArea(15, 25);
ta.setText(tree);
ta.setFont(new Font("Monospaced", Font.PLAIN, 13));
JFrame frame = new JFrame();
frame.add(new JScrollPane(ta));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
我有一个简单的二叉树打印机:
public String displayTree(){
if(root != null){
return this.toString(new StringBuilder(), true, new StringBuilder(), root).toString();
}else{
return "Empty tree";
}
}
private StringBuilder toString(StringBuilder prefix, boolean isLeft, StringBuilder sb, BinaryNode<T> node) {
if(node.getRight() !=null) {
toString(new StringBuilder().append(prefix).append(esIzquierdo ? "│ " : " "), false, sb, node.getRight());
}
sb.append(prefix).append(isLeft? "└── " : "┌── ").append(node.getItem().toString()).append("\n");
if(node.getLeft() != null) {
toString(new StringBuilder().append(prefix).append(esIzquierdo ? " " : "│ "), true, sb, node.getLeft());
}
return sb;
}
如果我在 eclipse 控制台中 运行 它,我得到:
│ ┌── K
│ ┌── F
│ │ │ ┌── L
│ │ └── J
│ ┌── C
│ │ │ ┌── I
│ │ └── E
└── A
│ ┌── H
│ ┌── D
│ │ └── G
└── B
我的问题是我试图在 UI 上显示它,所以当我把它放在 JLabel 上时它不起作用,我尝试用 < html 格式化它> 而不是 \n -> < br > 但它也不起作用,最好的方法是什么?我已尝试使用 JFormattedTextField,但它似乎不起作用。
谢谢。
您可以通过多种方式实现这一目标。您可以创建一个可以绘制结构的自定义组件;你可以使用 JTree
或者你可以使用像 JTextArea
.
诀窍是确保您使用的是固定宽度的字体
String tree = "│ ┌── K\n"
+ "│ ┌── F\n"
+ "│ │ │ ┌── L\n"
+ "│ │ └── J\n"
+ "│ ┌── C\n"
+ "│ │ │ ┌── I\n"
+ "│ │ └── E\n"
+ "└── A\n"
+ " │ ┌── H\n"
+ " │ ┌── D\n"
+ " │ │ └── G\n"
+ " └── B";
JTextArea ta = new JTextArea(15, 25);
ta.setText(tree);
ta.setFont(new Font("Monospaced", Font.PLAIN, 13));
JFrame frame = new JFrame();
frame.add(new JScrollPane(ta));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);