setVisibleRowCount
and setLayoutOrientation
onを使用すると予期しない結果が得られJList
ます。JList
コンポーネントに次のコードがあります。
public class JListDemo extends JPanel {
private DefaultListModel listModel;
private JList list;
private JButton jbAdd;
private JButton jbRemove;
public JListDemo() {
super();
init();
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("JList Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new JListDemo());
frame.setResizable(false);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private void init() {
listModel = new DefaultListModel();
list = new JList(listModel);
//list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setVisibleRowCount(6);
list.setLayoutOrientation(JList.VERTICAL_WRAP);
JScrollPane scrollList = new JScrollPane(list);
jbAdd = new JButton("Add");
jbRemove = new JButton("Remove");
JPanel buttonPanel = new JPanel();
buttonPanel.add(jbAdd);
buttonPanel.add(jbRemove);
Box displayBox = Box.createVerticalBox();
displayBox.add(scrollList);
displayBox.add(buttonPanel);
add(displayBox);
bindListeners();
}
private void bindListeners() {
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting() == false) {
if (list.getSelectedIndex() == -1) {
jbRemove.setEnabled(false);
} else {
jbRemove.setEnabled(true);
}
}
}
});
jbAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String name = JOptionPane.showInputDialog(JListDemo.this, "Enter name for list:", "", JOptionPane.PLAIN_MESSAGE);
listModel.addElement(name);
}
});
jbRemove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
JList
GUI が表示されると、コンポーネントに直線しか見えませんでした。メソッドをコメントアウトすると、6 つの空の行が表示されたコンポーネントが表示setLayoutOrientation(JList.VERTICAL_WRAP)
されます。JList
なぜこれが起こったのですか?(注:JList
空です)。