2016-05-09 8 views
2

Java/SwingでNetbeansを使用していて、スクロールペインに問題があります。 まず、スクロールパネル内に2つのJPanelコンポーネントがあります。すべてのコンポーネントを初期化すると、2番目のパネルは表示されません。ボタンをクリックすると、2番目のパネルが表示され(動作する)、2番目のパネルを表示するために垂直スクロールバーが下に移動することが必要でした。私はボタンをクリックしたときにJScrollPaneの垂直スクロールバーをスクロールダウンする方法は?

私はこのコードを使用します。

public void eventoAdd() { 
     miVista.getJpanelSegundo().setVisible(true); 
     miVista.getJScrollPane1().getVerticalScrollBar().setValue(280); 
} 

垂直スクロールバーは、最初のクリックで下に行くことはありませんが、2番目の試みで、垂直スクロールバーのように見えるが下に行きます。何が問題ですか?

PS:多くの質問がありますが、この特定の質問についての回答はありません。

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 

/** 
* 
* @author rober 
*/ 
public class View extends javax.swing.JFrame { 

    /** 
    * Creates new form View 
    */ 
    public View() { 
    initComponents(); 
    jPanelSecond.setVisible(false); 

    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

    jScrollPaneFirst = new javax.swing.JScrollPane(); 
    jPanelMain = new javax.swing.JPanel(); 
    jPanelFirst = new javax.swing.JPanel(); 
    jPanelSecond = new javax.swing.JPanel(); 
    jButton1 = new javax.swing.JButton(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jScrollPaneFirst.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 

    jPanelFirst.setBorder(javax.swing.BorderFactory.createTitledBorder("First")); 

    javax.swing.GroupLayout jPanelFirstLayout = new javax.swing.GroupLayout(jPanelFirst); 
    jPanelFirst.setLayout(jPanelFirstLayout); 
    jPanelFirstLayout.setHorizontalGroup(
     jPanelFirstLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 0, Short.MAX_VALUE) 
    ); 
    jPanelFirstLayout.setVerticalGroup(
     jPanelFirstLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 61, Short.MAX_VALUE) 
    ); 

    jPanelSecond.setBorder(javax.swing.BorderFactory.createTitledBorder("Second")); 

    javax.swing.GroupLayout jPanelSecondLayout = new javax.swing.GroupLayout(jPanelSecond); 
    jPanelSecond.setLayout(jPanelSecondLayout); 
    jPanelSecondLayout.setHorizontalGroup(
     jPanelSecondLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 294, Short.MAX_VALUE) 
    ); 
    jPanelSecondLayout.setVerticalGroup(
     jPanelSecondLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGap(0, 63, Short.MAX_VALUE) 
    ); 

    javax.swing.GroupLayout jPanelMainLayout = new javax.swing.GroupLayout(jPanelMain); 
    jPanelMain.setLayout(jPanelMainLayout); 
    jPanelMainLayout.setHorizontalGroup(
     jPanelMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(jPanelFirst, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
     .addComponent(jPanelSecond, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 
    jPanelMainLayout.setVerticalGroup(
     jPanelMainLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanelMainLayout.createSequentialGroup() 
      .addComponent(jPanelFirst, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(jPanelSecond, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap()) 
    ); 

    jScrollPaneFirst.setViewportView(jPanelMain); 

    jButton1.setText("Add"); 
    jButton1.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      jButton1ActionPerformed(evt); 
     } 
    }); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(jScrollPaneFirst, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(98, 98, 98) 
        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE))) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addComponent(jScrollPaneFirst, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
      .addComponent(jButton1)) 
    ); 

    pack(); 
    }// </editor-fold>       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    jPanelSecond.setVisible(true); 
    jScrollPaneFirst.getVerticalScrollBar().setValue(280); 
    }           

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
    /* Set the Nimbus look and feel */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(View.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(View.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(View.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(View.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new View().setVisible(true); 
     } 
    }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JButton jButton1; 
    private javax.swing.JPanel jPanelFirst; 
    private javax.swing.JPanel jPanelMain; 
    private javax.swing.JPanel jPanelSecond; 
    private javax.swing.JScrollPane jScrollPaneFirst; 
    // End of variables declaration     
} 
+1

'scrollRectToVisible'を使用する方法を知っておく必要があります通常はトリックをします – MadProgrammer

+0

@MadProgrammerそれは私のためにwotkしません。 @AndrewThompsonDone。 –

+0

間違って申し訳ありません。 –

答えて

3

は個人的な好みとして、私はこれを達成するための最も確実な手段の一つであるためにscrollRectToVisibleを見つけることができますが、それは

Scroll

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    jPanelSecond.setVisible(true); 
    Rectangle viewBounds = jScrollPaneFirst.getViewportBorderBounds(); 
    Dimension size = jPanelMain.getPreferredSize(); 
    jPanelMain.scrollRectToVisible(new Rectangle(0, size.height, viewBounds.width, viewBounds.height)); 
    //jScrollPaneFirst.getVerticalScrollBar().setValue(280); 
} 
+0

Okよく動作します.Iiはjava.awt.Dimensionを使用していませんでしたが、java.awt.Rectangleを使用しました。どうもありがとう。 –

+0

私は、 'RowSorter'(フィルタも可能)を使っ​​た単一の列' JTable'が、可視/不可視リストのどの設定パネルが達成できるかを多く達成できることに気付きました。どのパネルが表示されているかをモデルに照会するには、行ソーターで少しのコードが必要になります。 –

関連する問題