繁体   English   中英

添加 ScrollPane 使我的 JTextArea 消失

[英]Adding a ScrollPane is making my JTextArea disappear

如果我有滚动条,JTextArea 就会消失。 没有它,一切都很好。 有人可以向我解释一下吗? 以及如何修复!

另外,顺便说一句,是否可以在滚动窗格上更改颜色或设置边框?

这是相关的代码:

        //Text Container
    JPanel textCon = new JPanel();
    textCon.setOpaque(false);
    textCon.setLayout(new GridLayout(1,3));
    add(textCon);

    //Left Filler
    JPanel left = new JPanel();
    left.setOpaque(false);
    textCon.add(left);

    //Text area
    mainText = new JTextArea("SAMPLE");
    mainText.setOpaque(true);
    mainText.setSize(50,30);
    mainText.setLineWrap(true);
    mainText.setWrapStyleWord(true);
    textCon.add(mainText);

    //Set textAre fonts, colors, border/padding
    mainText.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.GREEN), BorderFactory.createEmptyBorder(10, 10, 10, 10)));
    mainText.setFont(new Font("sansserif", Font.BOLD, 10));
    mainText.setForeground(Color.GREEN);
    mainText.setBackground(Color.BLACK);

    //Scroll Bar
    scroller = new JScrollPane(mainText);
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    mainText.add(scroller);

这是它的其余部分,以防万一!

import java.awt.*;
import java.awt.event.*;
import java.awt.Toolkit.*;
import javax.swing.*;
import java.io.*;
import javax.swing.border.*;
import java.util.*;

class ProjectMain extends JFrame
{
//Declare String/Array for mainText
String output = "";
String [] hero;
int page = 0;
JTextArea mainText;
JScrollPane scroller;

public ProjectMain()
{
    //Set Background
    setTitle("JLA Viewer");
    setSize(1920,1080);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    setContentPane(new JLabel(new ImageIcon("bg.png")));
    setLayout(new GridLayout(3,1));

    //Refresh Background
    setSize(1919,1079);
    setSize(1920,1080);

    //Label Container
    JPanel labelCon = new JPanel();
    labelCon.setOpaque(false);
    labelCon.setLayout(new BorderLayout());
    add(labelCon);

    //Top Label
    JLabel topLabel = new JLabel("JLA Profile Viewer");
    topLabel.setHorizontalAlignment(SwingConstants.CENTER);
    topLabel.setForeground(Color.GREEN);
    topLabel.setOpaque(false);
    topLabel.setFont(new Font("sansserif", Font.BOLD, 30));
    labelCon.add(BorderLayout.NORTH,topLabel);

    //Logo
    ImageIcon logo = new ImageIcon("logo.jpg");
    JLabel logoLabel = new JLabel();
    logoLabel.setHorizontalAlignment(SwingConstants.CENTER);
    logoLabel.setIcon(logo);
    labelCon.add(BorderLayout.SOUTH,logoLabel);

    //Text Container
    JPanel textCon = new JPanel();
    textCon.setOpaque(false);
    textCon.setLayout(new GridLayout(1,3));
    add(textCon);

    //Left Filler
    JPanel left = new JPanel();
    left.setOpaque(false);
    textCon.add(left);

    //Text area
    mainText = new JTextArea("SAMPLE");
    mainText.setOpaque(true);
    mainText.setSize(50,30);
    mainText.setLineWrap(true);
    mainText.setWrapStyleWord(true);
    textCon.add(mainText);

    //Set textAre fonts, colors, border/padding
    mainText.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.GREEN), BorderFactory.createEmptyBorder(10, 10, 10, 10)));
    mainText.setFont(new Font("sansserif", Font.BOLD, 10));
    mainText.setForeground(Color.GREEN);
    mainText.setBackground(Color.BLACK);

    //Scroll Bar
    scroller = new JScrollPane(mainText);
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    mainText.add(scroller);

    //Right Filler
    JPanel right = new JPanel();
    right.setOpaque(false);
    textCon.add(right);

    //Button Container
    JPanel buttonContainer = new JPanel();
    buttonContainer.setOpaque(false);
    add(BorderLayout.SOUTH,buttonContainer);

    //PREV Button
    JButton prev = new JButton("PREV");
    prev.setOpaque(false);
    ActionListener PrevList = new PrevButton(); //Call Button Listener
    prev.addActionListener(PrevList);
    buttonContainer.add(prev);

    //EXIT Button
    JButton exit = new JButton("EXIT");
    exit.setOpaque(false);
    ActionListener ExitList = new ExitButton(); //Call Button Listener
    exit.addActionListener(ExitList);
    buttonContainer.add(exit);

    //NEXT Button
    JButton next = new JButton("NEXT");
    next.setOpaque(false);
    ActionListener NextList = new NextButton(); //Call Button Listener
    next.addActionListener(NextList);
    buttonContainer.add(next);

    //File Handling
    try
    {
        File inputFile = new File ("ProjectInputFile.txt");
        Scanner scanner = new Scanner(inputFile);

        while(scanner.hasNextLine())
        {
            output = output + (scanner.nextLine() + "\n");
        }
    }
    catch(IOException ioe)
    {

    }

    //Add split strings to array
    hero = output.split("@");
}

//Prev button event listener
public class PrevButton implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        page = page - 1;
        if(page < 0)
        {
            page = hero.length;
        }
        mainText.setText(hero[page]);
    }
}

//Exit button event listener
public class ExitButton implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        setVisible(false);
        dispose();
        System.exit(0);
    }
}

//Next button event listener
public class NextButton implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        page++;
        if(page > (hero.length))
        {
            page = 0;
        }
        mainText.setText(hero[page]);
    }
}

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

}

这条线

mainText.add(scroller);

尝试将JScrollPane添加到JTextArea 您已经设置了JScrollPaneViewPortView ,因此不需要此行。

您仍然需要添加JSrolllPane

textCon.add(scroller);

还要确保在添加所有组件调用JFrame#setVisible

setVisible(true);

是否可以在滚动窗格上更改颜色或设置边框?

当然。 不是在JTextArea mainText上设置边框,而是在JScrollPane上设置它。

旁注:

  • 不要在不显示异常内容的情况下静默捕获IOException
  • JFrames通常直接使用而不是扩展

你只需要setBounds(x,y,z,w)到你的JScrollPane而不是你的JTextArea 然后将您的JSrcollPane添加到您的JPanelJFrame中。

暂无
暂无

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

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