【问题标题】:JSlider is drawn incomplete, Working with NetbeansJSlider 绘制不完整,使用 Netbeans
【发布时间】:2015-04-13 23:45:17
【问题描述】:

我正在使用 JSlider,但是当我执行我的应用程序时,JSlider 绘制不完整。

使用 JSlider 的设计时间

我的Java代码改变所代表的值:

//The first JSlider jsDur (170, 180, 190, 200)
Enumeration ed = jsDur.getLabelTable().keys();
while (ed.hasMoreElements()) {
  Integer i = (Integer) ed.nextElement();
  JLabel label = (JLabel) jsDur.getLabelTable().get(i);
  Double d = (double)i / 10.0;
  label.setText(String.valueOf(i / 10));
}

//The second JSlider jsAmp (26000, 28000, 30000)
Enumeration ea = jsAmp.getLabelTable().keys();
while (ea.hasMoreElements()) {
  Integer i = (Integer) ea.nextElement();
  JLabel label = (JLabel) jsAmp.getLabelTable().get(i);
  Integer a = (int)Math.pow(2.0, (double)i/2000.0);
  label.setText(a.toString());
}

使用 JSlider 的执行时间

检查 jsDur value= 20!!,但使用默认字体...如 jsDur,因为我更改了 jsAmp 的字体以避免此问题,但没有解决。

问题 2

如何aling(左右,相同的大小,不同的JSlider的位置相同)?请检查图像...

设计时的完整图像

执行时间的完整图像

EDIT 1 Version 2 完整代码:

package JA_JF_JComboBox;

import java.util.Enumeration;
import javax.swing.JLabel;
public class JF_Test_JComboBox extends javax.swing.JFrame {

  public JF_Test_JComboBox() {
    initComponents();
    Enumeration ed = jsDur.getLabelTable().keys();
    while (ed.hasMoreElements()) {
      Integer i = (Integer)ed.nextElement();
      JLabel label = (JLabel)jsDur.getLabelTable().get(i);
      Double d = (double)i / 10.0;
      label.setText(String.valueOf(i / 10));
    }
    Enumeration ea = jsAmp.getLabelTable().keys();
    while (ea.hasMoreElements()) {
      Integer i = (Integer)ea.nextElement();
      JLabel label = (JLabel)jsAmp.getLabelTable().get(i);
      Integer a = (int)Math.pow(2.0, (double)i/2000.0);
      label.setText(a.toString());
    }
  }

  @SuppressWarnings("unchecked")
  // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
  private void initComponents() {

    jpMake = new javax.swing.JPanel();
    jpDur = new javax.swing.JPanel();
    jsDur = new javax.swing.JSlider();
    jpAmp = new javax.swing.JPanel();
    jsAmp = new javax.swing.JSlider();
    jpT = new javax.swing.JPanel();
    jsT = new javax.swing.JSlider();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jpDur.setBackground(new java.awt.Color(255, 255, 255));
    jpDur.setPreferredSize(new java.awt.Dimension(1628, 56));

    jsDur.setMajorTickSpacing(10);
    jsDur.setMaximum(200);
    jsDur.setMinorTickSpacing(2);
    jsDur.setPaintLabels(true);
    jsDur.setPaintTicks(true);
    jsDur.setSnapToTicks(true);
    jsDur.setToolTipText("");
    jsDur.setName(""); // NOI18N

    javax.swing.GroupLayout jpDurLayout = new javax.swing.GroupLayout(jpDur);
    jpDur.setLayout(jpDurLayout);
    jpDurLayout.setHorizontalGroup(
      jpDurLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpDurLayout.createSequentialGroup()
        .addGap(108, 108, 108)
        .addComponent(jsDur, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addContainerGap())
    );
    jpDurLayout.setVerticalGroup(
      jpDurLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(jpDurLayout.createSequentialGroup()
        .addComponent(jsDur, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addContainerGap())
    );

    jpAmp.setBackground(new java.awt.Color(255, 255, 255));
    jpAmp.setFont(new java.awt.Font("Times New Roman", 0, 10)); // NOI18N
    jpAmp.setPreferredSize(new java.awt.Dimension(1628, 56));

    jsAmp.setMajorTickSpacing(2000);
    jsAmp.setMaximum(30000);
    jsAmp.setMinorTickSpacing(1000);
    jsAmp.setPaintLabels(true);
    jsAmp.setPaintTicks(true);
    jsAmp.setSnapToTicks(true);
    jsAmp.setToolTipText("");
    jsAmp.setValue(30000);
    jsAmp.setPreferredSize(new java.awt.Dimension(200, 45));

    javax.swing.GroupLayout jpAmpLayout = new javax.swing.GroupLayout(jpAmp);
    jpAmp.setLayout(jpAmpLayout);
    jpAmpLayout.setHorizontalGroup(
      jpAmpLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jpAmpLayout.createSequentialGroup()
        .addGap(108, 108, 108)
        .addComponent(jsAmp, javax.swing.GroupLayout.DEFAULT_SIZE, 1193, Short.MAX_VALUE)
        .addContainerGap())
    );
    jpAmpLayout.setVerticalGroup(
      jpAmpLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(jpAmpLayout.createSequentialGroup()
        .addComponent(jsAmp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addGap(12, 12, 12))
    );

    jpT.setBackground(new java.awt.Color(255, 255, 255));
    jpT.setFont(new java.awt.Font("Times New Roman", 0, 10)); // NOI18N

    jsT.setFont(new java.awt.Font("Times New Roman", 0, 10)); // NOI18N
    jsT.setMajorTickSpacing(12);
    jsT.setMaximum(128);
    jsT.setMinorTickSpacing(1);
    jsT.setPaintLabels(true);
    jsT.setPaintTicks(true);
    jsT.setSnapToTicks(true);
    jsT.setToolTipText("");
    jsT.setValue(69);
    jsT.setPreferredSize(new java.awt.Dimension(200, 45));

    javax.swing.GroupLayout jpTLayout = new javax.swing.GroupLayout(jpT);
    jpT.setLayout(jpTLayout);
    jpTLayout.setHorizontalGroup(
      jpTLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(jpTLayout.createSequentialGroup()
        .addGap(108, 108, 108)
        .addComponent(jsT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        .addContainerGap())
    );
    jpTLayout.setVerticalGroup(
      jpTLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(jpTLayout.createSequentialGroup()
        .addGap(0, 0, 0)
        .addComponent(jsT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addContainerGap())
    );

    javax.swing.GroupLayout jpMakeLayout = new javax.swing.GroupLayout(jpMake);
    jpMake.setLayout(jpMakeLayout);
    jpMakeLayout.setHorizontalGroup(
      jpMakeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(jpMakeLayout.createSequentialGroup()
        .addGap(6, 6, 6)
        .addGroup(jpMakeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
          .addComponent(jpAmp, javax.swing.GroupLayout.DEFAULT_SIZE, 1311, Short.MAX_VALUE)
          .addComponent(jpDur, javax.swing.GroupLayout.DEFAULT_SIZE, 1311, Short.MAX_VALUE)
          .addComponent(jpT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        .addGap(0, 70, Short.MAX_VALUE))
    );
    jpMakeLayout.setVerticalGroup(
      jpMakeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(jpMakeLayout.createSequentialGroup()
        .addGap(2, 2, 2)
        .addComponent(jpDur, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addGap(28, 28, 28)
        .addComponent(jpAmp, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addGap(2, 2, 2)
        .addComponent(jpT, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
        .addContainerGap(39, Short.MAX_VALUE))
    );

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGap(0, 1413, Short.MAX_VALUE)
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
          .addComponent(jpMake, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
          .addGap(0, 26, Short.MAX_VALUE)))
    );
    layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGap(0, 206, Short.MAX_VALUE)
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
          .addComponent(jpMake, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
          .addGap(0, 0, Short.MAX_VALUE)))
    );

    pack();
  }             

  public static void main(String args[]) {
    try {
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
        if ("Nimbus".equals(info.getName())) {
          javax.swing.UIManager.setLookAndFeel(info.getClassName());
          break;
        }
      }
    } catch (ClassNotFoundException ex) {
      java.util.logging.Logger.getLogger(JF_Test_JComboBox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
      java.util.logging.Logger.getLogger(JF_Test_JComboBox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
      java.util.logging.Logger.getLogger(JF_Test_JComboBox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
      java.util.logging.Logger.getLogger(JF_Test_JComboBox.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
      public void run() {
        new JF_Test_JComboBox().setVisible(true);
      }
    });
  }

  // Variables declaration - do not modify                     
  private javax.swing.JPanel jpAmp;
  private javax.swing.JPanel jpDur;
  private javax.swing.JPanel jpMake;
  private javax.swing.JPanel jpT;
  private javax.swing.JSlider jsAmp;
  private javax.swing.JSlider jsDur;
  private javax.swing.JSlider jsT;
  // End of variables declaration                   
}

【问题讨论】:

  • 最重要的是:您没有使用null 布局和setBounds(...) 或对setSize(...)setPreferredSize(...) 的任何调用,是吗?请创建并发布一个小/最小但简单的完整程序来说明您的问题,MCVE。请查看链接了解这个非常有用的工具的详细信息。
  • Thks,部分代码,只有一个JSlider ...
  • “部分代码” 不可编译的代码 sn-p 不是 MCVE。请按照@HovercraftFullOfEels 提供的链接阅读相关内容。
  • 已经,我会把我的代码...

标签: java swing netbeans fonts jslider


【解决方案1】:

看看JSlider#updateLabelUIs() (Java Platform SE 8 )。可能会有帮助。

//@see javax/swing/JSlider.java
public void updateUI() {
    setUI((SliderUI)UIManager.getUI(this));
    // The labels preferred size may be derived from the font
    // of the slider, so we must update the UI of the slider first, then
    // that of labels.  This way when setSize is called the right
    // font is used.
    updateLabelUIs();
}

这是我的尝试:

import java.util.*;
import java.util.Enumeration;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class JFComboBoxTest {
  public JComponent makeUI() {
    JSlider jsDur = makeSlider();
    //jsDur.setLabelTable(jsDur.getLabelTable());
    //jsDur.updateUI();
    SwingUtilities.updateComponentTreeUI(jsDur);

    Box p = Box.createVerticalBox();
    p.setBorder(BorderFactory.createLineBorder(Color.RED, 20));
    p.add(new JLabel("JSlider label size? (200 -> _20)"));
    p.add(makeSlider());
    p.add(Box.createVerticalStrut(20));
    p.add(new JLabel("SwingUtilities.updateComponentTreeUI(slider)"));
    p.add(jsDur);
    return p;
  }
  private static JSlider makeSlider() {
    JSlider jsDur = new JSlider();
    jsDur.setBackground(new Color(255, 255, 255));
    jsDur.setMajorTickSpacing(10);
    jsDur.setMaximum(200);
    jsDur.setMinorTickSpacing(2);
    jsDur.setPaintLabels(true);
    jsDur.setPaintTicks(true);
    jsDur.setSnapToTicks(true);
    Enumeration ed = jsDur.getLabelTable().keys();
    while (ed.hasMoreElements()) {
      Integer i = (Integer) ed.nextElement();
      JLabel label = (JLabel) jsDur.getLabelTable().get(i);
      Double d = (double)i / 10.0;
      label.setText(String.valueOf(i / 10));
    }
    return jsDur;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    try {
      //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
        if ("Nimbus".equals(laf.getName())) {
          UIManager.setLookAndFeel(laf.getClassName());
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new JFComboBoxTest().makeUI());
    f.setSize(512, 240);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}

【讨论】:

  • 谢谢,您的回答有效...知道问题 2 的答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 2019-01-27
  • 1970-01-01
  • 2011-09-02
  • 2017-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多