Jon*_*nah 0 java swing jtextpane styleddocument
我目前有一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
如何使标签不可删除?因为无论何时我拿着退格键,标签最终都会被删除JTextPane
您可以使用a NavigationFilter来防止在文本窗格的开头删除组件.退房:如何使JTextField的一部分不可编辑为此方法的示例.在这种情况下,标签表示单个字符,因此前缀长度将设置为1.或者您可以只使用前缀概念本身,甚至不使用JLabel.
否则,您可以创建自定义DocumentFilter.查看实现DocumentFilter的Swing教程中的基础知识部分.
因此,您需要跟踪组件位置的偏移量.然后在remove(...)过滤器的方法中,您需要检查是否要删除偏移范围内的数据.如果是这样,你会忽略删除.
当然,如果您在标签之前添加或删除文本,则偏移量可以动态更改,因此您也需要对其进行管理.
或者您可以查看受保护的文本组件,它试图为您管理所有这些.
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |