我有以下结构
JFrame
JPanel
JScrollPane
class that extends JTextPane添加长文本后,JScrollPane会隐藏JTextPane。
我正在使用Gridbag布局。
我在clss中有扩展JTextPane的DefaultStyledDocument。
我已经设置了JTextPane的最大大小
text.setMaximumSize(new Dimension(100,50)); 打包com.example;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.DefaultStyledDocument;
public class Test extends JFrame{
IPanel p;
public Test() {
p = new IPanel();
p.init();
setTitle("Test");
setBounds(50, 50, 200, 200);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(p);
setVisible(true);
}
public static void main(String[] args) {
Test t = new Test();
}
}
class IPanel extends JPanel{
public void init() {
GridBagConstraints gbc = new GridBagConstraints();
GridBagLayout gridbag = new GridBagLayout();
JLabel subjectLabel = new JLabel("Text");
gbc.weighty = 0.0;
gbc.gridwidth = 1;
gbc.weightx = 0.0;
gbc.anchor = GridBagConstraints.NORTH;
gridbag.setConstraints(subjectLabel, gbc);
add(subjectLabel);
TextPane Text = new TextPane(255);
Text.setMaximumSize(new Dimension(100,20));
Text.setPreferredSize(new Dimension(100,20));
gridbag.setConstraints(Text, gbc);
JScrollPane subScrollPane = new JScrollPane(Text);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1.0;
gbc.weighty = 0.0;
gbc.insets = new Insets(0, 0, 5, 0);
gridbag.setConstraints(subScrollPane, gbc);
subScrollPane.setWheelScrollingEnabled(false);
add(subScrollPane);
}
}
class TextPane extends JTextPane{
private Doc doc = new Doc();
public TextPane(int lenght) {
doc.setmaxLength(lenght);
}
}
class Doc extends DefaultStyledDocument{
private int maxLength = 0;
public void setmaxLength(int lenght) {
maxLength = lenght;
}
}这是代码示例
发布于 2012-06-28 20:54:17
这是一个完全相同的层次结构,相同的布局,一切都没有问题的例子:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
public class Test3 {
protected static void initUI() {
JFrame frame = new JFrame("Test text pane");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextPane text = new JTextPane();
text.setText(LONG_TEXT);
JScrollPane scrollPane = new JScrollPane(text);
JPanel panel = new JPanel(new GridBagLayout());
panel.add(scrollPane, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(
0, 0, 0, 0), 0, 0));
frame.add(panel);
frame.setSize(600, 400);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initUI();
}
});
}
private static final String LONG_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. In molestie purus vel ipsum commodo id bibendum est porta. Proin leo nisl, facilisis eu euismod eget, fermentum a lacus. Nulla pulvinar ante at elit tristique condimentum. Suspendisse ac erat eu lectus vulputate sagittis sed a urna. In diam ligula, blandit id scelerisque sit amet, porttitor in libero. Curabitur in rhoncus tellus. Aenean dignissim dui semper ante pharetra interdum scelerisque vel tortor. Vestibulum id arcu mauris. Integer ut magna purus. Mauris orci massa, porta sollicitudin rutrum eu, ultrices non leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sem justo, dapibus in euismod et, gravida sit amet eros.\r\n"
+ "\r\n"
+ "Suspendisse id ligula sit amet neque euismod commodo in at massa. Sed pretium lobortis vulputate. Aliquam non eros odio, non accumsan nisi. Phasellus vel nisl tellus, quis tincidunt risus. Donec ut nulla felis. Morbi sit amet enim arcu. Integer iaculis mi id sem vulputate non lacinia dui dictum.\r\n"
+ "\r\n"
+ "Praesent luctus neque in purus convallis vel aliquet dui rutrum. In lobortis nisl eu nisi tincidunt adipiscing sodales sapien sodales. Morbi augue massa, dictum vel hendrerit vel, tincidunt id lectus. Proin vulputate nunc placerat ante fringilla vitae ullamcorper mauris fringilla. Duis et massa sapien. Integer porta elementum enim in lobortis. Morbi eget mi nunc. Quisque nec arcu eget orci elementum consectetur ut in metus.\r\n"
+ "\r\n"
+ "Donec iaculis felis vel felis rutrum id congue tellus aliquet. Ut vel sapien mauris, quis sodales odio. Aliquam cursus urna a leo lacinia eget porttitor ante mattis. Aenean dictum, tellus in volutpat luctus, magna eros feugiat tortor, nec lobortis diam justo vel est. Praesent sit amet nisl sed eros semper ultrices. Nunc lobortis scelerisque sapien, ac sodales nibh viverra ac. Etiam auctor, odio ut venenatis hendrerit, odio ipsum sollicitudin libero, non adipiscing nisi eros at nulla. Nulla consequat arcu in libero pellentesque sit amet aliquet arcu elementum. Nulla facilisi. Proin sodales neque quis turpis gravida ac mollis ipsum ultricies. Mauris lorem magna, ultricies a dignissim sit amet, egestas et neque. Phasellus iaculis pellentesque ultrices. Phasellus a consectetur nisl. Proin ac quam id lectus dignissim lacinia. Praesent ligula purus, mattis eu pellentesque nec, convallis id lorem.\r\n"
+ "\r\n"
+ "Cras at sapien vitae felis fermentum consectetur sed eu justo. Mauris in felis mi. Vestibulum felis neque, varius at aliquet non, ornare at eros. In hac habitasse platea dictumst. Vivamus placerat, tellus laoreet pulvinar tempor, velit elit aliquet diam, eu ullamcorper purus enim non lectus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Etiam et enim magna. Ut varius, lectus at luctus laoreet, urna mauris euismod velit, vitae sodales nulla nulla non sem. Phasellus eget viverra erat. Phasellus quam ante, vehicula sed tristique vestibulum, ullamcorper et nunc. Phasellus placerat congue tellus, condimentum volutpat ligula convallis fringilla. Curabitur quis nibh lorem, ut feugiat velit. Aliquam vehicula pellentesque aliquet. ";
}编辑:
这两行代码有问题:
Text.setMaximumSize(new Dimension(100, 20));
Text.setPreferredSize(new Dimension(100, 20));您正在强制使用JTextPane的首选大小和最大大小。您提供了非常严格的约束。通常,滚动条的宽度/高度约为20px,这意味着当水平滚动条出现时,它将占据组件的大部分高度。
还要注意代码中的以下错误:
init()方法中声明了一个GridBagLayout,但您没有在面板上设置它(使用setLayout),这意味着它是一个实际执行布局的FlowLayout。FlowLayout,但您没有将Text窗格添加到面板中,而是添加了Scroll窗格,因此设置这些约束对布局没有任何影响。我不知道你想要达到什么目的。对我来说,看起来一个简单的JTextField就足够了,但我没有足够的上下文来了解。
EDIT2:
gridbag。gbc.fill = GridBagConstraints.BOTH;gbc.weighty = 1.0;
发布于 2012-06-28 20:51:47
在此示例中,只需使用EmptyBorder.Have,了解您可以执行的替代操作:
import java.awt.*;
import javax.swing.*;
public class ScrollPaneExample
{
private void createAndDisplayGUI()
{
JFrame frame = new JFrame("JScrollPane Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout(5, 5));
JTextPane textPane = new JTextPane();
textPane.setText("IF this is a very large text" +
" still it can manage that" +
" without any difficulty since" +
" it knows how to handle itself.");
textPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
JScrollPane scroller = new JScrollPane();
scroller.setViewportView(textPane);
contentPane.add(scroller);
frame.setContentPane(contentPane);
frame.setSize(100, 200);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new ScrollPaneExample().createAndDisplayGUI();
}
});
}
}https://stackoverflow.com/questions/11244257
复制相似问题