【问题标题】:jPanels in jScrollPane does not workjScrollPane 中的 jPanel 不起作用
【发布时间】:2016-12-23 09:16:30
【问题描述】:

您好,我想在 jScrollPane 中插入面板,如水平列表,但面板不遵守我设置的边界,这是我的代码

public PrincipalPanel() {
        initComponents();
        for(int i=0;i<3;i++){
            addItem(new ItemCurso(),i);
        }
    }

    public void addItem(ItemCurso item,int index){
        item.setVisible(true);
        item.setBounds(400*index, 0, 400, 300);
        jScrollPane1.getViewport().add(item,null);
    }

ItemCurso 扩展自 jPanel,我设置的最后一个 ItemCurso 获取 jScrollpane 的大小并且滚动不起作用

ItemCurso的代码如下:

public class ItemCurso extends javax.swing.JPanel {

    public ItemCurso() {
        initComponents();
    }


    @SuppressWarnings("unchecked")
    private void initComponents() {

 jLabel1 = new javax.swing.JLabel();


 jPanel1 = new javax.swing.JPanel();
    nombreTxt = new javax.swing.JLabel();
    escuelaTxt = new javax.swing.JLabel();
    bimestresComboBox = new javax.swing.JComboBox();
    jButton1 = new javax.swing.JButton();
    jButton2 = new javax.swing.JButton();
    jButton3 = new javax.swing.JButton();
    jButton4 = new javax.swing.JButton();
    jButton5 = new javax.swing.JButton();
    jButton6 = new javax.swing.JButton();
    jButton7 = new javax.swing.JButton();

jLabel1.setText("jLabel1");

setBackground(new java.awt.Color(229, 232, 221));
setPreferredSize(new java.awt.Dimension(100, 100));

jPanel1.setBackground(new java.awt.Color(255, 255, 255));

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGap(0, 100, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
    jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGap(0, 100, Short.MAX_VALUE)
);

nombreTxt.setText("Nombre");

escuelaTxt.setText("Escuela");

bimestresComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));

jButton1.setIcon(new javax.swing.ImageIcon("C:\\Users\\Cristian_Franco\\Documents\\Sithec\\Proyectos\\Proyecto Escuelas\\SITCEA\\mavenproject1\\Images\\Resources\\Recurso 14.png")); // NOI18N

jButton2.setIcon(new javax.swing.ImageIcon("C:\\Users\\Cristian_Franco\\Documents\\Sithec\\Proyectos\\Proyecto Escuelas\\SITCEA\\mavenproject1\\Images\\Resources\\Recurso 28.png")); // NOI18N

jButton3.setIcon(new javax.swing.ImageIcon("C:\\Users\\Cristian_Franco\\Documents\\Sithec\\Proyectos\\Proyecto Escuelas\\SITCEA\\mavenproject1\\Images\\Resources\\Recurso 27.png")); // NOI18N

jButton4.setIcon(new javax.swing.ImageIcon("C:\\Users\\Cristian_Franco\\Documents\\Sithec\\Proyectos\\Proyecto Escuelas\\SITCEA\\mavenproject1\\Images\\Resources\\Recurso 29.png")); // NOI18N

jButton5.setIcon(new javax.swing.ImageIcon("C:\\Users\\Cristian_Franco\\Documents\\Sithec\\Proyectos\\Proyecto Escuelas\\SITCEA\\mavenproject1\\Images\\Resources\\Recurso 30.png")); // NOI18N

jButton6.setIcon(new javax.swing.ImageIcon("C:\\Users\\Cristian_Franco\\Documents\\Sithec\\Proyectos\\Proyecto Escuelas\\SITCEA\\mavenproject1\\Images\\Resources\\Recurso 31.png")); // NOI18N

jButton7.setIcon(new javax.swing.ImageIcon("C:\\Users\\Cristian_Franco\\Documents\\Sithec\\Proyectos\\Proyecto Escuelas\\SITCEA\\mavenproject1\\Images\\Resources\\Recurso 32.png")); // NOI18N

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
        .addContainerGap()
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(bimestresComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 15, Short.MAX_VALUE)
                        .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(nombreTxt)
                                    .addComponent(escuelaTxt)))
                            .addComponent(jButton7, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButton6, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, Short.MAX_VALUE)))))
        .addContainerGap())
);
layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
        .addContainerGap()
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(nombreTxt)
                .addGap(18, 18, 18)
                .addComponent(escuelaTxt))
            .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        .addGap(18, 18, 18)
        .addComponent(bimestresComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addGap(18, 18, 18)
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
            .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
        .addGap(18, 18, 18)
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
            .addComponent(jButton5, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
            .addComponent(jButton6, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26, Short.MAX_VALUE)
        .addComponent(jButton7, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))
);        

}// </editor-fold>   




    // Variables declaration - do not modify                     
    private javax.swing.JComboBox bimestresComboBox;
    private javax.swing.JLabel escuelaTxt;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton6;
    private javax.swing.JButton jButton7;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel nombreTxt;
    // End of variables declaration                   
} 

【问题讨论】:

  • 我们需要ItemCurso类的代码。没有它,我们将看不到您对setBounds() 的实现。
  • 好的,等一下
  • 我们需要所有的代码,包括生成的代码。
  • ok,把所有的代码都放上去

标签: java swing jscrollpane


【解决方案1】:
jScrollPane1.getViewport().add(item,null);

您不能向视口添加 3 个“项目”。您只能将单个组件添加到视口。

所以你的逻辑应该是这样的:

JPanel panel = new JPanel( ); // specify your layout manager here

for(int i=0;i<3;i++)
{
    panel.add( new ItemCurso() );
}

jScrollPane1.getViewport().add(panel);

默认情况下,JPanel 使用FlowLayout,因此所有组件将水平显示在同一行。

您需要在 ItemCurso 类中实现 getPreferredSize() 方法,以确保它返回 Dimension (400, 300)。不要尝试使用 setBounds(...)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    相关资源
    最近更新 更多