我想将JScrollPane中JEditorPane的高度限制为具有最大值,但仍允许扩展宽度以适合内容。
我的理由是,我想要一行文本,允许我嵌入组件。我真的想要一个像嵌入式组件的JTextField,但由于JTextField无法做到这一点,我使用的是JEditorPane(JTextPane也可以。)
我正在尝试模仿桌面Swing应用程序中的StackOverflow标记行为。所以我会在JEditorPane中嵌入可点击的“标签”,它们都会出现在一行中,就像SO一样。
按照目前的情况,JEditorPane垂直扩展,但不能横向扩展这个SSCCE:
import javax.swing.*;
import java.awt.BorderLayout;
public class Tags {
/*
* This is the method I want to modify to implement this behavior:
*/
public static JComponent buildTagsComponent() {
JScrollPane scrollPane = new JScrollPane();
JEditorPane editorPane = new JEditorPane();
scrollPane.setViewportView(editorPane);
return scrollPane;
}
/*
* The remainder of this code is just to make the example complete.
*/
public static JFrame buildFrame() {
JFrame frame = new JFrame("Tags example");
JPanel panel = new JPanel();
JPanel tagsPanel = new JPanel();
JLabel tagsLabel = new JLabel("Tags:");
JLabel mainContent = new JLabel("Main Content Goes Here");
tagsPanel.add(tagsLabel);
tagsPanel.add(buildTagsComponent());
panel.setLayout(new BorderLayout());
panel.add(tagsPanel,BorderLayout.SOUTH);
panel.add(mainContent,BorderLayout.CENTER);
frame.setContentPane(panel);
return frame;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
JFrame frame = buildFrame();
frame.pack();
frame.setVisible(true);
}
}
);
}
}
另请注意,我计划禁用滚动条,并需要使用手势滚动或使用光标键移动光标位置。当我为滚动条策略添加“永不”时,这使得事情根本不可滚动。我现在不是在寻找滚动问题的解决方案,我只想让答案考虑到我将滚动条策略设置为从不为水平和垂直。
我已尝试将高度和宽度(最小值,首选值和最大值)分别设置为12和Integer.MAX_VALUE
。
更新
经过一番研究后,我相信我正在寻找的解决方案与自动换行有关。我希望JEditorPane在没有换行符时换行(换行)。
答案 0 :(得分:2)
目前,由于布局管理器,编辑器窗格不会水平调整大小。 JPanel
的默认值为FlowLayout
,它会按固定的首选大小调整组件大小。
尝试BoxLayout
:
JPanel tagsPanel = new JPanel();
tagsPanel.setLayout(new BoxLayout(tagsPanel, BoxLayout.LINE_AXIS));
// then add components
额外提示:为了改善面板的外观,您可以添加不可见的组件(在其他组件之间放置空间)和/或空边框(与其他组件创建边距:
tagsPanel.add(tagsLabel);
tagsPanel.add(Box.createRigidArea(new Dimension(10,0)));
tagsPanel.add(buildTagsComponent());
tagsPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
<小时/> 关于换行问题(您无法在
JEditorPane
中轻松停用,与JTextArea
不同),建议使用here(从this post引用)。< p>
基本上您必须延长StyledEditorKit
并将其设置为JEditorPane
。
<小时/> 关于
JScrollPane
的行为,可能解决方案是使用AS_NEEDED
默认设置,但customize the UI of the scroll bars使其大小等于零。这样您就可以在没有滚动条本身的情况下进行滚动操作。
答案 1 :(得分:0)
在JScrollPane初始化中尝试此操作:
In [2]: from django.apps import apps
In [3]: Poll = apps.get_model('my_app', 'Poll')
In [4]: Poll.MY_VAR
Out[4]: ['my_class_level_attribute']