相关疑难解决方法(0)

显示JOptionPane时,"解压缩"JButton

我有一种情况,我需要在点击JButton后显示一个JOptionPane.JButton有一个默认图标和一个翻转图标(显示鼠标滚过按钮的时间).但是,一旦单击按钮并显示JOptionPane,翻转图标就不会更改回原始图标,并继续保持这种状态,直到用户在选择适当的JOptionPane选项后将鼠标带回JButton的框架.如果单击JButton并显示JOptionPane,我将如何"取消翻转"它?

TL; DR:即使单击并显示JOptionPanel,JButton也会显示翻转图标.我不喜欢.

这是SSCCE:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;


public class ButtonUnrollover {

  public static void main(String[] args) {
    JFrame f = new JFrame();
    final JPanel p = new JPanel();
    JButton b = new JButton();
    b.setIcon(UIManager.getIcon("OptionPane.informationIcon"));
    b.setRolloverIcon(UIManager.getIcon("OptionPane.errorIcon"));
//    b.setSelectedIcon(UIManager.getIcon("OptionPane.informationIcon"));
//    b.setRolloverSelectedIcon(UIManager.getIcon("OptionPane.informationIcon"));
//    b.setPressedIcon(UIManager.getIcon("OptionPane.informationIcon"));
    p.add(b);
    b.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
        JOptionPane jOP = new JOptionPane("Dummy message");
        JDialog dialog = jOP.createDialog(p, null);
        dialog.setVisible(true);
      } …
Run Code Online (Sandbox Code Playgroud)

java swing jbutton joptionpane

9
推荐指数
1
解决办法
175
查看次数

何时在 Swing 应用程序中显示无效输入的错误消息

我正在使用JFormattedTextFieldfor 来格式化 Swing 应用程序的整数输入。无效输入的默认行为是安静地(即没有错误消息)将文本字段重置为其先前值。我想JOptionPane在将焦点返回到JFormattedTextField.

我最初的解决方案是FocusListener为我的文本字段实现s 。我考虑过FocusListener为每个子类添加相同子类的实例,但是自从我使用 NetBeans GUI Builder 以来遇到了问题。@HovercraftFullOfEels 建议我使用InputVerifier. 我已经实现了以下自定义 InputVerifier:

public class ValidTextFormatInputVerifier extends InputVerifier {

    @Override
    public boolean verify(JComponent jc) {
        return ((JFormattedTextField)jc).isEditValid();
    }
}
Run Code Online (Sandbox Code Playgroud)

在进一步研究这一点时,我得到了内部JFormattedTextField使用的印象InputVerifier。(不过,我还没有在任何地方找到明确的说明。)因此,我的习惯InputVerifier似乎是多余的。

更大的问题是文本字段仍然静默重置,没有任何错误消息。我可以添加一个电话到JOptionPane.showMessageDialog()这里。但是,这似乎不是显示错误消息的合适位置。在InputVerifier不知道输入无效的确切性质,也不知道有效的输入,这是更重要的,以提供一个有意义的错误消息的格式。

想到的第一个解决方案是添加一个构造函数,它接受一个String包含要显示的错误消息的参数。不过,这似乎是我将错误消息逻辑放在错误的地方。

是否有用于错误处理和向用户提供消息的通用 Java 习惯用法?您如何建议我设计我的应用程序以干净地显示错误消息?此外,如果我决定为使用不同平台(例如命令行、移动设备等)的软件设计界面,我希望能够尽可能多地重用现有代码库。(当然,由于这主要是 UI 问题,因此该要求可能不像我在这里希望的那样强烈。)

java error-handling user-interface swing

2
推荐指数
1
解决办法
3455
查看次数