2016-10-17 38 views
1

如何檢查這些類型的問題。當我檢查我的桌面應用程序的菜單時,有些顯示關閉按鈕的工具提示正確顯示,應該始終位於前面。但有些顯示在模態對話框的後面。模式對話框背後的工具提示

截圖的bug: Tooltip_issue

我種有同樣的問題作爲一個誰張貼這樣的:我們正在使用的Java Swing https://coderanch.com/t/460688/java/Glasspanes-tooltips

import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 


class GlassPaneContent extends JPanel { 

    GlassPaneContent() { 
     setSize(200, 50); 
     ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false); 
     JButton button = new JButton("A button"); 
     button.setToolTipText("A tooltip"); 
     add(button); 

    } 
} 

class GlassPane extends JPanel { 

    private static final Color BG_COLOR = new Color(0, 0, 0, 96); 
    private GlassPaneContent content = new GlassPaneContent(); 

    public GlassPane() { 
     setLayout(null); 
     setOpaque(false); 
     add(content); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     g.setColor(BG_COLOR); 
     g.fillRect(0, 0, getWidth(), getHeight()); 
     int x = (getWidth() - content.getWidth())/2; 
     int y = (getHeight() - content.getHeight())/2; 
     content.setLocation(x, y); 
     super.paintComponent(g); 
    } 
} 

public class MainWindow extends JFrame { 

    public MainWindow() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(500, 500); 
     GlassPane gp = new GlassPane(); 
     getRootPane().setGlassPane(gp); 
     gp.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new MainWindow().setVisible(true); 
    } 
} 

。請在下面評論,如果我需要發佈代碼。謝謝!

+0

請提供[SSCCE](http://sscce.org)和步驟重現它。 –

回答

1

試試這一個:

public class MainWindow extends JFrame { 

    public MainWindow() { 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setSize(500, 500); 
     GlassPane gp = new GlassPane(); 
     setContentPane(gp); 
     this.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new MainWindow(); 
    } 
} 
+0

它的工作!非常感謝。我只是想問一下,因爲我真的是java swing的新手。使用setContentPane(gp)到getRootPane()。setGlassPane(gp)有什麼區別? – Pseudonymous

+1

我很高興能幫到你!問題在於,因爲你使用'setGlassPane(gp)',你的JPanel實現作爲gui頂層的一個工作層。使用'paintComponent'方法在玻璃窗格上畫一個矩形(所以這部分不再是透明的),以便在隱藏它的工具提示上方。有關更多信息,請查看:https://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html –