2016-11-18 25 views
2

私はこのような状況があります(JSliderは必須ではない場合は値を表示しています)。そして、JSliderに現在のValueを表示したくありません。JSlider GTK +とNimbus LookAndFeelの値を表示します。Linuxの場合

  1. Linuxでは、LookAndFeel NimbusとGTK +を使用してJSliderの値が表示されるのはなぜですか?
  2. どのようにこの値を非表示にすることができますか?

ここでは、次のWindows 10上のコードを実行している画像、セントOS 7、およびMacOSのシエラ

enter image description here

enter image description here

私のコード:

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import javax.swing.Box; 
import javax.swing.BoxLayout; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JSlider; 

import javax.swing.SwingUtilities; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class JSliderLAF { 

    public static void changeLAF(Container container, String laf) { 
    try { 
     UIManager.setLookAndFeel(laf); 
    } catch (ClassNotFoundException | InstantiationException | 
     IllegalAccessException | UnsupportedLookAndFeelException e) { 
    } 
    SwingUtilities.updateComponentTreeUI(container); 
    } 

    public static void main(String args[]) { 
    EventQueue.invokeLater(() -> { 
     JPanel jpVert = new JPanel(); 
     jpVert.setLayout(new BoxLayout(jpVert, BoxLayout.PAGE_AXIS)); 
     for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
     JSlider jsl = new JSlider(); 
     jsl.setMajorTickSpacing(20); 
     jsl.setMinorTickSpacing(5); 
     jsl.setPaintLabels(true); 
     jsl.setPaintTicks(true); 
     jsl.setSnapToTicks(true); 
     JPanel jpHorz = new JPanel(); 
     jpHorz.setLayout(new BoxLayout(jpHorz, BoxLayout.LINE_AXIS)); 
     JLabel jlName = new JLabel(info.getName() + " : "); 
     JLabel jlClass = new JLabel(info.getClassName()); 
     jpHorz.add(jsl); 
     jpHorz.add(Box.createRigidArea(new Dimension(5,0))); 
     jpHorz.add(jlName); 
     jpHorz.add(Box.createRigidArea(new Dimension(2,0))); 
     jpHorz.add(jlClass); 
     jpHorz.add(Box.createRigidArea(new Dimension(2,0))); 
     jpHorz.add(Box.createHorizontalGlue()); 
     changeLAF(jsl,info.getClassName()); 
     jpVert.add(jpHorz); 
     } 
     final JFrame frame = new JFrame(); 
     frame.add(jpVert, BorderLayout.NORTH); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    }); 
    }   
} 
+0

答えt最初の質問はGTK +がデフォルトで行うからです。私は第二の質問に対する答えを知らない。私は、実際のGTK +スライダ[this](https://developer.gnome.org/gtk3/stable/GtkScale.html#gtk-scale-set-draw-value)は、トリックを行う「draw-value」GObjectプロパティ)。 – andlabs

+0

ありがとう、しかしNimbus? Nimbusもこの値を提示しています。 –

+0

NimbusスライダはGTK +スライダと同じように見えます。私はNimbusがGTK +をカスタムスタイルで使っていると仮定しています。 – andlabs

答えて

2
public static void changeLAF(Container container, String laf) { 
    try { 
    UIManager.setLookAndFeel(laf); 
    UIManager.put("Slider.paintValue", false); 
    } catch (ClassNotFoundException | InstantiationException | 
     IllegalAccessException | UnsupportedLookAndFeelException e) { 
    } 
    SwingUtilities.updateComponentTreeUI(container); 
}