Как отключить изменение размера textField в java swing? - PullRequest
1 голос
/ 30 января 2012

У меня есть графический интерфейс, который основан на JPanel Swing, который использует BorderLayout. На северной панели я добавил новый JPanel, который использует FlowLayout и содержит два textField и другие компоненты. Когда я изменяю текст textField и не вижу некоторых компонентов внутри этой панели, этот textField продолжает изменять размеры. Как я могу избежать этого? Я хотел бы, чтобы textField сохранял тот же размер, что бы ни происходило. Я попытался setSize, setPreferredSize, setMinimumSize без успеха.

txtSource = new WebTextField(source);
    txtSource.setMaximumSize(new Dimension(30,20));
    txtSource.setMinimumSize(new Dimension(20, 20));
    txtSource.setEditable(false);
    txtDestination = new WebTextField(destination);
    txtDestination.setMaximumSize(new Dimension(30,20));
    txtDestination.setMinimumSize(new Dimension(20, 20));

перед: enter image description here

после enter image description here

Ответы [ 3 ]

7 голосов
/ 30 января 2012

Когда я изменяю текст textField и не вижу некоторых компонентов внутри этой панели, этот textField продолжает изменять размеры.

В этом примере текстовые поля отображаются в постоянном размере.Можете ли вы добавить SSCCE кода, который не делает?

Text Field Size

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

class TextFieldSize {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JTextField smallField = new JTextField(5);
                JTextField largeField = new JTextField(20);
                JPanel gui = new JPanel(new FlowLayout());
                gui.add( smallField );
                gui.add( largeField );
                JFrame f = new JFrame("Text Field Size");
                f.add(gui);
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.pack();
                f.setLocationByPlatform(true);
                f.setVisible(true);
            }
        });
    }
}
0 голосов
/ 11 октября 2014
//This works best for me:

import java.awt.Dimension;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class NoResizeJTextField {
    public static void main(String[] args) {
        final JFrame frame = new JFrame();  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        frame.setPreferredSize(new Dimension(500,300));  
        JPanel panel = new JPanel();  
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        panel.add(new JLabel("Text: "));
        JTextField tf = new JTextField(30);
        tf.setMaximumSize(tf.getPreferredSize());
        tf.setMinimumSize(tf.getPreferredSize());
        panel.add(tf);
        frame.add(panel);   
        SwingUtilities.invokeLater(new Runnable() {             
            public void run() {  
                frame.pack();  
                frame.setVisible(true);  
            }  
        });  
    }
}
0 голосов
/ 30 января 2012

вы не можете делать это так, как хотите, некоторые LayoutManagers игнорируют для setXxxSize, но вы можете использовать f.e. BoxLayout, который принимает за setXxxSize

...