2013-03-31 3 views
0

Если у меня есть полоса прокрутки, JTextArea просто исчезает. Без этого все в порядке. Может кто-нибудь, пожалуйста, объясните мне это? И как это исправить!Добавление ScrollPane делает мой 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(); 
} 

}

ответ

2

Эта линия

mainText.add (скроллер);

пытается добавить JScrollPane в JTextArea. Вы уже установили ViewPortViewJScrollPane, поэтому эта строка не нужна.

Вы все еще будет нужно добавить JSrolllPane:

textCon.add(scroller); 

Кроме того, убедитесь, чтобы позвонить JFrame#setVisibleпосле все компоненты были добавлены.

setVisible(true); 

возможно изменить цвет или установить границу на ScrollPane?

Несомненно. Вместо того, чтобы установить границу на JTextAreamainText, установите ее на JScrollPane.

Боковые ноты:

  • Не молча поймать IOException, не показывая содержание исключения
  • JFrames, как правило, используется непосредственно, а не расширение
+0

Спасибо, но это не помогло. Не добавляя панель прокрутки, у меня нет панели прокрутки. Добавление области прокрутки приводит к исчезновению JTextArea. Я расширил JFrame, потому что это для проекта в колледже, и именно так лектор хочет его по какой-то причине. – Aezur

+0

Добавьте 'JScrollPane' в' textCon' 'JPanel', а не в' JTextArea. См. Обновление – Reimeus

+0

Опять же, я ценю, что вы нашли время, чтобы помочь, но если я добавлю панель прокрутки в textCon, тогда макет будет испорчен. Я предположил, что это происходит из-за того, что он находится на сетке, и все три слота взяты, поэтому я избавился от одной из панелей наполнителя и добавил панель прокрутки в ее место, но затем я просто получаю большой серый блок, занимающий это пространство сетка, установлен ли я ложно или нет, и все еще нет панели прокрутки.Это всего лишь проект колледжа, и у меня есть работа (меньше текста = нет необходимости прокручивать, D), поэтому это не так важно, меня просто раздражает, что я не могу заставить его работать. – Aezur

-1

Вам просто нужно setBounds(x,y,z,w) к вашему JScrollPane, а не ваш JTextArea. Затем добавьте jSrcollPane к jFrame вашего jPanel.

Смежные вопросы