【问题标题】:JScrollpane only visible after maximising window Java SwingJScrollpane 仅在最大化窗口 Java Swing 后可见
【发布时间】:2012-08-31 23:21:30
【问题描述】:

我正在使用 JScrollPane 将一些值放入 JTable 中,但在用户单击按钮之前,JScrollPane 必须是不可见的。但是在我手动最大化窗口之前,JScrollPane 仍然不可见。我已经尝试了几乎所有东西,.validate(); .revalidate(); .repaint()... 我正在使用 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í

然后,在 MouseReleased 上:

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

然后在generaLlistat() 的末尾:

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();
}

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

【问题讨论】:

    标签: java swing jtable jscrollpane maximize


    【解决方案1】:

    尝试这样做:

    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();
        }
    }
    

    【讨论】:

    • 哦,对不起,我没有礼貌,那一刻我真的很情绪化。谢谢:D
    【解决方案2】:

    您可以在调用setVisible(true) 之后在您的容器上调用pack(),然后您的滚动窗格就会出现。

    【讨论】:

    • 调用 pack() 确实有效,这种方法的唯一缺点是 UI 将进入“恢复”模式。如果您希望 UI 处于最大化模式,这会产生问题。使用 'setExtendedState(MAXIMIZED_BOTH);'在 pack() 之后应该会有所帮助。
    【解决方案3】:

    您可以使用setPreferredScrollableViewportSize(),如herehere 所示,尽管它有一些与here 相同的缺点。

    【讨论】:

      【解决方案4】:

      如果你使用jframe,试试这个编码。

      在构造方法中,给

      Jscrollpane.setVisible (false);
      

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

      然后在actionperformed方法中给出

      Jscrollpane. setvisible (true); 
      pack (); 
      

      这会有所帮助.....

      【讨论】:

        猜你喜欢
        • 2014-08-08
        • 2020-07-14
        • 1970-01-01
        • 1970-01-01
        • 2012-10-01
        • 1970-01-01
        • 2015-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多