1

Swing Java API の基本的な JSpinner を少しカスタマイズしたいと思います。基本的に、最初は矢印ボタンの左側にある textfield コンポーネントを移動したいと考えています。代わりに、テキスト フィールドの上に 1 つの矢印があり、テキスト フィールドの下に 1 つの矢印があるように、テキスト フィールドはスピナーの 2 つの矢印の間に配置されます。でも進め方がわからない…

誰でもアイデアがありますか?

4

2 に答える 2

4

JSpinner の setLayout(LayoutManager) メソッドをオーバーライドして、カスタム LayoutManager を使用できる場合があります。

ここに画像の説明を入力

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

public class SpinnerLayoutTest {
  public JComponent makeUI() {
    SpinnerNumberModel m = new SpinnerNumberModel(10, 0, 1000, 1);
    JSpinner spinner = new JSpinner(m) {
      @Override public void setLayout(LayoutManager mgr) {
        super.setLayout(new SpinnerLayout());
      }
    };
    JPanel p = new JPanel(new BorderLayout(5,5));
    p.add(new JSpinner(m), BorderLayout.NORTH);
    p.add(spinner, BorderLayout.SOUTH);
    p.setBorder(BorderFactory.createEmptyBorder(16,16,16,16));
    return p;
  }
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      @Override public void run() {
        createAndShowGUI();
      }
    });
  }
  public static void createAndShowGUI() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.getContentPane().add(new SpinnerLayoutTest().makeUI());
    f.setSize(320, 160);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
}
class SpinnerLayout extends BorderLayout {
  @Override public void addLayoutComponent(Component comp, Object constraints) {
    if("Editor".equals(constraints)) {
      constraints = "Center";
    } else if("Next".equals(constraints)) {
      constraints = "North";
    } else if("Previous".equals(constraints)) {
      constraints = "South";
    }
    super.addLayoutComponent(comp, constraints);
  }
}
于 2012-08-12T15:47:09.830 に答える
1

を作成して、その中にJPanelとを入れることができます。私が同じ問題を抱えていたとき、それは魂のこもったものでした。JTextFieldJButtons

編集:

矢印ボタンは次の方法で作成できます。

new javax.swing.plaf.basic.BasicArrowButton(SwingConstants.NORTH);

SwingConstants.NORTHは、ボタンの矢印が上向きであることを示しています

于 2012-08-10T12:07:31.810 に答える