gpt4 book ai didi

java - 如何将 JLabel 添加到 JEditorPane?

转载 作者:搜寻专家 更新时间:2023-10-31 20:04:36 26 4
gpt4 key购买 nike

我正在尝试在 Swing 中扩展 StyledEditorKit,以便能够在编辑器中包含一个 JLabel。我能够做到这一点,这就是我到目前为止所得到的。在下图中,突出显示的文本 button 是 JLabel 类型,而其余文本是普通文本。

enter image description here

如您所见,标签呈现在比普通文本略低的位置。如何将其顶部与其余文本的顶部对齐?

下面是用于创建此标签元素的 View 代码:

class ComponentView(Element elem) {
@Override
protected Component createComponent() {
JLabel lbl = new JLabel("");
lbl.setOpaque(true);
lbl.setBackground(Color.red);
try {
int start = getElement().getStartOffset();
int end = getElement().getEndOffset();
String text = getElement().getDocument().getText(start, end - start);
lbl.setText(text);
} catch (BadLocationException e) {}
return lbl;
}
}

最佳答案

尝试调整 Component.getAlignmentY 以控制组件相对于文本基线的位置,如 ComponentView 中所建议的那样.

您也可以尝试使用 JTextPane 为嵌入式组件提供更简单的支持。可以使用 insertComponent() 添加组件方法。这是一个示例,它还演示了 setAlignmentY:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;

public class TextPaneDemo {
private static void createAndShowGUI() {
final JTextPane pane = new JTextPane();
pane.setText("Some text");

JButton buttonButton = new JButton("Insert label");
buttonButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JLabel label = new JLabel("label");
label.setAlignmentY(0.85f);
pane.insertComponent(label);
}
});

JPanel panel = new JPanel(new BorderLayout());
panel.add(buttonButton, BorderLayout.SOUTH);
panel.add(pane, BorderLayout.CENTER);

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.setSize(400, 200);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}

关于java - 如何将 JLabel 添加到 JEditorPane?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12151158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com