0

これは非常に単純でわかりやすいと思いましたが、マウスを上に置いてもtooltiptextが表示されません。テキストを印刷してみましたが、正しく印刷されます。私が間違っていることについて何かコメントはありますか?

public class gui2 extends JFrame {
private JLabel item1;
public gui2() {
    super("The title bar");
    setLayout(new FlowLayout());
    item1 = new JLabel("label 1");
    item1.setToolTipText("This is a message");
    String str = item1.getToolTipText();
    System.out.println(str);
    add(item1);
}

   class gui {
public static void main(String[] args) {

    gui2 g2 = new gui2();
    g2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    g2.setSize(400, 200);
    g2.setVisible(true);
}

}}

4

2 に答える 2

2

@restricteur で述べたように、コードはコンパイルされません。

これは、guiを保持するクラスmain(..)が別のクラス内にネストされているためです。したがってstatic、ネストされたクラスがマークされていない限り、メソッドの宣言は許可されませんstatic。(私は単純に から移動/ネスト解除GuiしましたGui2)

あなたのコードが機能することに加えて、私はあなたが急いでいると思います-マウスを JLabel 3〜4秒間保持すると、次のようToolTip表示されます。

(もちろん、コンパイルエラーなしでコードを使用してください): ここに画像の説明を入力

コードに関する提案:

1) Java の命名規則に注意してください。つまり、クラス名は大文字で始まり、その後の新しい単語もorにguiなる必要がありますが、私は前者を好みます。GuiGUI

2) 可視に設定する前 (ただし、コンポーネントが追加された後) に use を呼び出さず、setSize適切JFrameな値LayoutManagerを呼び出します。pack()JFrame

JFrame3)インスタンスを作成して使用するだけで、不必要に拡張しないでください。

4) 常にブロックを介してイベント ディスパッチ スレッドで Swing コンポーネントを作成および操作します。SwingUtilities.invokeLater(Runnable r)

5) s をsetDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);使用しない場合は、GUI を終了しても続行できるため、これを選択します。Timermain(..)

上記の修正を含むコードは次のとおりです。

ここに画像の説明を入力

import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

class Gui2 {

    private JLabel item1;
    private JFrame frame;

    public Gui2() {
        frame = new JFrame("The title bar");
        frame.setLayout(new FlowLayout());
        item1 = new JLabel("label 1");
        item1.setToolTipText("This is a message");
        String str = item1.getToolTipText();
        System.out.println(str);
        frame.add(item1);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

class Gui {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Gui2();
            }
        });
    }
}
于 2013-01-17T21:51:01.880 に答える
2

インポートを追加しても、コードはコンパイルされません。これが修正されたコードです。

import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Gui {
    public static void main(String[] args) {

        Window window = new Window();
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setSize(400, 200);
        window.setVisible(true);
    }
}

class Window extends JFrame {
    private static final long serialVersionUID = 1L;
    private JLabel jlabel;

    public Window() {
        super("The title bar");
        setLayout(new FlowLayout());
        jlabel = new JLabel("label 1");
        jlabel.setToolTipText("This is a message");
        String str = jlabel.getToolTipText();
        System.out.println(str);
        add(jlabel);
    }
}
于 2013-01-17T21:11:44.867 に答える