【问题标题】:Java Swing application Message dialog helpJava Swing 应用程序消息对话框帮助
【发布时间】:2011-10-09 10:20:26
【问题描述】:

我正在开发一个 Java Swing 应用程序。我需要创建一个如图所示的对话框。我不知道这个名字;我无法解释,所以我附上一张图片。 请告诉这叫什么以及如何在我的 GUI 应用程序中创建它。

【问题讨论】:

  • 看起来像自定义工具提示,基于未修饰的 JDialog#Modality 的 BaloonTip
  • 请说明你想要什么:一个黄色的盒子?删除的项目?突出显示的文字?定制封闭装饰?
  • 它似乎是某种状态或消息栏。我不记得在 Swing 中是否有内置方法可以做到这一点(我的经验非常有限),但也许这会帮助你找到它。
  • @trashgod 我需要一个黄色框和一个十字按钮来关闭此对话框。

标签: java swing user-interface


【解决方案1】:

给猫剥皮的方法不止一种


public final class JDialogDemo {
    private static BufferedImage bi;
    
    public static void main(String[] args){
        try {
            loadImage();
            
            SwingUtilities.invokeLater(new Runnable(){
                @Override
                public void run() {
                    createAndShowGUI();
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    private static void loadImage() throws IOException{
        bi = ImageIO.read(JDialogDemo.class.getResource("../resource/close-icon.png"));
    }
    
    private static void createAndShowGUI(){
        final JDialog dialog = new JDialog();
        dialog.setUndecorated(true);
        
        final JPanel panel = new JPanel(){
            @Override
            public Dimension getPreferredSize(){
                return new Dimension(400, 40);
            }
        };
        panel.setBorder(BorderFactory.createLineBorder(Color.GRAY));
        panel.setBackground(new Color(238, 221, 130));
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        
        final JLabel closeLabel = new JLabel();
        closeLabel.setIcon(new ImageIcon(bi));
        closeLabel.addMouseListener(new MouseAdapter(){
            @Override
            public void mouseClicked(MouseEvent e){
                dialog.dispose();
            }
        });
        
        panel.add(new JLabel("There are deleted items that used to be in this folder."));
        panel.add(Box.createHorizontalGlue());
        panel.add(closeLabel);
        dialog.add(panel);
        dialog.pack();
        dialog.setLocationRelativeTo(null);
        dialog.setVisible(true);
    }
}


这只是一个演示。您可以随意定制。

【讨论】:

【解决方案2】:

另一个方便的图标来源是UIManager。在这种情况下,JInternalFrame Look & Feel closeIcon 具有一定的吸引力,但others 也可用。

修改@Moonbeam 的answer 会产生以下结果。

private static final Icon icon = UIManager.getIcon("InternalFrame.closeIcon");
...
private static void createAndShowGUI() {
    ...
    closeLabel.setIcon(icon);
    ...
}

【讨论】:

  • 我很好奇这个closeIcon实际上关闭了对话框!
  • +1,非常好。关于您的评论,意味着您不需要添加MouseListener
  • @Moonbeam:哦,我忽略了MouseListener!顺便说一句,您可能需要在GradientPaintDemo 中设置复合,正如建议的here。另外,不要dispose() 不是您创建的图形上下文。
  • 感谢链接和建议。但我确实会处理我创建的图形上下文。这是一个副本。 :)
  • @Moonbeam:哦,再次。我被邪恶博士分心了? :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 2011-02-27
  • 2016-01-24
相关资源
最近更新 更多