简体   繁体   English

Java Scrollpane和JTextArea

[英]Java Scrollpane and JTextArea

I have again a problem with the scrollpane in Java. 我在Java中的滚动窗格再次遇到问题。 I just want to combine a JTextArea with a ScrollPane. 我只想将JTextArea与ScrollPane结合使用。 I did it as usually, but this time it isn't working. 我照常做,但是这次不起作用。

Here is the part of code which matters (please let me know, if you need more): 这是重要的代码部分(如果需要更多信息,请告诉我):

rightWindow.add(rightWindowMaximumWidth, BorderLayout.CENTER); //does it matter if I call this at the beginning or at the end ?
...
rightUpTextArea         = new JTextArea();
rightUpScrollPane       = new JScrollPane(rightUpTextArea);
...
rightWindowMaximumWidth.add(rightUpScrollPane, "Up"); //Jpanel

I filled the TextArea with a lot of text, but there isn't a scrollpane. 我在TextArea中填充了很多文本,但是没有滚动窗格。 Maybe it is obvious, but I can't find the mistake. 也许很明显,但是我找不到错误。

Edit: here ist the complete code (the code frome abouve is in the methode setupRight() and setupRightOben()): 编辑:这里是完整的代码(上述代码在setupRight()和setupRightOben()方法中):

private void setupRightSide(){
    //rightWindow
    rightWindow             = new JPanel(new BorderLayout(10,10));
    rightWindowMaximumWidth = new JPanel();
    rightWindowSplit        = new BoxLayout(rightWindowMaximumWidth, BoxLayout.Y_AXIS);//"rightWindow" is the parent, not "windowContainer"!!!

    rightUp                 = new JPanel();
    rightUpTextArea         = new JTextArea();
    rightUpScrollPane       = new JScrollPane(rightUpTextArea);

    rightDownBoxPanel       = new JPanel();
    rightDownBox            = new BoxLayout(rightDownBoxPanel, BoxLayout.X_AXIS);//"rightDownBoxPanel" is the parent, not "rightWindow"!!!
    rightDownTextArea       = new JTextArea();
    rightDownTextAreaScrollPane = new JScrollPane(rightDownTextArea);
    rightDownButtomSend     = new JButton("Send");

    //rightUpScrollPane.setAutoscrolls(true);

    windowContainer.add(rightWindow, BorderLayout.CENTER);

    //rechte Seite
    rightWindow.setPreferredSize(new Dimension(250,250));
    rightWindow.setSize(new Dimension(424,503));  // habe ich durch datenausgabe mit der Konsole herrausgefundem
    rightWindow.add(rightWindowMaximumWidth, BorderLayout.CENTER);

    //container in "rechte Seite" mit maximaler width von 1000px
    rightWindowMaximumWidth.setLayout(rightWindowSplit);
    rightWindowMaximumWidth.setPreferredSize(new Dimension(rightWindow.getWidth()-10,1000));
    rightWindowMaximumWidth.setMaximumSize(new Dimension(1000,Integer.MAX_VALUE));

    rightWindowMaximumWidth.add(rightUpScrollPane, "Up");
    rightWindowMaximumWidth.add(Box.createRigidArea(new Dimension(0,10)));
    rightWindowMaximumWidth.add(rightDownBoxPanel, "Down");
    rightWindowMaximumWidth.add(Box.createRigidArea(new Dimension(0,10)));

    setupRechtsOben();
    setupRechtsUnten();

}

private void setupRechtsOben(){
    //obere Teil der rechten Seite
    rightUp.setPreferredSize(new Dimension(420 , 400));
    rightUp.setMaximumSize(new Dimension(420,400));
   // rightUp.add(rightUpScrollPane);

    //TextFeld rechts-oben
    rightUpTextArea.setBorder( new CompoundBorder(new javax.swing.border.LineBorder(Color.BLACK), new EmptyBorder(15, 15, 15, 15)));
    rightUpTextArea.setEditable(false);
    rightUpTextArea.setLineWrap(true);
    rightUpTextArea.setWrapStyleWord(true);
    rightUpTextArea.setBackground(Color.lightGray);
    rightUpTextArea.setPreferredSize(new Dimension(420,350));//-2 damit der rand zu sehen ist
    rightUpTextArea.setMaximumSize(rightWindowMaximumWidth.getMaximumSize());
    rightUpTextArea.setText("d\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\n"); //to fill it with text


}

private void setupRechtsUnten(){
    //untere Teil der rechten Seite (vertikales BoyLayout)
    rightDownBoxPanel.setLayout(rightDownBox);
    rightDownBoxPanel.add(rightDownTextAreaScrollPane, "TextField");
    rightDownBoxPanel.add(Box.createRigidArea(new Dimension(10,0)));
    rightDownBoxPanel.add(rightDownButtomSend, "SendButton");
    rightDownBoxPanel.setMaximumSize(new Dimension(1000,100));
    rightDownBoxPanel.setPreferredSize(new Dimension(1000 ,100));


    //TextEingabe im BoxLayout
    rightDownTextArea.setBorder(new javax.swing.border.LineBorder(Color.BLACK));
    //Damit es in der nächsten Zeile weitergeht, wenn diese voll ist
    rightDownTextArea.setLineWrap(true);
    rightDownTextArea.setWrapStyleWord(true);

    //SendButton im BoxLayout
    rightDownButtomSend.setSize(new Dimension(100, 50));
    rightDownButtomSend.setPreferredSize(new Dimension(100, 50));
    rightDownButtomSend.setMaximumSize(new Dimension(100, 50));
    rightDownButtomSend.setFont(new Font("Arial", Font.BOLD, 14));
    rightDownButtomSend.setAlignmentX(frame.CENTER_ALIGNMENT);

}
    // Below Code is simple Demonstration about How to combine a JTextArea with a ScrollPane.
// I wish this code logic solve your problem.

import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Tutorial extends JFrame {

    public static void main(String[] args) {
        new Tutorial();
    }

    public Tutorial() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        getContentPane().setLayout(null);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(124, 84, 171, 106);
        getContentPane().add(scrollPane);

        JTextArea textArea = new JTextArea();
        textArea.setFont(new Font("Monospaced", Font.BOLD, 15));
        scrollPane.setViewportView(textArea);
        setVisible(true);
    }
}

The problem is (still) not in the code you've posted, either the original code nor the extra code. 问题是(仍然)不在您发布的代码中,无论是原始代码还是多余的代码。 I created a class which leaves all your code the way it is, makes instance variables of all the ones that don't have declarations for, and instantiates the frame that your code uses but doesn't initialize. 我创建了一个类,使您的所有代码保持原样,为所有没有声明的变量创建实例变量,并实例化代码使用但未初始化的框架。 It creates a scrollPane around a text area just fine. 它会在文本区域周围创建一个scrollPane。 I leave it here for your study if you need it; 如果需要的话,我把它留在这里供您学习。 the problem is elsewhere. 问题出在其他地方。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;


public class PanelPlay
{
  JFrame windowContainer; 
  JPanel rightWindow;
  JPanel rightWindowMaximumWidth;
  private BoxLayout rightWindowSplit;
  private JPanel rightUp;
  private JTextArea rightUpTextArea;
  private JScrollPane rightUpScrollPane;
  private JPanel rightDownBoxPanel;
  private BoxLayout rightDownBox;
  private JTextArea rightDownTextArea;
  private JScrollPane rightDownTextAreaScrollPane;
  private JButton rightDownButtomSend;

  public static void main(String ... arguments)
  {
    PanelPlay pp = new PanelPlay();
    pp.go();
  }

  public void go()
  {
    windowContainer = new JFrame();
    setupRightSide();
    windowContainer.pack();
    windowContainer.setVisible(true);
  }

  private void setupRightSide(){
    //rightWindow
    rightWindow             = new JPanel(new BorderLayout(10,10));
    rightWindowMaximumWidth = new JPanel();
    rightWindowSplit        = new BoxLayout(rightWindowMaximumWidth, BoxLayout.Y_AXIS);//"rightWindow" is the parent, not "windowContainer"!!!

    rightUp                 = new JPanel();
    rightUpTextArea         = new JTextArea();
    rightUpScrollPane       = new JScrollPane(rightUpTextArea);

    rightDownBoxPanel       = new JPanel();
    rightDownBox            = new BoxLayout(rightDownBoxPanel, BoxLayout.X_AXIS);//"rightDownBoxPanel" is the parent, not "rightWindow"!!!
    rightDownTextArea       = new JTextArea();
    rightDownTextAreaScrollPane = new JScrollPane(rightDownTextArea);
    rightDownButtomSend     = new JButton("Send");

    //rightUpScrollPane.setAutoscrolls(true);

    windowContainer.add(rightWindow, BorderLayout.CENTER);

    //rechte Seite
    rightWindow.setPreferredSize(new Dimension(250,250));
    rightWindow.setSize(new Dimension(424,503));  // habe ich durch datenausgabe mit der Konsole herrausgefundem
    rightWindow.add(rightWindowMaximumWidth, BorderLayout.CENTER);

    //container in "rechte Seite" mit maximaler width von 1000px
    rightWindowMaximumWidth.setLayout(rightWindowSplit);
    rightWindowMaximumWidth.setPreferredSize(new Dimension(rightWindow.getWidth()-10,1000));
    rightWindowMaximumWidth.setMaximumSize(new Dimension(1000,Integer.MAX_VALUE));

    rightWindowMaximumWidth.add(rightUpScrollPane, "Up");
    rightWindowMaximumWidth.add(Box.createRigidArea(new Dimension(0,10)));
    rightWindowMaximumWidth.add(rightDownBoxPanel, "Down");
    rightWindowMaximumWidth.add(Box.createRigidArea(new Dimension(0,10)));

    setupRechtsOben();
    setupRechtsUnten();

}

private void setupRechtsOben(){
    //obere Teil der rechten Seite
    rightUp.setPreferredSize(new Dimension(420 , 400));
    rightUp.setMaximumSize(new Dimension(420,400));
   // rightUp.add(rightUpScrollPane);

    //TextFeld rechts-oben
    rightUpTextArea.setBorder( new CompoundBorder(new javax.swing.border.LineBorder(Color.BLACK), new EmptyBorder(15, 15, 15, 15)));
    rightUpTextArea.setEditable(false);
    rightUpTextArea.setLineWrap(true);
    rightUpTextArea.setWrapStyleWord(true);
    rightUpTextArea.setBackground(Color.lightGray);
    rightUpTextArea.setPreferredSize(new Dimension(420,350));//-2 damit der rand zu sehen ist
    rightUpTextArea.setMaximumSize(rightWindowMaximumWidth.getMaximumSize());
    rightUpTextArea.setText("d\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\nd\n"); //to fill it with text


}

private void setupRechtsUnten(){
    //untere Teil der rechten Seite (vertikales BoyLayout)
    rightDownBoxPanel.setLayout(rightDownBox);
    rightDownBoxPanel.add(rightDownTextAreaScrollPane, "TextField");
    rightDownBoxPanel.add(Box.createRigidArea(new Dimension(10,0)));
    rightDownBoxPanel.add(rightDownButtomSend, "SendButton");
    rightDownBoxPanel.setMaximumSize(new Dimension(1000,100));
    rightDownBoxPanel.setPreferredSize(new Dimension(1000 ,100));


    //TextEingabe im BoxLayout
    rightDownTextArea.setBorder(new javax.swing.border.LineBorder(Color.BLACK));
    //Damit es in der nächsten Zeile weitergeht, wenn diese voll ist
    rightDownTextArea.setLineWrap(true);
    rightDownTextArea.setWrapStyleWord(true);

    //SendButton im BoxLayout
    rightDownButtomSend.setSize(new Dimension(100, 50));
    rightDownButtomSend.setPreferredSize(new Dimension(100, 50));
    rightDownButtomSend.setMaximumSize(new Dimension(100, 50));
    rightDownButtomSend.setFont(new Font("Arial", Font.BOLD, 14));
    rightDownButtomSend.setAlignmentX(JFrame.CENTER_ALIGNMENT);

}
}

Unlike your code, you can compile this and run it, and see the scrollPane created. 与您的代码不同,您可以编译并运行它,并查看创建的scrollPane。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM