0

Windows では、テーブルのツールチップ (JToolTip) をクリックすると、ツールチップが削除され、テーブル内の行が選択されます。ただし、Mac では、ツールチップを削除するだけのようで、テーブル内の行は選択されません。

コードは標準の JTable を使用するだけで、JTable の getToolTipText メソッドをオーバーライドします。カスタム JToolTip などは作成されません。

コード:

public class MyJTable extends JTable
{
    @Override
    public String getToolTipText(MouseEvent event)
    {
        return "Hello world";
    }
}

* *更新:さらに調査すると、この問題はこの バグ レポートに類似したものによるものと思われます。基本的に、ToolTipManager.showTipWindow() はツールチップを Mac では HeavyWeight コンポーネントとして作成し、Windows では LightWeight コンポーネントとして作成します。これにより、マウスリスナーが起動されなくなります。さらに悪い点は、popupType を軽量に設定しても、Java コードが popupFactory.getPopup(...) を呼び出すと、そのメソッドで重量コンポーネントとして作成されることです。

4

2 に答える 2

1

ToolTip をクリックしても JTable で MouseEvent が生成されない理由は、ToolTip がHEAVY_WEIGHT_POPUPではなくとして生成されるためLIGHT_WEIGHT_POPUPです。

これは、これを行う L&F のような単純なものであっても、多くの理由が原因である可能性があります。

Java Swing での動作方法はPopupFactory、ToolTip を作成することです。Java では、HeavyWeight コンポーネントと LightWeight コンポーネントを混在させると、いくつかの影響が生じる可能性があり、その結果、Java 5 ~ 6 (どれかは不明) の周りで Java 言語にこのプロパティを定義する機能が追加されましたが、一部の L&F ライブラリはそれを使用しないか、正しく準拠していません。 . また、古いバージョンを使用している場合は、それができない場合があります。このトグルの必要性の詳細については、トグルが Swing に追加される前の次のバグ レポートを参照してください。

いずれにせよ、コンポーネント (この場合は ToolTip) が HEAVY_WEIGHT_POPUP の場合、MouseEvent は JTable に伝搬されないため、ToolTip だけが消え、テーブルの行は選択されません。ToolTip は、MouseEvent が JTable に伝播するために LIGHT_WEIGHT_POPUP である必要があります。

于 2013-08-20T06:35:09.780 に答える