java - JSlider 绘制不完整,与 Netbeans 配合使用

标签 java swing netbeans fonts jslider

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

使用 JSlider 进行设计

Design Time using 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 的执行时间

Execution Time using JSlider

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

问题2

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

设计时的完整图像

Full Image in Design Time

执行时的完整图像

Full Image in Executing Time

编辑 1 版本 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                   
}

最佳答案

看看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();
}

这是我的尝试:

enter image description here

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);
  }
}

关于java - JSlider 绘制不完整,与 Netbeans 配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28491041/

相关文章:

java - RMI - 在运行时获取 ClassNotFoundException

java - 如何识别根子节点?

Java JMenu 无法正常工作

netbeans - Netbeans:如何在NullPointerException上中断?

c++ - 配置 Netbeans 基本设置

java - 删除单词中等于单词中最后一个符号的所有符号

java - 使用 sql.timestamp 检查新的一天

java - 在 Java 中,为什么我不需要导入 RuntimeException 来使用它?

java - 从数据库Java填充多维数组

java - 使用 Java Web Start 程序创建客户端-服务器应用程序的最佳方法是什么?