Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JScrollPane未出现_Java_Swing_Scroll_Jframe_Window - Fatal编程技术网

Java JScrollPane未出现

Java JScrollPane未出现,java,swing,scroll,jframe,window,Java,Swing,Scroll,Jframe,Window,我已经查看了许多与此相关的其他线程,但是建议的修复都不起作用。 我试过做contentPanel.revalidate()和contentPanel.repaint(),在添加它之后。我已经尝试将JScrollPane和JTextArea添加到contentPanel中,并且已经分别尝试了。我曾尝试过从JTextArea更改为JTextPane,但都不起作用。JTextArea在没有JScrollPane的情况下显示良好,但是当我添加它时,JTextArea完全消失。 我使用的是空布局,我认为这

我已经查看了许多与此相关的其他线程,但是建议的修复都不起作用。
我试过做
contentPanel.revalidate()
contentPanel.repaint(),在添加它之后。我已经尝试将JScrollPane和JTextArea添加到contentPanel中,并且已经分别尝试了。我曾尝试过从JTextArea更改为JTextPane,但都不起作用。JTextArea在没有JScrollPane的情况下显示良好,但是当我添加它时,JTextArea完全消失。
我使用的是空布局,我认为这可能是问题所在,但如果有一个解决方案不涉及更改布局,我更愿意这样做。如果没有办法修复它,除了改变布局,请让我知道。谢谢

下面是代码(这是一个JDialog窗口,是主窗口的弹出窗口):

导入java.awt.BorderLayout;
导入java.awt.Font;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.ItemEvent;
导入java.awt.event.ItemListener;
导入java.text.simpleDataFormat;
导入java.time.DateTimeException;
导入java.time.LocalDateTime;
导入java.time.Month;
导入java.util.ArrayList;
导入java.util.Calendar;
导入javax.swing.DefaultComboxModel;
导入javax.swing.JCheckBox;
导入javax.swing.JComboBox;
导入javax.swing.JDialog;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
导入javax.swing.border.EmptyBorder;
公共类事务对话框扩展JDialog
{
私有静态最终长serialVersionUID=6939141004692809959L;
私有最终JPanel contentPanel=新JPanel();
私有SimpleDataFormat monthDate=新SimpleDataFormat(“MMMM”);
私人JTextArea TXT交易;
私人JComboBox comboStartMonth;
私人JComboBox comboStartDay;
私人JComboBox comboStartYear;
私人JComboBox comboEndMonth;
私人JComboBox comboEndDay;
私人JComboBox comboEndYear;
私有JCheckBox chckbxStartDate;
私有JCheckBox chckbxEndDate;
/**
*创建对话框。
*/
公共事务对话框(银行帐户)
{
可设置大小(假);
/**
*填充(日、月、年)数组。
*/
ArrayList monthList=新建ArrayList();
对于(整数月=0;月<12;月++)
{
日历=Calendar.getInstance();
calendar.set(calendar.MONTH,MONTH);
字符串monthName=monthDate.format(calendar.getTime());
月列表。添加(月名称);
}
ArrayList dayList=新建ArrayList();
对于(整数天=1;天)
首先将布局设置为空:

    JScrollPane txtTScrollPane = new JScrollPane(txtTransactions);
    contentPanel.add(txtTScrollPane);
    //contentPanel.revalidate();
    //contentPanel.repaint();
然后将scrollpane添加到内容面板。但是,您没有在scrollpane上使用setBounds(),组件的默认大小为(0,0),因此没有任何可绘制的内容

但是,解决方案不是添加setBounds(…)。解决方案是不使用null布局。使用null布局似乎更容易,但随后会遇到类似问题,组件在滚动窗格中使用时无法正常工作

因此,正确的解决方案是修复代码并使用。Swing设计用于布局管理器。然后,布局管理器将设置组件的大小和位置,这样您就不必担心了

revalidate()和repaint()仅在将组件添加到可见GUI以调用布局管理器时使用,因此不需要它们

此外,在创建文本区域时,请执行以下操作:

//txtTransactions = new JTextArea();
txtTransactions = new JTextArea(5, 20);

这将使文本区域根据文本区域的行/列和字体确定其自己的首选大小。然后版面管理器可以做得更好。

setLayout(null)
是第一个新手错误-你没有理解版面管理者的重要性,也没有正确地接管他们的职责。调用
重新验证
是毫无意义的,因为它会触发一个新的版面传递,但是因为你没有使用版面管理器,所以它不会做任何事情。简单的回答-使用一个或多个专用项布局管理器是的,你是对的。空布局是我犯的错误,在将其更改为其他布局(网格袋布局)后,在创建JScrollPane时没有问题。感谢您指出这一点。请不要将解决方案添加到您的问题中。如果您找到了最适合您的解决方案,那么您可以在下面接受它或回答您自己的问题。此网站鼓励其他用户提供多种解决方案,因为最适合您的解决方案可能无法解决问题他最适合其他人。您的问题已回滚到以前的状态。有关更多信息,请访问。感谢您的输入。您建议我使用什么布局。此外,除了空布局,我应该避免哪些布局?我不知道您希望您的布局看起来像什么,因此我无法向我们建议什么布局管理器e、 在许多情况下,您不使用单一布局。相反,您将使用不同的布局管理器对子面板上的组件进行逻辑分组,以实现所需的布局。我为您提供了教程链接,以便您可以下载并播放示例,以了解它们各自的工作原理。使用网格包布局后,我成功地获得了JScrollPane工作没有问题。谢谢你的宝贵帮助。
    JScrollPane txtTScrollPane = new JScrollPane(txtTransactions);
    contentPanel.add(txtTScrollPane);
    //contentPanel.revalidate();
    //contentPanel.repaint();
//txtTransactions = new JTextArea();
txtTransactions = new JTextArea(5, 20);