我正在嘗試渲染JTree葉以使其具有包含可編輯JTextArea的JPanel,以便用戶可以鍵入文本並能夠向下滾動,因爲它們添加文本,使用包含可編輯JTextArea的JPanel渲染JTree葉
並且還使用包裝來限制文本寬度,以便向下延伸以允許更多空間而不是左右滾動。
到目前爲止,我已經實現了以下內容,但是當我運行代碼時,它看起來很奇怪,好像有兩個葉子,默認的一個和渲染。任何類型的幫助,高度讚賞。
我只想知道我想做什麼是可以實現的,如果沒有,我可以在哪裏修改。
我不想更改圖標,只是葉。
import java.awt.Component;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.ItemEvent;
import java.util.EventObject;
import javax.swing.*;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellEditor;
import javax.swing.tree.TreeCellRenderer;
/**
*
* @author Razaractor
*/
class LeafRenderer extends AbstractCellEditor implements
TreeCellRenderer, TreeCellEditor {
//Text area to be place on JPanel
JTextArea text = new JTextArea();
DefaultTreeCellRenderer nonLeafRenderer = new DefaultTreeCellRenderer();
@Override
public Object getCellEditorValue() {
return text.getText();
}
@Override
public boolean isCellEditable(final EventObject event) {
return true;
}
@Override
public Component getTreeCellRendererComponent(
final JTree tree, final Object value,
final boolean selected,
final boolean expanded,
final boolean leaf,
final int row,
final boolean hasFocus) {
//Default leaf
Component render = nonLeafRenderer.getTreeCellRendererComponent(tree,
value, selected, expanded, leaf, row, hasFocus);
if (selected && leaf) {
final JPanel panel = new JPanel();
BoxLayout layout = new BoxLayout(panel, BoxLayout.X_AXIS);
panel.setLayout(layout);
text.setColumns(20);
text.setLineWrap(true);
text.setRows(5);
text.setWrapStyleWord(true);
text = new JTextArea(String.valueOf(value));
text.addComponentListener(new ComponentListener() {
@Override
public void componentResized(ComponentEvent e) {
panel.setSize(panel.getPreferredSize());
}
@Override
public void componentShown(ComponentEvent e) {
}
@Override
public void componentMoved(ComponentEvent e) {
}
@Override
public void componentHidden(ComponentEvent e) {
}
});
JScrollPane scroll = new JScrollPane(text);
panel.add(scroll);
render = panel;
return panel;
}
return render;
}
@Override
public Component getTreeCellEditorComponent(
final JTree tree,
final Object value,
final boolean isSelected,
final boolean expanded,
final boolean leaf,
final int row) {
Component editor = nonLeafRenderer.getTreeCellRendererComponent(tree,
value, true, expanded, leaf, row, true);
final JPanel p = new JPanel();
if (editor instanceof JPanel) {
editor = (JPanel) editor;
}
return editor;
}
public void itemStateChanged(ItemEvent itemEvent) {
if (stopCellEditing()) {
fireEditingStopped();
}
}
}
我們需要一些代碼。你能給我們一個[SSCCE](http://sscce.org/)嗎? – Keppil
很抱歉,我無法將它提前發佈,因爲當我嘗試將其提交給我的問題時遇到一些錯誤。我如何去發佈它?我有一些關於縮進的錯誤,所以我對於如何發佈有點失落。我也是這個論壇的新手。我將在答覆中發佈它,因爲它似乎是現在唯一可能的方式。請不便。 –
你應該可以編輯你的問題並添加代碼。使用'{}'按鈕讓代碼正確顯示。 – Keppil