Java 在选择面板之前,列表选择侦听器不会显示
以下代码在左侧显示列表,在右侧显示内容。因此,当列表中的某个项目被选中时,它应该在右侧显示某些内容(这使用拆分窗格)。问题在于,当选择某个项目时,它不会显示,而是在单击分隔符时显示。我想知道下面的代码有什么问题,当选择列表中的项目时,它不会自动显示内容。提前谢谢 下面显示了我遇到问题的部分代码:Java 在选择面板之前,列表选择侦听器不会显示,java,user-interface,jsplitpane,Java,User Interface,Jsplitpane,以下代码在左侧显示列表,在右侧显示内容。因此,当列表中的某个项目被选中时,它应该在右侧显示某些内容(这使用拆分窗格)。问题在于,当选择某个项目时,它不会显示,而是在单击分隔符时显示。我想知道下面的代码有什么问题,当选择列表中的项目时,它不会自动显示内容。提前谢谢 下面显示了我遇到问题的部分代码: public class FrequentQuestions implements ActionListener{ @Override public void actionPerformed(Acti
public class FrequentQuestions implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
frame = new MyInternalFrame("Frequently Asked Questions");
String [] options = {"How to open/save images", "formats", "info"};
JList list = new JList(options);
panelQuestions.add(list);
list.addListSelectionListener(new ListSelectionListener(){
@Override
public void valueChanged(ListSelectionEvent e) {
// TODO Auto-generated method stub
if(e.getValueIsAdjusting())
return;
//String [] options2 = {"hello","bye"};
//JList list2 = new JList(options2);
JList list = (JList) e.getSource();
if (list.isSelectionEmpty()) {
System.out.println("list selection is empty!");
}
else{
int index = ((JList)e.getSource()).getSelectedIndex();
if(index == 0){
readFile();
}
else if(index == 1){
System.out.println("2nd item selected");
}
else{
System.out.println("3rd item selected");
}
}
}
});
scroll = new JScrollPane(panelAnswers,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panelQuestions, scroll);
pane.setAutoscrolls(true);
pane.setOpaque(true);
panelQuestions.setMinimumSize(new Dimension(200,50));
panelQuestions.setBackground(new Color(0,0,0,0));
panelAnswers.setMinimumSize(new Dimension(100,30));
pane.setOneTouchExpandable(true);
pane.setDividerLocation(250);
frame.add(pane);
frame.setVisible(true);
desk.add(frame);
try {
frame.setSelected(true);
} catch (java.beans.PropertyVetoException e1) {
}
}
}
以下是完整代码(可能无法编译,因为我有文本文件,我不知道这是否有帮助):
这是一个有效的
列表选择侦听器
:
public class FrequentQuestions extends JFrame {
final JLabel label = new JLabel("TEXT");
public FrequentQuestions() {
JList<String> list = new JList<String>(new String[]{"A", "B"});
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting())
return;
JList<String> list = (JList<String>) e.getSource();
label.setText(list.getSelectedValue());
}
});
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, list, label);
add(split);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
new FrequentQuestions();
}
}
公共类频繁问题扩展JFrame{
最终JLabel标签=新JLabel(“文本”);
公共问题{
JList list=newjlist(新字符串[]{“A”,“B”});
addListSelectionListener(新的ListSelectionListener(){
public void值已更改(ListSelectionEvent e){
如果(如getValueIsAdjusting())
回来
JList=(JList)e.getSource();
label.setText(list.getSelectedValue());
}
});
JSplitPane split=新的JSplitPane(JSplitPane.HORIZONTAL_split,list,label);
添加(拆分);
setLocationRelativeTo(空);
setDefaultCloseOperation(关闭时退出);
包装();
setVisible(真);
}
公共静态void main(字符串[]args){
新的常见问题();
}
}
您的ActionListener(FrequentQuestions)附加到了什么操作?FrequentQuestions类是从GUI类调用的,该类包含一个按钮。单击该类时,它将打开一个拆分窗格窗口(在该类中实现)。我希望这能回答你的问题,我有点不确定你问的是什么。你的代码没有编译,请发布一个。我已经把我正在使用的完整代码。这应该是可行的,因为它在我的电脑上编译。主要的问题是,当点击左边的某个东西时,它不会在右边显示信息,相反,你必须点击分隔符来显示它。我希望这能解释我遇到的问题,而不是代码工作得很好。@selena你想在列表和标签之间设置一个拆分窗格吗?@selena我添加了一个拆分窗格。非常感谢!它最终工作了,而不是使用标签,我使用了文本窗格,它的格式非常好!再次感谢你。
public class FrequentQuestions extends JFrame {
final JLabel label = new JLabel("TEXT");
public FrequentQuestions() {
JList<String> list = new JList<String>(new String[]{"A", "B"});
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting())
return;
JList<String> list = (JList<String>) e.getSource();
label.setText(list.getSelectedValue());
}
});
JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, list, label);
add(split);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setVisible(true);
}
public static void main(String[] args) {
new FrequentQuestions();
}
}