JScrollpane只有在最大化窗口Java Swing之后才可见



我使用JScrollPane将一些值放入JTable中,但在用户单击按钮之前,JScrollPane必须是不可见的。但是,在我手动最大化窗口之前,JScrollPane仍然不可见。我几乎什么都试过了,.validate()。重新验证()。重新绘制()。。。我使用的是Netbeans,在JScrollPane的自定义代码上,我写了这样的代码:

scrollPane = new javax.swing.JScrollPane();
this.scrollPane.setVisible(false);
// El código de los subcomponentes y del gestor de distribución - no se muestra aquí
// El código que agrega el componente al contenedor superior - no se muestra aquí

然后,在鼠标释放:

private void botoGeneraLlistatMouseReleased(java.awt.event.MouseEvent evt) {
    this.generaLlistat();
}

和在generalLlistat()的末尾:

public void generaLlistat(){{
   ...(Some code requesting data from DB)
   JTable table = new JTable(rows, headings);
   scrollPane.setViewportView(table);
   this.scrollPane.setVisible(true);
   statement.close();
   connection.close();
}

如果有任何帮助,我将不胜感激:)谢谢大家,对我的英语语法和拼写感到抱歉。

尝试这样做:

package stack;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Aitor extends JFrame implements ActionListener{
    JTable table;
    JPanel panel = new JPanel();
    JButton button = new JButton("Add"); 
    String data[][]={{"hey","hey"},{"hey","hey"},{"hey","hey"},{"hey","hey"},                        {"hey","hey"},{"hey","hey"}
,{"hey","hey"},{"hey","hey"},{"hey","hey"},{"hey","hey"},{"hey","hey"},{"hey","hey"},{"hey","hey"},{"hey","hey"}
,{"hey","hey"},{"hey","hey"}};
    String columns[] = {"First","Second"};
    public Aitor(){
        setLayout(new BorderLayout());
        panel.setLayout(new BorderLayout());
        panel.setPreferredSize(new Dimension(500,400));
        button.addActionListener(this);
        add(panel,BorderLayout.CENTER);
        add(button, BorderLayout.SOUTH);
    }
    public static void main(String [] a){
        Aitor aitor = new Aitor();
        aitor.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        aitor.pack();
        aitor.setVisible(true);
    }
    @Override
    public void actionPerformed(ActionEvent arg0) {
        panel.removeAll();
        table =new JTable(data,columns);
        panel.add(new JScrollPane(table),BorderLayout.CENTER);
        repaint();
        revalidate();
    }
}

在调用setVisible(true)之后,只需在容器上调用pack(),就会出现滚动窗格。

您可以使用setPreferredScrollableViewportSize(),如这里和这里所示,尽管它有一些与这里提到的相同的缺点。

如果您正在使用jframe,请尝试此编码。

在构造函数方法中,给出

Jscrollpane.setVisible (false);

jframe中给出与您的jtable相关联的特定jscrollpane

然后在实际执行的方法中给出

Jscrollpane. setvisible (true); 
pack (); 

这会有帮助。。。。。

最新更新