[英]Adding a ScrollPane is making my JTextArea disappear
If I have the scrollbar, the JTextArea just vanishes.如果我有滚动条,JTextArea 就会消失。 Without it, everything is fine.
没有它,一切都很好。 Can someone please explain this to me?
有人可以向我解释一下吗? And how to fix it!
以及如何修复!
Also, as an aside, is it possible to change the color or set a border on the scrollpane?另外,顺便说一句,是否可以在滚动窗格上更改颜色或设置边框?
Here is the relevant code:这是相关的代码:
//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);
And here is the rest of it, just in case!这是它的其余部分,以防万一!
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();
}
} }
This line这条线
mainText.add(scroller); mainText.add(scroller);
attempts to add a JScrollPane
to a JTextArea
.尝试将
JScrollPane
添加到JTextArea
。 You have already set the ViewPortView
of the JScrollPane
so this line is unnecessary.您已经设置了
JScrollPane
的ViewPortView
,因此不需要此行。
You will still need to add the JSrolllPane
:您仍然需要添加
JSrolllPane
:
textCon.add(scroller);
Also make sure to call JFrame#setVisible
after all components have been added.还要确保在添加所有组件后调用
JFrame#setVisible
。
setVisible(true);
is it possible to change the color or set a border on the scrollpane?
是否可以在滚动窗格上更改颜色或设置边框?
Sure.当然。 Instead of setting the border on the
JTextArea
mainText
, set it on the JScrollPane
.不是在
JTextArea
mainText
上设置边框,而是在JScrollPane
上设置它。
Side notes:旁注:
IOException
without showing the exception contentIOException
JFrames
are typically used directly rather than extending JFrames
通常直接使用而不是扩展You just need to setBounds(x,y,z,w)
to your JScrollPane
and not your JTextArea
.你只需要
setBounds(x,y,z,w)
到你的JScrollPane
而不是你的JTextArea
。 Then add your JSrcollPane
to your JFrame
of your JPanel
.然后将您的
JSrcollPane
添加到您的JPanel
的JFrame
中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.