JSpinner:增加编辑框的长度
我有一个JSpinner显示从0.0到999.0的十进制值。 它似乎工作正常,除了它在编辑器框中显示一个长度为四位数的数字,例如123.4; 然后它会切断部分最后一位数,因为它不够长。
所以我的问题是:有谁知道如何增加JSpinner编辑器窗口的长度?
谢谢!
您可以访问实际上是JFormattedTextField
的文本字段
- 首先在JSpinner上调用
getEditor()
来获取微调器的编辑器 - 将返回的对象
JSpinner.DefaultEditor
为JSpinner.DefaultEditor
- 然后在此调用
getTextField()
。 然后,如果需要,您可以设置它的preferredSize。
编辑:正如trashgod所述,使用适当的布局是至关重要的,并确保您使用的布局是最好的可能是解决此问题的最佳方法。
编辑2:以上是错误的,因为设置文本字段的首选大小什么都不做。 但是,您可以设置编辑器本身的首选大小,这是有效的。 例如。,
import java.awt.Dimension; import javax.swing.*; public class SpinnerBigTextField { private static void createAndShowGui() { JSpinner spinner = new JSpinner(new SpinnerNumberModel(0.0, 0.0, 999.0, 0.5)); JPanel panel = new JPanel(); panel.setPreferredSize(new Dimension(300, 100)); panel.add(spinner); JComponent field = ((JSpinner.DefaultEditor) spinner.getEditor()); Dimension prefSize = field.getPreferredSize(); prefSize = new Dimension(200, prefSize.height); field.setPreferredSize(prefSize); JFrame frame = new JFrame("SpinnerBigTextField"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(panel); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGui(); } }); } }
第一个气垫船的答案一点也不差。 您无法直接更改大小,但您可以执行以下操作:
JComponent editor = mySpinner.getEditor(); JFormattedTextField tf = ((JSpinner.DefaultEditor) editor).getTextField(); tf.setColumns(4);
您可以在哪里定义编辑器显示的列数。 它会改变微调器的大小。
由于FontMetrics
从一个平台到另一个平台各不相同,因此最好依靠组件自己的首选大小计算。 此示例显示了各种min
和max
的JSpinner
尺寸范围。 特别要注意的是, FlowLayout
“让每个组件都采用其自然(首选)大小。”
import java.awt.EventQueue; import java.awt.FlowLayout; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; /** @see http://stackoverflow.com/questions/7374659 */ public class SpinnerTest extends Box { private static final double STEP = 0.1d; private static final String FORMAT = "0.0000000000"; public SpinnerTest(int axis) { super(axis); for (int i = 0; i < 8; i++) { int v = (int) Math.pow(10, i); this.add(genParamPanel((i + 1) + ":", -v, v)); } } private JPanel genParamPanel(String name, double min, double max) { JPanel panel = new JPanel(new FlowLayout(FlowLayout.TRAILING)); JLabel label = new JLabel(name, JLabel.TRAILING); JSpinner js = new JSpinner(new SpinnerNumberModel(min, min, max, STEP)); js.setEditor(new JSpinner.NumberEditor(js, FORMAT)); panel.add(label); panel.add(js); return panel; } private void display() { JFrame f = new JFrame("SpinnerTest"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new SpinnerTest(BoxLayout.Y_AXIS).display(); } }); } }
JSpinner spn=new JSpinner(); spn.setPreferredSize(new Dimension(100,25));
在这里,看看这是一个简单的答案。
更改微调器的最大值将增加文本框的大小以容纳大数字。 如果你不想让最大值变大,我会推荐@JorgeHortelano建议的……
JComponent editor = mySpinner.getEditor(); JFormattedTextField tf =((JSpinner.DefaultEditor)editor).getTextField(); tf.setColumns(4);
- 如何使用Mockito显示模拟上的所有调用
- 如何使用MyBatis调用Oracle数据库序列号?
- 如何取消焦点JTextField
- java.security.NoSuchProviderException:没有这样的提供者:BC
- 在java-8中解组xml时出错“安全处理org.xml.sax.SAXNotRecognizedException导致java.lang.IllegalStateException”
- 桌面上的JVM是否使用JIT编译?
- 使用java.sql.PreparedStatement将PDF文件上传到mysql BLOB而不会损坏
- 将Hibernate 3.5.x添加到maven pom.xml构建中
- 用于传递和调用方法引用的Lambda语法