【问题标题】:JDialog appearing everytime my JSlider moves每次我的 JSlider 移动时都会出现 JDialog
【发布时间】:2012-11-20 17:15:56
【问题描述】:

每次我移动我的 JSlider 时,我的 JDialog 框都会针对它移动的每个位置出现,我只希望它在用户尝试移动 JSlider 而不他们从我的菜单中进行选择时显示一次。我该怎么做?

public void stateChanged(ChangeEvent e)
{
  if(myFrame.shape == null)
  {

JOptionPane.showMessageDialog(popUp, "You should select an item first.", "Information",     JOptionPane.WARNING_MESSAGE);
  }
  else if(myFrame.shape != null)
  {
    DecimalFormat df = new DecimalFormat("0.0");
    float value = diameterJSlider.getValue();
    String strValue = Float.toString(value);
    sliderLabel.setText(strValue);
    boundaryTextField.setText("" + df.format(myFrame.shape.getBoundary(value)));
    areaTextField.setText("" + df.format(myFrame.shape.getArea(value)));

    myTopPanel.reDraw(diameterJSlider.getValue());
  }

【问题讨论】:

  • 看起来你每次滑动滑块都会得到一个 NPE。
  • 您可能应该禁用滑块,直到他们从您的菜单中选择某些内容。
  • 你永远不应该抓到 NPE。这是不好的编程习惯。确定在 if 块中检查 null,但不像你正在做的那样。
  • 实际上在他们做出选择之前取消选择 JSlider 并不是一个坏主意。谢谢。
  • 啊,更好——我可以使用 setEnabled(boolean);

标签: java swing exception jdialog jslider


【解决方案1】:

但每次 JSlider 移动一个位置时,它都会生成 JDialog 框 出现在它移动的每个位置。如果你移动它 20 次,你 获得 JDialog 20 次。我该如何解决这个问题,所以它只出现 一次?

您可以尝试忽略调整事件,以获得所需的行为。

  public void stateChanged(ChangeEvent e) {
    JSlider source = (JSlider)e.getSource();
    if (!source.getValueIsAdjusting()) {
      // your code
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多