JTextArea中在JScrollPane的包装的话,但丢失的信件(JTextArea in JS

2019-09-18 02:26发布

我想作一个JOptionPane.showOptionDialog一些JTextAreaJLabel 。 问题是,该对话框太小,我没有找到任何解决方案,所以我决定把我的内容JScrollPane

我看到了,我必须把我所有JTextArea和我JLabelJPanel因为添加他们在JScrollPane一排不允许我正确地把口中。

最后一个问题是,我的JTextArea正确包装的话,但是当我有2个或3个字母lenght的话,他们是隐藏的滚动条。

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]); 

        }
    }

我看了几个主题,但他们总是谈论setWrapStyleWord。 我禁用了水平滚动条,因为我不想要它,其实我不想为2个字母折端滚动条。

在我看来,问题是,我建立了滚动条JPanel ,但我没有找到其他的解决办法。

在我的岗位或任何反馈我的英语是和欢迎。

Answer 1:

把我的评论来回答。 请不要尝试提供一个空边框到您JPanel到要添加JScrollPane ,或者你可以一个EmptyBorder添加到您JTextArea



Answer 2:

要添加JScrollPaneJPanel一个母公司JLabelJTextArea 。 这样的JTextArea会认为它作为一个更宽的宽度比它渲染上的文字。

我建议你到滚轮添加到JTextArea ,而不是(做滚动面板的父母)。 然后textarea的会知道真正的宽度(不包括滚动条)。


例:

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);
}


文章来源: JTextArea in JScrollPane wrapping words but missing letters