I tried to determime for every Items if are or not visible in the JViewPort from JComboBox drop-down list
(my Friday OT)
EDIT: I don't want to implements MouseListener for Repeats events to System.out.print(...)
isn't possible pass JComboBox with JList, declared by JCombo#Model by using SwingUtilities http://download.oracle.com/javase/6/docs/api/javax/swing/SwingUtilities.html , but this APi is out of my...
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ItemVisibleRecCombo extends JFrame {
private static final long serialVersionUID = 1L;
private JComboBox fontsBox;
public ItemVisibleRecCombo() {
String[] numbers = {"one", "two", "three", "four", "five", "six", "seven"};
fontsBox = new JComboBox(numbers);
fontsBox.setSelectedItem(0);
fontsBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
manItemInCombo();
}
}
});
fontsBox.setModel(new DefaultComboBoxModel(numbers));
fontsBox.setMaximumRowCount(3);
add(fontsBox, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(400, 60));
setLocation(200, 105);
pack();
setVisible(true);
}
private void manItemInCombo() {
if (fontsBox.getItemCount() > 0) {
final Object comp = fontsBox.getUI().getAccessibleChild(fontsBox, 0);
if ((comp instanceof JPopupMenu)) {
final JList list = new JList(fontsBox.getModel());
final JPopupMenu popup = (JPopupMenu) comp;
final JScrollPane scrollPane = (JScrollPane) popup.getComponent(0);
final JViewport viewport = scrollPane.getViewport();
final Rectangle rect = popup.getVisibleRect();
Point pt = viewport.getViewPosition();
for (int i = 0; i < list.getModel().getSize(); i++) {
pt = list.indexToLocation(i);
System.out.print(pt + " - ");
rect.setLocation(rect.x - pt.x, rect.y - pt.y);
System.out.println(new Rectangle(viewport.getExtentSize()).contains(rect));
}
}
}
}
public static void main(String arg[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ItemVisibleRecCombo ivrc = new ItemVisibleRecCombo();
}
});
}
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…