3

Java 7 Swing アプリケーションで JXCollapsiblePane (SwingX バージョン 1.6.5.1) を使用しようとしています。小さなテストアプリを書くとき、私は次の問題を見ます:

  • トグル ボタンは折りたたみ可能なペインと同期していません。つまり、最初にボタンをクリックする必要があり、それからペインの状態と同期します。
  • どのトグル状態にあるかに関係なく、常に同じままである 1 つのアイコン (折りたたみまたは展開) のみが表示されます。

SSCCE である次のコードを使用します。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;

import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.UIManager;

import org.jdesktop.swingx.JXCollapsiblePane;
import org.jdesktop.swingx.JXFrame;

public class JXCollapsiblePaneBsp {

    public static void main(String[] args) {

        JXFrame frame = new JXFrame("JXCollapsiblePane-Example", true);

        JPanel container = new JPanel();
        container.setLayout(new BorderLayout());
        frame.add(new TestContainer());

        JXCollapsiblePane cp = new JXCollapsiblePane();
        cp.setAnimated(true);

        JLabel label = new JLabel("Text");
        label.setForeground(Color.WHITE);

        JButton butt = new JButton("click");
        JPanel panel = new JPanel(new FlowLayout());
        panel.setOpaque(true);
        panel.setBackground(Color.DARK_GRAY);
        panel.add(label);
        panel.add(butt);
        cp.add(panel);

        JPanel northContainer = new JPanel();
        northContainer.setLayout(new BorderLayout());
        JLabel title = new JLabel("Test");
        northContainer.add(title, BorderLayout.WEST);

        Action toggleAction =  cp.getActionMap().get(JXCollapsiblePane.TOGGLE_ACTION);
        toggleAction.putValue(JXCollapsiblePane.COLLAPSE_ICON, UIManager.getIcon("Tree.expandedIcon"));
        toggleAction.putValue(JXCollapsiblePane.EXPAND_ICON, UIManager.getIcon("Tree.collapsedIcon"));
        JToggleButton toggleButt = new JToggleButton(toggleAction);
        toggleButt.setText(""); 
        northContainer.add(toggleButt, BorderLayout.EAST);

        container.add(cp, BorderLayout.CENTER);
        container.add(northContainer, BorderLayout.NORTH);
        frame.setStartPosition(JXFrame.StartPosition.CenterInScreen);
        frame.setSize(300, 300);
        frame.setVisible(true);
    } 
}

これは互換性の問題ですか、それともここで何が間違っていますか? ありがとうございました!

更新: 数時間コードをデバッグした後、問題はアニメーションを終了していないようだと言えます。タイマーは常にイベントをキャンセルするため、開始されたアニメーション (アップまたはダウン) が終了することはありません。設定時

cp.setAnimated(false);

展開/折りたたみアクションは正常に機能します (もちろんアニメーションなし)。

4

0 に答える 0