简体   繁体   English

JAVA setVisible不会隐藏组件

[英]JAVA setVisible does not hide the component

i'm trying to hide all jLists except for 1 which i get from the index of the jcomboBox (cbLists), It doesn't really hide the jLists it's like disabled not hidden, I need it to hide all like completely invisible except for 1 this is the code i'm attempting: 我试图隐藏除从jcomboBox的索引(cbLists)中获得的1以外的所有jList,它并没有真正隐藏它像禁用而不是隐藏的jList,我需要它隐藏所有像完全不可见的1这是我正在尝试的代码:

package javaapplication2;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class Form1 extends javax.swing.JFrame {

    public Form1() {
        initComponents();

        ActionListener actionListener = (ActionEvent e) -> {
            System.out.println("Selected: " + cbLists.getSelectedItem());
            System.out.println(", Position: " + cbLists.getSelectedIndex());
            setCB(cbLists.getSelectedIndex());
        };
        cbLists.addActionListener(actionListener);
    }

    private void setCB(int index) {
        switch (index) {
            case 1:
                jList1.setVisible(false);
                jList4.setVisible(false);
                jList3.setVisible(false);
                jList2.setVisible(true);
                break;
            case 2:
                jList1.setVisible(false);
                jList2.setVisible(false);
                jList3.setVisible(true);
                jList4.setVisible(false);
                break;
            case 3:
                jList1.setVisible(false);
                jList2.setVisible(false);
                jList3.setVisible(false);
                jList4.setVisible(true);
                break;
            default:
                jList1.setVisible(true);
                jList2.setVisible(false);
                jList3.setVisible(false);
                jList4.setVisible(false);
                break;
        }

    }

    /**
     * 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() {

        cbLists = new javax.swing.JComboBox<>();
        jScrollPane1 = new javax.swing.JScrollPane();
        jList1 = new javax.swing.JList<>();
        jScrollPane2 = new javax.swing.JScrollPane();
        jList2 = new javax.swing.JList<>();
        jScrollPane3 = new javax.swing.JScrollPane();
        jList3 = new javax.swing.JList<>();
        jScrollPane4 = new javax.swing.JScrollPane();
        jList4 = new javax.swing.JList<>();

        cbLists.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "jList1", "jList2", "jList3", "jList4" }));

        jList1.setModel(new javax.swing.AbstractListModel<String>() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public String getElementAt(int i) { return strings[i]; }
        });
        jScrollPane1.setViewportView(jList1);

        jList2.setModel(new javax.swing.AbstractListModel<String>() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public String getElementAt(int i) { return strings[i]; }
        });
        jScrollPane2.setViewportView(jList2);

        jList3.setModel(new javax.swing.AbstractListModel<String>() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public String getElementAt(int i) { return strings[i]; }
        });
        jScrollPane3.setViewportView(jList3);

        jList4.setModel(new javax.swing.AbstractListModel<String>() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public String getElementAt(int i) { return strings[i]; }
        });
        jScrollPane4.setViewportView(jList4);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 248, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cbLists, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(622, Short.MAX_VALUE))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(25, 25, 25)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 248, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(612, Short.MAX_VALUE)))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(35, 35, 35)
                    .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 248, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(602, Short.MAX_VALUE)))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(45, 45, 45)
                    .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 248, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(592, Short.MAX_VALUE)))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 266, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cbLists, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(143, 143, 143))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(26, 26, 26)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 266, Short.MAX_VALUE)
                    .addGap(168, 168, 168)))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(36, 36, 36)
                    .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 266, Short.MAX_VALUE)
                    .addGap(158, 158, 158)))
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(46, 46, 46)
                    .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 266, Short.MAX_VALUE)
                    .addGap(148, 148, 148)))
        );

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

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {

        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 | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Form1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }


        /* Create and display the form */
        java.awt.EventQueue.invokeLater(() -> {
            new Form1().setVisible(true);
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JComboBox<String> cbLists;
    private javax.swing.JList<String> jList1;
    private javax.swing.JList<String> jList2;
    private javax.swing.JList<String> jList3;
    private javax.swing.JList<String> jList4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    // End of variables declaration                   
}

As you can see in the image jList2 is selected its behind jList1 i need it to be in the front and the rest invisible it's weird... 正如您在图像中看到的,jList2被选择在jList1的后面,我需要它在前面,其余部分不可见,这很奇怪。

在此处输入图片说明

I think you want to hide your jScrollPane1 - jScrollPane4. 我认为您想隐藏jScrollPane1-jScrollPane4。 So the grey boxes you are seeing are the JScrollPanes. 因此,您看到的灰色框是JScrollPanes。 They are not disabled, they are just empty because you have hidden the white List in it. 它们没有被禁用,它们只是空的,因为您已经在其中隐藏了白名单。 You have to hide the whole panes. 您必须隐藏整个窗格。

You can improve your code a bit if you want... for example you can create a List of Scrollpanes 您可以根据需要改进代码...例如,您可以创建滚动面板列表

private List<JScrollPane> scrollPaneList = new ArrayList<>();

and add your panes to the list 并将您的窗格添加到列表中

this.scrollPaneList.addAll(Arrays.asList(jScrollPane1, jScrollPane2, jScrollPane3, jScrollPane4));

and then you can do someting like this 然后你可以做这样的事

    private void setCB(int index)
    {
        for (int i = 0; i < scrollPaneList.size(); i++)
        {
            scrollPaneList.get(i).setVisible(index == i);
        }      

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM