![ALittleToTheLeft.java screen shot](https://i.stack.imgur.com/wVoxy.png)
Преобразование из счетчика, который перемещается на 5 пикселей за раз, в кнопку, перемещающуюся на 100 пикселей за раз, оставлено для читателя в качестве упражнения.;)
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.EmptyBorder;
class ALittleToTheLeft {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JPanel gui = new JPanel(new GridLayout(0,1));
JTextField input = new JTextField(10);
// not strictly necessary for some components,
// but good for ones that already have a border.
final JPanel inputContainer = new JPanel(new GridLayout());
inputContainer.add(input);
inputContainer.setBorder(new EmptyBorder(0,200,0,0));
gui.add(inputContainer);
SpinnerNumberModel inputAlignmentModel =
new SpinnerNumberModel(200,0,200,5);
final JSpinner inputAlignment =
new JSpinner(inputAlignmentModel);
inputAlignment.addChangeListener( new ChangeListener() {
public void stateChanged(ChangeEvent ce) {
int leftPad = ((Integer)inputAlignment.
getValue()).intValue();
int rightPad = 200-leftPad;
inputContainer.setBorder(
new EmptyBorder(0,leftPad,0,rightPad));
}
});
gui.add(inputAlignment);
JOptionPane.showMessageDialog(null, gui);
}
});
}
}