我正在我的应用程序中实现一个注释框工具,用户可以使用鼠标调整大小。此注释框包含一个滚动窗格,其中包含一个JEditorPane
,用户可以在其中插入注释。我在滚动窗格中添加了编辑器窗格,原因如下:
当用户调整评论框大小时,我会为JScrollPane
和JEditorPane
设置所需的大小。当用户增加评论框的大小时,这些组件的大小会根据需要增加,但是当评论框的大小减小时,JEditorPane
的大小即使在设置大小后也不会减少。这导致滚动窗格内的滚动条。
我尝试将setPreferrredSize
,setSize
,setMaximumSize
用于JEditorPane
。编辑器窗格的大小仍然没有减少。我在设置尺寸后尝试调用revalidate()
或updateUI()
但没有用。
我正在使用Java 1.4.2。
请给我一些见解......
答案 0 :(得分:9)
我意识到这已经很久了,但是为了将来的参考,您需要做的是覆盖getScrollableTracksViewportWidth()
以始终返回true,例如。
JEditorPane pane = new JEditorPane() {
public boolean getScrollableTracksViewportWidth() {
return true;
}
};
panel.add(new JScrollPane(pane));
答案 1 :(得分:4)
实际上有可能,luiscubal。这是怎么回事,
向JScrollPane添加用于调整大小事件的ComponentListener
public static void main(String...args) {
//our test frame
JFrame frame = new JFrame("JEditorPane inside JScrollPane resizing");
frame.setLayout(new BorderLayout());
//our editing pane
final JEditorPane editor = new JEditorPane();
//our simple scroll pane
final JScrollPane scroller = new JScrollPane(editor);
//NOTE: this is the magic that is kind of a workaround
// you can also implement your own type of JScrollPane
// using the JScrollBar and a JViewport which is the
// preferred method of doing something like this the
// other option is to create a JEditorPane subclass that
// implements the Scrollable interface.
scroller.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
editor.setSize(new Dimension(
scroller.getWidth()-20,
scroller.getHeight()-20));
}
});
//just use up the entire frame area.
frame.add(scroller, BorderLayout.CENTER);
//quick and dirty close event handler
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(320, 240); //something not too big
frame.setLocationRelativeTo(null); //centers window on screen
frame.setVisible(true); // normally done in a SwingUtilities.invokeLater
}
看看luiscubal它是可能的。不要那么快就用Java宣布事情是不可能的。 swing api安静灵活,可以为您完成大量工作。但是,如果你以不同的方式使用JComponents,那么你最终会遇到问题并有两个选择。
答案 2 :(得分:-1)
不可能在JScrollPane中减小JEditorPane的大小然后减少它。 您可能想要使用JTextArea。