Курсоры изменения размера мыши не работают при использовании стеклянной панели
В приведенном ниже примере у меня есть таблица. Если навести указатель мыши на края столбца заголовка таблицы, курсор изменится на символ изменения размера курсора. Однако, если вы раскомментируете строку ниже, чтобы установить видимую стеклянную панель, курсор больше не изменится, но вы все равно сможете изменить размер столбцов и иным образом взаимодействовать с таблицей (например, выбрать ячейки таблицы и т. Д.).
Есть ли способ сохранить то же поведение курсора мыши при использовании стеклянной панели?
Мне нужно решение, которое будет работать в Java 6.
public class Test extends JPanel
{
public Test()
{
super(new GridLayout(1, 0));
String[] columnNames = { "First Name", "Last Name", "Sport", "# of Years", "Vegetarian" };
Object[][] data = { { "Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false) },
{ "John", "Doe", "Rowing", new Integer(3), new Boolean(true) }, { "Sue", "Black", "Knitting", new Integer(2), new Boolean(false) },
{ "Jane", "White", "Speed reading", new Integer(20), new Boolean(true) }, { "Joe", "Brown", "Pool", new Integer(10), new Boolean(false) } };
final JTable table = new JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("SimpleTableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel glass = (JPanel)frame.getGlassPane();
//glass.setVisible(true);
Test newContentPane = new Test();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
1 ответ
GlassPane
по умолчанию потреблять каждыйMouseEvents
, долженredispatch
эти события, но потом использоватьJLayer
(Java7) на основеJXLayer
(Java6) вместоGlassPane
GlassPane
по умолчанию никогда не потреблятьKeyEvents
нужно добавитьKeyListener
и позвонитьkeyEvent.consume()