Поле приложения хранит названия медицинских учреждений и может хранить очень длинные строки. Окно все равно должно сжиматься, даже если это означает обрезку текста (но, что важно, не самого компонента).
MRE:
Код: Выделить всё
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.text.JTextComponent;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
public class TextFieldDemo {
static JTextComponent field;
public static void main(String[] args) {
Container mainPanel = createScroller(); // run this line to reproduce
// Container mainPanel = createMainPanel(); // run this line to see normal shrinking
JFrame frame = new JFrame("Text Field Demo");
frame.setContentPane(mainPanel);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private static Container createScroller() {
JScrollPane scroller = new JScrollPane(createMainPanel());
scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
return scroller;
}
private static Container createMainPanel() {
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridy = 0;
constraints.gridwidth = 3;
constraints.weightx = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.insets = new Insets(5,5,5,5);
panel.add(createTextField(), constraints);
constraints.gridwidth = 1;
constraints.gridy = 1;
constraints.weightx = 0;
constraints.fill = GridBagConstraints.NONE;
panel.add(createLongTextButton(), constraints);
panel.add(createResetButton(), constraints);
constraints.weightx = 1;
constraints.fill = GridBagConstraints.HORIZONTAL;
panel.add(Box.createGlue(), constraints);
return panel;
}
private static Component createTextField() {
field = new JTextField();
field.setEditable(false);
field.setText(createShortText());
return field;
}
private static Component createLongTextButton() {
JButton button = new JButton("Set long text");
button.addActionListener(e -> field.setText(createLongText()));
return button;
}
private static String createLongText() {
return "Long long long long long long long long long long long long long long long long long long long text";
}
private static Component createResetButton() {
JButton button = new JButton("Reset");
button.addActionListener(e -> field.setText(createShortText()));
return button;
}
private static String createShortText() {
return "Short text";
}
}

Со скроллером (компонент обрезан):

Java 8.
Подробнее здесь: https://stackoverflow.com/questions/798 ... scrollpane
Мобильная версия