gpt4 book ai didi

java - 两个链接的 JTextPanes

转载 作者:行者123 更新时间:2023-12-02 10:50:32 27 4
gpt4 key购买 nike

我有两个具有静态大小的 JTextPanes,我想像文本处理器中的两个页面一样连接它们。如果我在第一个 JTextPane(页面)中写入一些内容,并且对于一个 JTextPane 来说太长,那么它会溢出到第二个 JTextPane(页面)。

不想要这样的东西(第一个 Pane 已展开):

picture 1

但我想要这样的东西:

picture 2

这是我的测试代码:

public class Test2 extends JFrame{
JTextPane textPane1;
JTextPane textPane2;

/**
* Inicialization
*/
public Test2() {
textPane1 = getTextPane();
textPane2 = getTextPane();

getContentPane().setLayout(new GridBagLayout());

getContentPane().add(textPane1,getGridBagConstraints(0));
getContentPane().add(textPane2,getGridBagConstraints(1));
}

/**
* Settings for text panes
*/
private JTextPane getTextPane(){
JTextPane pane = new JTextPane();
pane.setEditorKit(new WrapEditorKit());
pane.setMaximumSize(new java.awt.Dimension(100, 108));
pane.setMinimumSize(new java.awt.Dimension(100, 108));
pane.setPreferredSize(new java.awt.Dimension(100, 108));
pane.setBorder(new StrokeBorder(new BasicStroke()));
return pane;
}

/**
* Setting layout for text panes.
*/
private GridBagConstraints getGridBagConstraints(int index){
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = index;
gridBagConstraints.anchor = GridBagConstraints.NORTHWEST;
return gridBagConstraints;
}

/**
* Main
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new Test2();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
}

/**
* Just class for wrapping text in text panes.
*/
private static class WrapEditorKit extends StyledEditorKit {
ViewFactory defaultFactory = new WrapColumnFactory();

@Override
public ViewFactory getViewFactory() {
return defaultFactory;
}

private class WrapColumnFactory implements ViewFactory {
@Override
public javax.swing.text.View create(Element elem) {
String kind = elem.getName();
if (kind != null) {
switch (kind) {
case AbstractDocument.ContentElementName:
return new WrapLabelView(elem);
case AbstractDocument.ParagraphElementName:
return new ParagraphView(elem);
case AbstractDocument.SectionElementName:
return new BoxView(elem, javax.swing.text.View.Y_AXIS);
case StyleConstants.ComponentElementName:
return new ComponentView(elem);
case StyleConstants.IconElementName:
return new IconView(elem);
}
}

// default to text display
return new LabelView(elem);
}
}

private class WrapLabelView extends LabelView {
public WrapLabelView(Element elem) {
super(elem);
}

@Override
public float getMinimumSpan(int axis) {
switch (axis) {
case javax.swing.text.View.X_AXIS:
return 0;
case javax.swing.text.View.Y_AXIS:
return super.getMinimumSpan(axis);
default:
throw new IllegalArgumentException("Invalid axis: " + axis);
}
}
}
}
}

请问有什么想法吗?我尝试了很多方法,但没有任何效果。

最佳答案

为什么你不尝试使用检查功能来计算第一个 Pane 中的单词数,如果单词数超过限制,则自动打开第二个 jtextpane,然后你将重新开始并停止该功能该函数将检查字数,因此在发生任何事情之前先隐式调用此函数,然后继续执行您的代码。 :)我想这会解决问题

关于java - 两个链接的 JTextPanes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27474565/

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