- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前有一个 JLabel
嵌入在 JTextPane
中,使用以下方法:
import javax.swing.*;
import javax.swing.text.*;
public class MainFrame
{
JFrame mainFrame = new JFrame("Main Frame");
JTextPane textPane = new JTextPane();
public MainFrame()
{
String[] components = {"Title", "\n"};
String[] styles = {"LABEL_ALIGN", "LEFT_ALIGN"};
StyledDocument sd = textPane.getStyledDocument();
Style DEFAULT_STYLE = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
Style LEFT_STYLE = sd.addStyle("LEFT_ALIGN", DEFAULT_STYLE);
StyleConstants.setAlignment(LEFT_STYLE, StyleConstants.ALIGN_LEFT);
Style CENTER_STYLE = sd.addStyle("CENTER_ALIGN", DEFAULT_STYLE);
StyleConstants.setAlignment(CENTER_STYLE, StyleConstants.ALIGN_CENTER);
JLabel titleLbl = new JLabel("Title");
Style LABEL_STYLE = sd.addStyle("LABEL_ALIGN", DEFAULT_STYLE);
StyleConstants.setAlignment(LABEL_STYLE, StyleConstants.ALIGN_CENTER);
StyleConstants.setComponent(LABEL_STYLE, titleLbl);
for(int i = 0; i < components.length; i++)
{
try
{
sd.insertString(sd.getLength(), components[i], sd.getStyle(styles[i]));
sd.setLogicalStyle(sd.getLength(), sd.getStyle(styles[i]));
}
catch(BadLocationException e)
{
e.printStackTrace();
}
}
mainFrame.add(textPane);
mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
mainFrame.setLocationRelativeTo(null);
mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
mainFrame.pack();
mainFrame.setVisible(true);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(MainFrame::new);
}
}
如何使标签不可删除?因为每当我按住退格键时,标签最终都会从 JTextPane
最佳答案
您也许可以使用 NavigationFilter
来防止删除文本 Pane 开头的组件。查看:How to make part of a JTextField uneditable有关此方法的示例。在本例中,标签代表单个字符,因此前缀长度将设置为 1。或者您可以只使用前缀概念本身,甚至不使用 JLabel。
否则,您也许可以创建自定义DocumentFilter
。查看 Swing 教程中关于 Implementing a DocumentFilter 的部分了解基础知识。
因此您需要跟踪组件位置的偏移量。然后,在过滤器的 remove(...)
方法中,您需要检查是否要删除偏移量范围内的数据。如果是这样,您将忽略删除。
当然,如果您在标签之前添加或删除文本,则偏移量可以动态更改,因此您也需要对其进行管理。
或者您可以查看 Protected Text Component它试图为您管理所有这些。
关于java - 使 JTextPane 中的 JLable 不可删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35371113/
String str1 ="C:\Users\mehdi\Documents\NetBeansProjects\project1\src\res\1 (21).png "; String str2 =
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在为一个项目制作一个启动屏幕,它显示一个图标并显示一个加载栏。加载栏等有效。这是图像加载和分配代码: initComponents(); BufferedImage buff = null; tr
我有一个由许多不同的 JPanel 组成的 CardLayout,我可以随意显示它们。该GUI链接到后端,GUI的目的是允许用户操作存储在后端的数据。 问题是,当用户在后端更改某些数据时,我的 JLa
我有 3 个 JLable,并且我向 l3 添加了单击时的功能,将 JLabel 文本设置为值存储到数组中 (ans.get(0,0)) JLabel l1 = new JLabel("Obtener
我正在使用 Java 为足球模拟器制作 UI,并且有一段时间遇到了一个问题。我正在尝试将用户输入的团队转移到另一个 JFrame 上的另一个 JLabel。 我已经尝试过 getter 和 sette
我制作了一个可包装的JLabel,它在标签内显示多行文本消息。标签和文本(即前景和背景)始终可见。 现在我想更改 JLabel ,使其仅在鼠标悬停后才可见其余时间它应该是半透明的。我怎样才能实现这个目
我目前有一个 JLabel 嵌入在 JTextPane 中,使用以下方法: import javax.swing.*; import javax.swing.text.*; public class
我是一名优秀的程序员,十分优秀!