2016-10-17 3 views
1

Как проверить эти проблемы. Когда я проверил меню, которое у меня есть для настольного приложения, некоторые показывают правильный вывод всплывающей подсказки для кнопки закрытия, которая всегда должна быть спереди. Но некоторые отображаются в конце модального диалога.Подсказка за модальным диалогом

Скриншот ошибки: Tooltip_issue

I рода имеют те же проблемы, что и тот, кто разместил это: 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); 
    } 
} 

Мы используем JAVA Swing. Прошу прокомментировать ниже, если мне когда-нибудь понадобится опубликовать коды. Спасибо!

+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 –

Смежные вопросы