0.0から999.0までの10進値を表示するJSpinnerがあります。 123.4などの4桁の数字をエディタボックスに表示する場合を除いて、正常に動作しているようです。それはそれが十分に長くないので、最後の桁の一部を切り捨てます。JSpinner:エディタボックスの長さを増やす
私の質問は:どのようにJSpinnerのエディタウィンドウの長さを増やすか知っていますか?
ありがとうございます!
0.0から999.0までの10進値を表示するJSpinnerがあります。 123.4などの4桁の数字をエディタボックスに表示する場合を除いて、正常に動作しているようです。それはそれが十分に長くないので、最後の桁の一部を切り捨てます。JSpinner:エディタボックスの長さを増やす
私の質問は:どのようにJSpinnerのエディタウィンドウの長さを増やすか知っていますか?
ありがとうございます!
あなたは、実際にあるテキストフィールドに取得することができJFormattedTextField
getTextField()
を呼び出すJSpinner.DefaultEditor
getEditor()
を呼び出すことで、これに。必要に応じてpreferredSizeを設定することができます。編集:trashgodにも記載されているように、適切なレイアウトを使用することが重要であり、使用しているレイアウトが最適であることを確認することがおそらくこの問題を解決する最良の方法です。
編集2:テキストフィールドの推奨サイズを設定すると何も起こりませんので、上記は間違っています。ただし、エディター自体の推奨サイズを設定することができます。例えば、FontMetrics
として
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();
}
});
}
}
+1 ['BoxLayout'](http://download.oracle.com/javase/7/docs/api/javax/swing/BoxLayout.html)は、この文脈で特に有用です。 – trashgod
@Hovercraftほとんどの場合、RullesがEditorからPreferredSizeを返すのに対し、Eelsはあなたの人を動かすことはありません。私は、4-5の数値の存在があることを知っていれば、これはLayoutManagerではないプログラマーの仕事だと思います。負の数値符号がありますが、さらに水平方向に5〜8ピクセル、垂直には醜く見えない場合には2〜5です。JSpinner#setPreferredSize()、btw +1を正確には解決しない方法コンパウンドJComponentのコンポーネント – mKorbel
-1のためにsetXXSize – kleopatra
は、好ましいサイズの成分自身の計算に依存する方が良いでしょう、一つのプラットフォームから次へと変わります。この例は、さまざまな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();
}
});
}
}
最初のホバークラフトの答えは全然悪くないです。あなたは、直接サイズを変更することはできませんが、このような何かを行うことができます。
JComponent editor = mySpinner.getEditor();
JFormattedTextField tf = ((JSpinner.DefaultEditor) editor).getTextField();
tf.setColumns(4);
エディタによって示された列数を定義することができるところ。スピナーのサイズが変わります。
シンプルな3行の例をありがとうございました!私はこれのためにいたる所を探しています:) – uyuyuy99
私のために働かない。 –
@ ivan.ukr downvoteに感謝します。私は多くのアプリケーションでこのコードを正確に実行しています。これらの行にエラーがありますか? – JorgeHortelano
スピナーの最大値を変更すると、大きな数に対応するためにテキストボックスのサイズが大きくなります。あなたは、最大値を大きくしたくない場合は、私は
JComponentのエディタ= mySpinner.getEditor()... @JorgeHortelanoが提案何をお勧めします。 JFormattedTextField tf =((JSpinner.DefaultEditor)エディタ).getTextField(); tf.setColumns(4);
スピナーを入れるコンテナのレイアウトは何ですか? an [sscce](http://sscce.org/)が理想的です。 – trashgod
テスト時に間違っていたので私の答えを削除しました。 –