サイズ変更可能なヘッダー列を持つアプリケーションにJTable
があります。通常、サイズ変更のためにカーソルをテーブルヘッダーに移動すると、カーソルアイコンは< - >のようなサイズ変更の矢印に変わります。setCursorメソッドをトリガーした後にカーソルアイコンが変わらない
ただし、次のような状況では状況が異なります。
Frame
にボタンアクションがあり、実行中にカーソルをビジーアイコンに設定し、操作が完了したらContainer.setCurosr(Cursor cursor)
メソッドを使用してデフォルトカーソルに戻します。
サイズ変更の表ヘッダーにカーソルを移動すると、ボタン操作後にカーソルアイコンがサイズ変更の矢印に変更されず、カーソルがまったく変更されないことがあります。
これはJava Swingのバグと見なすことができますか、この問題の解決方法はありますか?
更新:サンプルコードでは、ボタンを数回
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);
}
}
クリックを添付して、テーブルの列のサイズを変更してみてください。カーソルがデフォルトカーソルで止まっています。
どのプラットフォームでどのバージョンのJavaを使用しますか? –
1)より良いヘルプを早急に入手するには、[SSCCE](http://sscce.org/)を投稿してください。 2)* "これはバグと見なすことができますか?" *おそらく。 * ".. Java Swing .." *おそらくそうではありません。 * "..またはこの問題の解決方法はありますか?" *あなたのコードを修正しました(おそらく)。 –
@Andrew Thompson今日はどれくらいでしょうか?おそらくあなたの3からおそらく4と合意しました。 – mKorbel