我在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);
}
}
}
答案 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);
}
}
}
}
希望这有帮助,