Hay un JTable
en mi aplicación con columnas de encabezado de tamaño variable. Normalmente, cuando muevo el cursor sobre el encabezado de la tabla para cambiar el tamaño, el icono del cursor cambia a la flecha de cambio de tamaño, como < ->.El icono del cursor no cambia después de activar el método setCursor
Pero las cosas son diferentes en el siguiente escenario.
Hay una acción de botón en el mismo Frame
, y durante la acción realizada, coloco el cursor en el icono ocupado y lo cambio al cursor predeterminado una vez que se completa la acción, usando el método Container.setCurosr(Cursor cursor)
.
A veces, si muevo el cursor sobre el encabezado de la tabla de redimensionamiento, después de una acción de botón, el icono del cursor no cambia para cambiar el tamaño de la flecha, el cursor no cambia en absoluto.
¿Se puede considerar esto como un error en Java Swing o existe una solución para este problema?
Actualización: Código de ejemplo adjunta
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ColumnResizeIconTest extends JFrame {
JScrollPane scrollPane;
JTable table;
JButton button;
public ColumnResizeIconTest() {
setLayout(new BorderLayout());
addComponents();
setSize(300,300);
}
private void addComponents() {
addButton();
addTable();
}
private void addButton() {
button = new JButton("Click Me");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
setWaitCursor();
for(int i=0; i<2000; i++) {
System.out.print(i);
}
setDefaultCursor();
}
});
add(button, BorderLayout.NORTH);
}
private void addTable() {
scrollPane = new JScrollPane(createTable());
add(scrollPane, BorderLayout.CENTER);
}
private JTable createTable() {
Object[][] cellData = { { "1-1", "1-2","1-3" }, { "2-1", "2-2", "2-3" }, { "3-1", "3-2", "3-3" } };
String[] columnNames = { "column1", "column2", "column3" };
table = new JTable(cellData, columnNames);
return table;
}
private void setWaitCursor() {
Container container = getContentPane();
setWaitCursor(container);
}
private void setWaitCursor(Container container) {
for(int iCount = 0; iCount < container.getComponentCount(); iCount++) {
Component child = (Component) container.getComponent(iCount);
if(child instanceof Container) {
setWaitCursor((Container) child);
} else {
child.setCursor(new Cursor(Cursor.WAIT_CURSOR));
}
}
container.setCursor(new Cursor(Cursor.WAIT_CURSOR));
}
private void setDefaultCursor() {
Container container = getContentPane();
setDefaultCursor(container);
}
private void setDefaultCursor(Container container) {
for(int iCount = 0; iCount < container.getComponentCount(); iCount++) {
Component child = (Component) container.getComponent(iCount);
if(child instanceof Container) {
setDefaultCursor((Container) child);
} else {
child.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
container.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
public static void main(String[] argv) throws Exception {
ColumnResizeIconTest test = new ColumnResizeIconTest();
test.setVisible(true);
}
}
Haga clic en el botón varias veces y tratar de cambiar el tamaño de la columna de la tabla. El cursor está atascado con el cursor predeterminado.
¿qué versión de java en qué plataforma? –
1) Para una mejor ayuda antes, publique un [SSCCE] (http://sscce.org/). 2) * "Se puede considerar esto como un error ..." * Probablemente. * ".. en Java Swing .." * Probablemente no. * "... ¿o hay una solución para este problema?" * Arregle su código (probablemente). –
@ Andrew Thompson cuánto probablemente por hoy, de acuerdo con 4 probablemente de su 3. – mKorbel