除非做了什么,否则如何使JList不可见?

时间:2014-05-20 19:57:05

标签: java swing jlist

我在Jlist中有三个JFrame个。理想情况下,前两个列表应始终可见,但第三个列表只有在您从第二个列表中选择特定项目时才可见。

除非选择第二个列表中的正确项目,否则有没有办法灰显或使最后一个列表不可见?我已经搜索了相当多的文档并查看了JList文档,但找不到解决方案。

以下是删除工作敏感内容后的相关代码:

//third list that should not appear unless specific item chosen in second list
dayPanel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

    dayLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    dayLabel.setText("<html><center>For new rows, are one or multiple outputs used?</center>\n<i>(only used if B is selected in the second list");

    dayTabList.setModel(new javax.swing.AbstractListModel() {
        String[] strings = { "3A", "3B" };
        public int getSize() { return strings.length; }
        public Object getElementAt(int i) { return strings[i]; }
    });
    dayTabList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
    dayTabList.setMaximumSize(new java.awt.Dimension(430, 32));
    dayTabList.setPreferredSize(new java.awt.Dimension(466, 32));
    dayTabList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
        public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
            dayTabListValueChanged(evt);
        }
    });
    dayScrollPane.setViewportView(dayTabList);

    javax.swing.GroupLayout dayPanelLayout = new javax.swing.GroupLayout(dayPanel);
    dayPanel.setLayout(dayPanelLayout);
    dayPanelLayout.setHorizontalGroup(
        dayPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, dayPanelLayout.createSequentialGroup()
            .addContainerGap()
            .addComponent(dayScrollPane)
            .addContainerGap())
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, dayPanelLayout.createSequentialGroup()
            .addContainerGap(51, Short.MAX_VALUE)
            .addComponent(dayLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(47, 47, 47))
    );
    dayPanelLayout.setVerticalGroup(
        dayPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(dayPanelLayout.createSequentialGroup()
            .addContainerGap()
            .addComponent(dayLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addComponent(dayScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(23, Short.MAX_VALUE))
    );


//listener for the second list
private void resultsTabListValueChanged(javax.swing.event.ListSelectionEvent evt) {                                            
    // TODO add your handling code here:
    String resultsTabChoice;
    resultsTabChoice = (String)resultsTabList.getSelectedValue();
    boolean adjust = evt.getValueIsAdjusting();
    if(!adjust){
        if(resultsTabChoice.equals("B")){
            dayTabList.setVisible(true);
        }else {
            dayTabList.setVisible(false);
              }
    }

}      

1 个答案:

答案 0 :(得分:0)

您可以使用addListSelectionListener,在第二个列表中添加一个实现ListSelectionListener的侦听器,并在此侦听器中实现valueChanged(ListSelectionEvent e),在此方法中检查是否选中了所需的值并列出您的列表看不见,我给你一个源样本:

import java.awt.EventQueue;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class SwingSample {

    private JFrame frame;

     /**
      * Launch the application.
     */
    public static void main(String[] args) {
         EventQueue.invokeLater(new Runnable() {
              public void run() {
                 try {
                      SwingSample window = new SwingSample();
                      window.frame.setVisible(true);
                 } catch (Exception e) {
                      e.printStackTrace();
                 }
              }
         });
    }

    /**
     * Create the application.
    */
    public SwingSample() {
       initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {

        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(1,2));

        // create the first list
        String[] data = {"one", "two", "three", "four"};
        JList firstList = new JList(data);
        frame.add(firstList);

        // create the second list
        String[] numbers = {"1", "2", "invisible", "4"};
        JList secondList = new JList(numbers);
        frame.add(secondList);
        // the listener
        myListListener listener = new myListListener(firstList);
        secondList.addListSelectionListener(listener);
    }
}

class myListListener implements ListSelectionListener{

    private JList jlist;
    public myListListener(JList value){
       this.jlist = value;
    }

    public void valueChanged(ListSelectionEvent e) {

        boolean adjust = e.getValueIsAdjusting();
        if(!adjust){
          // get the selected value
          String value = (String)((JList)e.getSource()).getSelectedValue();

          // if condition is accomplished make the second list invisible
          if(value.equals("invisible")){
             jlist.setVisible(false);
          }
          else{
             jlist.setVisible(true);    
          }
        }
    }
}

希望这有帮助,