这是我的代码的简化版本,如果这还不足以诊断问题,请发表评论,我会发布更多代码:
//All Necessary Imports
JFrame window;
Container container;
JPanel mainTextPanel;
JScrollPane scrollPane;
JTextArea mainText;
Font normalFont = new Font("Times New Roman", Font.PLAIN,30);
ChoiceHandler choiceHandler = new ChoiceHandler();
//Unrelated Variables
public class setUp()
{
public setUp()
{
window = new JFrame();
window.setSize(825,600);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().setBackground(Color.white);
window.setLayout(null);
container = window.getContentPane();
mainTextPanel = new JPanel();
mainTextPanel.setBounds(100,100,600,250);
mainTextPanel.setBackground(Color.white);
container.add(mainTextPanel);
//more code goes here
}
}
public class mainText extends setUp
{
public mainText()
{
mainText = new JTextArea("Tons of text here");
mainText.setBounds(100,100,600,250);
mainText.setBackground(Color.white);
mainText.setForeground(Color.black);
mainText.setFont(normalFont);
mainText.setLineWrap(true);
scrollPane = new
JScrollPane(mainText,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
mainTextPanel.add(scrollPane);
mainTextPanel.revalidate();
mainTextPanel.repaint();
mainTextPanel.setVisible(true);
//more code goes here
}
}
我的问题是,当我运行代码时,一切正常,除了ScrollPane显然无法检测到文本超出范围的事实。滚动条在那里,唯一的问题是你不能用它滚动,它看起来像文本没有超过限制时的滚动条。
当我在创建滚动条时删除ALWAYS修改器时,滚动条消失,再次证明滚动条根本不检测越界文本。
答案 0 :(得分:1)
我只是想指出为什么null
布局很糟糕......代码
这就是您的代码在我的系统上的显示方式。说实话,那里有滚动条,但是你试图取消布局管理API会导致JScrollPane
超出父容器的物理边界。
您似乎也不了解坐标系在Swing中的工作方式,与父组件的上下文有关,但如果您使用布局管理器,则不需要到。
因此,在更新代码后使用布局管理器
你知道有一个可以滚动的解决方案......
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
mainText mt = new mainText();
mt.window.pack();
mt.window.setLocationRelativeTo(null);
mt.window.setVisible(true);
}
});
}
public class setUp {
JFrame window;
Container container;
JPanel mainTextPanel;
JScrollPane scrollPane;
JTextArea mainText;
Font normalFont = new Font("Times New Roman", Font.PLAIN, 30);
public setUp() {
window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().setBackground(Color.white);
container = window.getContentPane();
mainTextPanel = new JPanel(new BorderLayout());
mainTextPanel.setBackground(Color.white);
container.add(mainTextPanel);
//more code goes here
}
}
public class mainText extends setUp {
public mainText() {
mainText = new JTextArea("Tons of text here");
mainText.setBackground(Color.white);
mainText.setForeground(Color.black);
mainText.setFont(normalFont);
mainText.setLineWrap(true);
scrollPane = new JScrollPane(mainText, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
mainTextPanel.add(scrollPane);
mainTextPanel.revalidate();
mainTextPanel.repaint();
//more code goes here
}
}
}
但水平滚动条在哪里?
mainText.setLineWrap(true);
本来不需要它
但是
JTextArea
是小的!
所以?提供一些适当的尺寸提示,组件可以使用这些提示来更好地确定它可能有多大。
mainText = new JTextArea("Tons of text here", 1, 10);
之类的东西会产生
所以,长期和简短的答案是,使用布局管理API,Swing是围绕它设计使用的,它将为您节省大量的头部刮擦和愚蠢的边缘情况
但是在我的系统上滚动条不会出现!?
回到开头,不要再花200美元再读一遍。其出现不同的原因是缺乏布局支持
但我不想使用/了解布局管理员!
坚韧。如果你想避免这种"怪异的"问题,然后布局管理API是正确的方向。花时间尝试不同的布局管理器并尝试不同的组合,你不会只使用一个,几乎所有复杂的UI将使用一个在单个复合UI中至少有两个(如果不是更多)布局管理器