10
votes

JTextfield Hauteur fixe

Comment obtenir le jtextfield code> pour avoir une hauteur fixe lorsque le cadre est maximisé? Je veux qu'il s'agisse d'une sorte de similaire à l'application Skype sur Ubuntu.

private JTextField username;
private JPasswordField password;
private JLabel usernamelabel;
private JLabel passwordlabel;
public LoginPanel(){


    setSize(200,200);
    setLayout(new GridLayout(4,4));
    setBackground(new Color(85,153,187));
    setBorder(BorderFactory.createEmptyBorder(70, 70, 70, 70));
    username = new JTextField();
    password = new JPasswordField();
    usernamelabel= new JLabel("Username");
    passwordlabel= new JLabel("Password");
    username.setBounds(5, 5, 100, 100);
    username.setPreferredSize(new Dimension(80,20));
    password.setPreferredSize(new Dimension(80,20));
    add(usernamelabel);
    add(username);
    add(passwordlabel);
    add(password);


2 commentaires

Désolé gars, je veux dire jtextfield et jPasswordfield pour une hauteur fixe.


SetMinimum / maximum / préféré / Taille ?


5 Réponses :


6
votes

N'utilisez pas une mise en page autre que gridlayout ou mettre le champ de texte dans un autre panneau contenant un flowlayout qui se trouve à l'intérieur de votre gridlayout .


4 commentaires

Donc, votre disant Créer des JPANels qui ont un flowLayout et ajoutez-leur les champs de texte, puis ajoutez-les au panneau contenant la disposition de la grille? Je peux voir comment cela fonctionnerait mais n'y a-t-il pas une façon de faire cela? Je suis totalement contre les genrateurs d'interface graphique NetBeans. :)


Oui, la superposition de différentes mises en page est un moyen facile et courant de générer des effets de mise en page souhaités.


+1 pour les mises en page imbriquées. En tant que commodité, jPanel par défaut sur flowlayout .


-1 Pour les mises en page imbriquées ;-) Ce n'est que le piratage d'urgence si la 3ème partie layoutManagers n'est pas une option. S'ils sont, font des recherches et choisissez celui qui convient le mieux, atterrissant probablement à l'un des «Big Trois» (Formlayout, Miglayout, DesignLayout): ils sont tous puissants et faciles à manipuler.



3
votes

Vous pouvez vous référer à ici .

Le SETMAXIZe La méthode peut être trouvée dans JCOMPONENT et le JTextField permet d'utiliser cette méthode de JComponent.

éditer : Cependant, il semble que ce n'est pas une bonne pratique au code de la taille du JTextField, en particulier lorsque vous l'exécutez sur plusieurs plates-formes, car vous pourriez rencontrer des problèmes avec la taille de la police.


2 commentaires

Dans une application professionnelle Java GUI, JAMAIS Définissez explicitement la taille préférée - vous vous en prenez une hypothèse que la taille de la police du composant toujours ajustée dans 20 pixels de hauteur. Si l'utilisateur dispose de grandes polices définies sur leur bureau, cela ne sera pas vrai. Utilisez un gestionnaire de présentation qui honore la taille préférée du jtextfield - qui par défaut à la bonne hauteur du bureau L'application est activée. La codage rigide est garantie de toucher une partie de l'heure (Mac OS, en particulier, a des hauteurs de police par défaut plus grandes que Windows). Ce genre de chose est l'une des raisons existant des responsables de la mise en page.


Oh. Je ne savais pas à ce sujet. Semble être un point valide. Va éditer mon post.



0
votes

Merci pour toutes les gars de l'aide, espérons que cela aide les autres à l'avenir. J'ai eu le look visuel que je cherchais. XXX


0 commentaires

0
votes

Dans une pincée, faire

tf.setMaximumSize(tf.getMinimumSize())


2 commentaires

C'est correct, donc si le licageManager respecte ces astuces, cela fonctionnera, sinon, ce n'est pas le cas. Fonctionne pour les dispositions d'écoulement et de boîte et maintient la taille constante du champ, la hauteur et la largeur.


Pas tout à fait correct non plus: a) max n'a aucun effet sur le flux B) VRAI: la boîte respecte Max - mais la plupart probablement (non probablement essayé, cependant ;-) sera confus si min faux d'utiliser l'une des méthodes SETXXSIZE dans le code de l'application: Stackoverflow.com/Questtions/7229226/... - Utilisez plutôt une licageManager qui fait quoi vous avez besoin



4
votes

Je pense que cela résout votre problème.

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Main { 

/**
 * @param args
 */
public static void main(String[] args) {
    JFrame failFrame = new JFrame();
    JPanel mainPanel = new JPanel();
    mainPanel.setLayout(new GridLayout(0, 4));

    JPanel leftTextFieldPanel = new JPanel();
    leftTextFieldPanel.setLayout(new FlowLayout());        
    JPanel rightTextFieldPanel = new JPanel();
    rightTextFieldPanel.setLayout(new FlowLayout());

    JTextField leftTextField = new JTextField();
    leftTextField.setPreferredSize(new Dimension(150,20));              
    JTextField rightTextField = new JTextField();
    rightTextField.setPreferredSize(new Dimension(150,20));

    leftTextFieldPanel.add(leftTextField);
    mainPanel.add(leftTextFieldPanel);

    rightTextFieldPanel.add(rightTextField);
    mainPanel.add(rightTextFieldPanel);

    mainPanel.add(new JPanel());
    mainPanel.add(rightTextFieldPanel);
    mainPanel.add(new JPanel());

    failFrame.add(mainPanel);
    failFrame.setSize(600, 400);
    failFrame.setLocationRelativeTo(null);
    failFrame.setVisible(true);
}
}


0 commentaires