JScrollPane не отображается в JTextArea

#java #swing #jscrollpane #jtextarea

#java #качать #jscrollpane #jtextarea

Вопрос:

У меня следующая проблема, JScrollPane не отображается в JTextArea, и я не знаю почему? Я пробовал многими способами, но ничего, он не хочет мне показывать! Я поместил ниже часть кода. Все отображается правильно, JFame, JTextArea, текст внутри JTextArea, все без JScrollPane. Пожалуйста, кто-нибудь может мне помочь?

 package pachet;

import java.awt.BorderLayout;
import java.awt.Container;
import java.util.ArrayList;
import javax.swing.GroupLayout;
import static javax.swing.GroupLayout.Alignment.BASELINE;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import static javax.swing.LayoutStyle.ComponentPlacement.RELATED;



public class Design {
    private final JFrame x;
    
    private final JPanel panou_rezultate=new JPanel();
    
    private final JLabel aziL=new JLabel("Azi");
    private final JLabel saptamanaL=new JLabel("Ultimile 7 zile");
    private final JLabel lunaL=new JLabel("Ultimile 30 zile");
    private final JLabel totalL=new JLabel("De la inceput");
        
    private final JTextArea aziArea=new JTextArea(30,60);
    private final JTextArea saptamanaArea=new JTextArea(30,60);
    private final JTextArea lunaArea=new JTextArea(30,60);
    private final JTextArea totalArea=new JTextArea(30,60);
    
    private final JScrollPane totalScrol=new JScrollPane(totalArea,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
        JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //here it is created scroll

    public Design(JFrame x) {
        this.x = x;
        functie(); 
    }
    
    
    private void functie(){
       
        x.add(panou_rezultate,BorderLayout.CENTER);
       
        panou_rezultate.setLayout(metoda());
        
        panou_rezultate.add(totalScrol); //here is added scroll to panel
                
        PrelucrareDate y=new PrelucrareDate();
        aziArea.setText(y.getAziP());
        String abc="";
        for(int i=0; i<1000; i  ){
            abc=abc "she is beautifuln";
        }
        totalArea.setText(abc);   //totalArea text area is filled by many sentences, so scroll must appear   
        
       
    }
   
   
    public GroupLayout metoda(){
        
        GroupLayout gl= new GroupLayout(panou_rezultate);
        panou_rezultate.setLayout(gl);
        
        gl.setAutoCreateGaps(true);
        gl.setAutoCreateContainerGaps(true);       
        
        GroupLayout.SequentialGroup sg=gl.createSequentialGroup();
        
            sg.addGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER)  //de schimbat
                    .addComponent(aziL)
                    .addComponent(aziArea)
                    );
            sg.addPreferredGap(RELATED, 
                        GroupLayout.DEFAULT_SIZE, 
                        Short.MAX_VALUE);
            sg.addGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER)  //de schimbat
                    .addComponent(saptamanaL)
                    .addComponent(saptamanaArea)
                    );
            sg.addPreferredGap(RELATED, 
                        GroupLayout.DEFAULT_SIZE, 
                        Short.MAX_VALUE);
            sg.addGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER)  //de schimbat
                    .addComponent(lunaL)
                    .addComponent(lunaArea)
                    );
            sg.addPreferredGap(RELATED, 
                        GroupLayout.DEFAULT_SIZE, 
                        Short.MAX_VALUE);
            sg.addGroup(gl.createParallelGroup(GroupLayout.Alignment.CENTER)  //de schimbat
                    .addComponent(totalL)
                    .addComponent(totalArea)
                    );
            sg.addPreferredGap(RELATED, 
                        GroupLayout.DEFAULT_SIZE, 
                        Short.MAX_VALUE);
             
        gl.setHorizontalGroup(sg);
        
        
        
        GroupLayout.ParallelGroup pg_etichete=gl.createParallelGroup(BASELINE);
        GroupLayout.ParallelGroup pg_arii_text=gl.createParallelGroup();
        
        
            pg_etichete.addComponent(aziL);
            pg_etichete.addComponent(saptamanaL);
            pg_etichete.addComponent(lunaL);
            pg_etichete.addComponent(totalL);
            
            pg_arii_text.addComponent(aziArea);
            pg_arii_text.addComponent(saptamanaArea);
            pg_arii_text.addComponent(lunaArea);
            pg_arii_text.addComponent(totalArea);
        

        GroupLayout.SequentialGroup sgv=gl.createSequentialGroup(); //secvential grup pe verticala
        
        sgv.addPreferredGap(RELATED, 
                        GroupLayout.DEFAULT_SIZE, 
                        Short.MAX_VALUE);
        sgv.addGroup(pg_etichete);
        sgv.addGroup(pg_arii_text);
        sgv.addPreferredGap(RELATED,25,25);
        
        gl.setVerticalGroup(sgv);
        
    return gl;    
    }
    
}
  

Я заранее благодарю вас!

Комментарии:

1. Я думаю, вам нужно взглянуть на как использовать области прокрутки JScrollPane следует обернуть компонент, который вы хотите прокручивать, обычно это делается с помощью конструктора, но вы также можете использовать JScrollPane#setViewportView … НЕ используйте add :/

2. Можете ли вы быть более явным? Дайте мне более подробную информацию, например, некоторые строки кода и что заменить?

3. totalScrol=new JScrollPane(totalArea)

4. Он существует в 12 строке моего кода, посмотрите на него: private final JScrollPane TOTALSCROLL=new JScrollPane(общая область, JScrollPane. VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //здесь создается прокрутка, я не вижу никакой проблемы!

5. Хорошо, пропустил это, я предполагаю, что это GroupLayout . Итак, я изменил ваш код, чтобы использовать GridBagLayout и не имею никаких проблем. Хотя мне остается задаться вопросом, будет ли JTable лучшим выбором по сравнению со всеми

Ответ №1:

     panou_rezultate.setLayout(metoda());
    panou_rezultate.add(totalScrol); //here is added scroll to panel
  

Посмотрите на весь код, сгенерированный вашей IDE при использовании GroupLayout .

Существует множество видов сложного кода для определения ограничений, используемых GroupLayout , а затем используется addComponent(...) метод. Из-за этой сложности GroupLayout обычно используется только сгенерированным IDE кодом.

Вы не можете просто использовать метод add(…) для добавления компонентов в макет группы.

Мы бы рекомендовали НЕ использовать IDE для генерации вашего кода макета. Тогда вы полностью контролируете ситуацию.

Прочитайте руководство Swing по менеджерам компоновки, чтобы найти рабочие примеры, чтобы начать.