Java JScrollPane中的JTextArea包装单词但缺少字母

Java JScrollPane中的JTextArea包装单词但缺少字母,java,swing,jscrollpane,jtextarea,joptionpane,Java,Swing,Jscrollpane,Jtextarea,Joptionpane,我想用一些JTextArea和JLabel制作一个JOptionPane.showOptionDialog。 问题是对话框太小,我没有找到任何解决方案,所以我决定将内容放在JScrollPane中 我看到我必须将所有JTextArea和JLabel放在JPanel中,因为将它们添加到JScrollPane中一行不允许我正确放置视口 最后一个问题是,我的JTextArea正确地包装了单词,但是当我有2或3个字母长度的单词时,它们会被滚动条隐藏 SSCCE: public class myTest

我想用一些
JTextArea
JLabel
制作一个
JOptionPane.showOptionDialog
。 问题是对话框太小,我没有找到任何解决方案,所以我决定将内容放在
JScrollPane

我看到我必须将所有
JTextArea
JLabel
放在
JPanel
中,因为将它们添加到
JScrollPane
中一行不允许我正确放置视口

最后一个问题是,我的JTextArea正确地包装了单词,但是当我有2或3个字母长度的单词时,它们会被滚动条隐藏

SSCCE:

public class myTest extends JFrame
{
        public static void main(String[] args)
        {
            new myTest();
        }
        public myTest()
        {
            String myLongString="Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?";
            String aLittleString="I am a poor little string which is placed at the bottom of a JOptionPane.";
            String[] options = {"OK","NO"}; 

            JLabel titre1 = new JLabel("Title"); 
            JLabel titre2 = new JLabel("Title 2");

            Map<TextAttribute,Integer> attributs = new HashMap<TextAttribute, Integer>();
            attributs.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
            Font police = new Font("Serif", Font.BOLD, 12).deriveFont(attributs); 

            titre1.setFont(police);
            titre2.setFont(police);

            JTextArea text3 = new JTextArea(myLongString,5,75); 
            text3.setLineWrap(true);
            text3.setWrapStyleWord(true);
            text3.setEditable(false);
            Color back = this.getBackground();
            text3.setBackground(back);
            JTextArea text = new JTextArea(myLongString,5,75); 
            text.setLineWrap(true);
            text.setWrapStyleWord(true);
            text.setEditable(false);
            text.setBackground(back);

            JTextArea text2 = new JTextArea(aLittleString,5,75); 
            text2.setLineWrap(true);
            text2.setWrapStyleWord(true);
            text2.setEditable(false);
            text2.setBackground(back);
            JPanel bas = new JPanel(new BorderLayout());
            JPanel basbas = new JPanel(new BorderLayout());

            bas.add(titre1,BorderLayout.NORTH);
            bas.add(text,BorderLayout.CENTER);
            basbas.add(titre2,BorderLayout.NORTH);
            basbas.add(text2,BorderLayout.CENTER);
            basbas.add(text3,BorderLayout.SOUTH);
            bas.add(basbas,BorderLayout.SOUTH);

            JScrollPane js = new JScrollPane(bas);
            js.setBorder(null);
            js.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
            js.setViewportView(bas);
            JLabel lMessage = new JLabel("A message."); 

            Object[] params = {js,lMessage}; 

            int n = JOptionPane.showOptionDialog(new JFrame(),
                    params,
                    "my dialog", 
                    JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE,
                    null, 
                    options, 
                    options[0]); 

        }
    }
公共类myTest扩展了JFrame
{
公共静态void main(字符串[]args)
{
新myTest();
}
公共myTest()
{
字符串Mylong字符串="所有人都会犯错误,但我们必须清楚地认识到这一点,因为它是一种赞美,是一种开明,是一种对发明者真实性的尊重,是一种对生命的追求,是一种理性的追求这一点也不例外,因为在劳动和就业方面,所有人都有自己的权利,也有自己的权利,有自己的权利,有自己的权利,有自己的权利,有自己的权利,有自己的权利,有自己的权利,有自己的权利,有自己的权利,有自己的权利,有自己的权利“在一个没有法律约束的环境中,我们是否应该为自己辩护,在一个没有法律约束的环境中,我们是否应该为自己辩护?”;
String aLittleString=“我是一根可怜的小绳子,它被放在JOptionPane的底部。”;
字符串[]选项={“确定”,“否”};
JLabel titre1=新JLabel(“标题”);
JLabel titre2=新JLabel(“标题2”);
Map attributes=新的HashMap();
attributes.put(texttribute.UNDERLINE,texttribute.UNDERLINE\ON);
Font police=新字体(“衬线”,Font.BOLD,12)。衍生字体(属性);
标题1.setFont(警察);
titre2.setFont(警察);
JTextArea text3=新的JTextArea(myLongString,5,75);
text3.setLineWrap(true);
text3.setWrapStyleWord(true);
text3.设置可编辑(false);
Color back=this.getBackground();
text3.倒退(后退);
JTextArea text=新的JTextArea(myLongString,5,75);
text.setLineWrap(true);
text.setWrapStyleWord(true);
text.setEditable(false);
文本。背景(背面);
JTextArea text2=新的JTextArea(aLittleString,5,75);
text2.setLineWrap(true);
text2.setWrapStyleWord(true);
text2.setEditable(false);
text2.后退(后退);
JPanel bas=新的JPanel(新的BorderLayout());
JPanel basbas=新的JPanel(新的BorderLayout());
基础增补(标题1,边界布局图,北面);
基础添加(文本、边框布局、中心);
basbas.add(标题2,边界布局图,北部);
添加(text2,BorderLayout.CENTER);
添加(text3,BorderLayout.SOUTH);
bas.add(basbas,南部边界布局);
JScrollPane js=新的JScrollPane(bas);
js.setboorder(空);
js.setHorizontalScrollBarPolicy(JScrollPane.HorizontalScrollBar\uNever);
js.setViewportView(bas);
JLabel lMessage=新的JLabel(“消息”);
对象[]参数={js,lMessage};
int n=JOptionPane.showOptionDialog(新JFrame(),
params,
“我的对话”,
JOptionPane.YES\u NO\u选项,
JOptionPane.QUESTION\u消息,
无效的
选项,
期权[0]);
}
}
我读了好几本书,但他们总是在谈论setWrapStyleWord。 我禁用水平滚动条是因为我不想要它,事实上我不想要一个侧边有两个字母的滚动条

在我看来,问题在于我用
JPanel
构建了滚动条,但我没有找到其他解决方案


欢迎对我的帖子或我的英语有任何反馈。

请回答我的评论。请尝试向您要添加
JScrollPane
JPanel
提供一个,或者您可以向您的
JTextArea
添加
JScrollPane
JPanel
pa>中添加一个空订单租用
JLabel
JTextArea
。这样
JTextArea
就会认为它的宽度比渲染文本的宽度要宽

我建议您将滚动条添加到
JTextArea
中(使滚动窗格成为父窗格),然后文本区域将知道实际宽度(不包括滚动条)


例子:


请务必提供一个,因为您提供的代码段在任何意义上都不可编译:(.只是猜测,请尝试注释掉这一行
js.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL\u SCROLLBAR\u NEVER);
,因为你的
换行
属性是真的,所以你不需要它。我会编辑SSCCE,好像我错过了我的c/p。我已经尝试过不使用水平滚动条,但就像我说的“我不想要两个字母的滚动条”“当我在默认情况下让JScrollPane以2个字符的间隔显示一个水平滚动条时。现在我有了主意,试着为您的
JPanel
提供一个
EmptyBorder
,您可以在其中添加
JScrollPane
,这将实现您想要的:-)提供
bas.setboorder(BorderFactory.createEmptyBorder(0,0,20))解决问题。谢谢,但我是圣
public static void main(String[] args) {

    String myLongString="Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?";
    String[] options = {"OK","NO"}; 

    JTextArea text = new JTextArea(myLongString, 5, 55); 
    text.setLineWrap(true);
    text.setWrapStyleWord(true);
    text.setEditable(false);

    JPanel bas = new JPanel(new BorderLayout());
    bas.add(new JLabel("Title"), BorderLayout.NORTH);
    bas.add(new JScrollPane(text),BorderLayout.CENTER);

    JOptionPane.showOptionDialog(new JFrame(),
            bas,
            "my dialog", 
            JOptionPane.YES_NO_OPTION,
            JOptionPane.QUESTION_MESSAGE,
            null, 
            options, 
            options[0]); 

    System.exit(0);
}