2012-07-08 3 views
3

JOptionPane.showMessageDialog ("Some Text") 뒤에 가 표시되면 도구 설명이 비활성화되고 다시 활성화하는 방법을 알 수 없습니다. 여기에 문제 데모 몇 가지 코드입니다 : 대화 상자를 표시 한 후 ToolTipText입니다 설정하면 도구 설명을 다시 사용하지 않는JOptionPane.showMessageDialog를 표시 한 후에 Java에서 툴팁을 활성화하십시오.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ToolTipError extends JPanel{ 
    JButton button; 

    public ToolTipError() { 
    button = new JButton("ToolTipHere"); 
    button.setToolTipText("This is Java! There is no help"); 

    button.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
     buttonActionPerformed(evt); 
     } 
    }); 

    add(button); 
    } 

    void buttonActionPerformed(ActionEvent env) { 

    System.out.println("Button pushed."); //TEST 

    JOptionPane.showMessageDialog(null, "This disables ToolTips!"); 

    // This does not re-enable the tool tip: 
    button.setToolTipText("This is Java! There is no help"); 

    // Nor does this: 
    ToolTipManager.sharedInstance().setEnabled(true); 
} 

    void start() { 
    //Create and set up the window. 
    JFrame frame = new JFrame("ToolTipError"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //Create and set up the content pane. 
    ToolTipError newContentPane = new ToolTipError(); 
    newContentPane.setOpaque(true); 
    frame.setContentPane(newContentPane); 

    //Display the window. 
    frame.pack(); 
    frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
    ToolTipError tte = new ToolTipError(); 
    tte.start(); 
    } 
} 

참고 않으며, ToolTipManager에 그들을 다시 활성화 않습니다.

화면에서 창을 움직이면 도구 팁이 마술처럼 다시 작동하기 시작합니다.

위 코드는 주변에서 놀고 싶다면 "Out of the box"를 컴파일해야합니다.

미리 감사드립니다.

+2

'showMessageDialog (...)'아래의 모든 항목을 제거해도이 기능은 정상적으로 작동하므로 메시지 팝업이 다시 시작되고 다시 'JButton '위에 마우스를 올려 놓으면 툴팁을 볼 수 있습니다. 기대하지 않았 으면 좋겠다. JOptionPane이 화면 상에있을 때 툴팁을 보여줄 것이다. 모달이기 때문에 문제의'JFrame'은 포커스를 얻지 못할 것이다. –

+2

은 재생산 할 수 없습니다 - tooltiptext를 한 번 설정하면 올바르게 작동합니다 (jdk 7/win7) – kleopatra

+0

@nIcEcOw +1 지원되지 않는 예상에 대한 생각 :-) "지원되지 않음"은 약간의 예상치 못한 생각이지만 네이티브 툴팁이 표시됩니다 .. – kleopatra

답변

2

당신의 오류는 나를 위해 언급 한 작품 JDK6/7, WINXP/7

JFrame frame = new JFrame("ToolTipError"); 

EDIT를 사용합니다 경우

Frame frame = new JFrame("ToolTipError"); 

가 제대로 일을 할 수있는 코드 라인에서 단순 오타입니다

import java.awt.event.*; 
import javax.swing.*; 

public class ToolTipError extends JPanel { 

    private static final long serialVersionUID = 1L; 
    private JButton button; 

    public ToolTipError() { 
     button = new JButton("ToolTipHere"); 
     button.setToolTipText("Press the button !"); 
     button.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent evt) { 
       System.out.println("Button pushed."); 
       JOptionPane.showMessageDialog(button.getParent(), "This disables ToolTips!"); 
       button.setToolTipText("This is Java! There is no help"); 
      } 
     }); 
     add(button); 
    } 

    void start() { 
     ToolTipManager ttm = ToolTipManager.sharedInstance(); 
     ttm.setInitialDelay(0); 
     ttm.setDismissDelay(10000); 

     ToolTipError newContentPane = new ToolTipError(); 
     newContentPane.setOpaque(true); 

     JFrame frame = new JFrame("ToolTipError"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setContentPane(newContentPane); 
     frame.pack(); 
     frame.setLocation(150, 150); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       ToolTipError tte = new ToolTipError(); 
       tte.start(); 
      } 
     }); 
    } 
} 
+0

그건 실제로 "엉성한 복사본"오류입니다. 그것은 내 원래의 코드에 없었고 그것을 찾은 것에 대해 감사합니다. 도구 팁은 고정 된 후에도 여전히 작동하지 않습니다. – Boffin

+0

아니요, 중요하지 않습니다. 프레임이 잘 작동합니다 (JFrame 특정 api를 제거하고 newcontentPane을 추가하여 컴파일 가능한 코드를 만든 후) – kleopatra

+0

한 번만 작성하여 어디서나 실행할 수 있습니다. 그것은 윈도우 박스에서는 OK 일 수 있지만 리눅스에서는 그렇지 않을 것입니다 (Slackware 12.0). – Boffin

관련 문제