Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将指定字符串的大小设置为JTextField?_Java_Swing_Layout Manager - Fatal编程技术网

Java 如何将指定字符串的大小设置为JTextField?

Java 如何将指定字符串的大小设置为JTextField?,java,swing,layout-manager,Java,Swing,Layout Manager,JPanel中的JTextField,而JDialog中的JTextField不采用指定的大小。我尝试使用BoxLayout和FlowLayout,但仍然没有达到所需的大小。也就是说,我测量字符串示例的大小,并将该大小设置为JTextField的宽度inputCat,但inputCat不采用该大小,然后我调用它。如何正确地将指定的字符串的大小设置为JTextField?这是我的密码: import java.awt.BorderLayout; import java.awt.EventQueue

JPanel
中的
JTextField
,而JDialog中的
JTextField
不采用指定的大小。我尝试使用
BoxLayout
FlowLayout
,但仍然没有达到所需的大小。也就是说,我测量
字符串
示例
的大小,并将该大小设置为
JTextField的宽度
inputCat
,但
inputCat
不采用该大小,然后我调用它。如何正确地将指定的
字符串的大小设置为
JTextField
?这是我的密码:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FontMetrics;
import java.util.Calendar;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerModel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class DemoJDialog {

    static private JInternalFrame internal;


    public static void main(String[] args) {
        new DemoJDialog();
    }

    public DemoJDialog() {
        EventQueue.invokeLater(new Runnable() {
            @SuppressWarnings({ "rawtypes", "unchecked" })
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                internal = new JInternalFrame("Example", true, true, false, true);
                internal.setLayout(new BorderLayout());
                internal.setVisible(true);

                JDesktopPane dp = new JDesktopPane();
                dp.add(internal);

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(dp);
                frame.setSize(800, 600);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);


                JTextField inputCat = new JTextField(); 


                String example = new String("Some very-very-very-"
                        + "very-very-very-very-very-very long string (really long )");
                int heightInputCat = inputCat.getSize().height;
                FontMetrics FN = internal.getFontMetrics(internal.getFont());
                int widthInputCat = SwingUtilities.computeStringWidth(FN, example);
                inputCat.setSize(widthInputCat, heightInputCat);



                String[] comboString = { "Telecast", "Radiocast" };
                JComboBox comboBox = new JComboBox(comboString);

                Calendar now = Calendar.getInstance();
                SpinnerModel modelSpinner = new SpinnerDateModel(now.getTime(), 
                        null, null, Calendar.MONTH);
                final JSpinner spinner = new JSpinner(modelSpinner);
                spinner.setEditor(new JSpinner.DefaultEditor(spinner)); 

                JPanel listPane = new JPanel();
                listPane.setLayout(new BoxLayout(listPane, BoxLayout.X_AXIS));
                listPane.add(comboBox);
                listPane.add(Box.createHorizontalStrut(10));
                listPane.add(inputCat);
                listPane.add(Box.createHorizontalStrut(10));
                listPane.add(spinner);

                Object[] array = {
                        new JLabel ("Enter a new category:"),
                        listPane
                };

                JOptionPane pane = new JOptionPane(array, JOptionPane.PLAIN_MESSAGE,
                        JOptionPane.OK_CANCEL_OPTION);
                JDialog dialog = pane.createDialog(internal, "Enter a new category:");
                dialog.setVisible(true);


            }
        });
    }

}

这在这里很管用:

import java.awt.EventQueue;
import java.util.Calendar;
import javax.swing.*;

public class DemoJDialog {

    public static void main(String[] args) {
        new DemoJDialog();
    }

    public DemoJDialog() {
        EventQueue.invokeLater(new Runnable() {
            @SuppressWarnings({"rawtypes", "unchecked"})
            @Override
            public void run() {
                String example = new String("Some very-very-very-"
                        + "very-very-very-very-very-very "
                        + "long string (really long)");
                // create a textfield the size of the string!
                JTextField inputCat = new JTextField(example);
                inputCat.setCaretPosition(0);

                String[] comboString = {"Telecast", "Radiocast"};
                JComboBox comboBox = new JComboBox(comboString); 

                Calendar now = Calendar.getInstance();
                SpinnerModel modelSpinner = new SpinnerDateModel(now.getTime(),
                        null, null, Calendar.MONTH);
                final JSpinner spinner = new JSpinner(modelSpinner);
                spinner.setEditor(new JSpinner.DefaultEditor(spinner));

                JPanel listPane = new JPanel();
                listPane.setLayout(new BoxLayout(listPane, BoxLayout.X_AXIS));
                listPane.add(comboBox);
                listPane.add(Box.createHorizontalStrut(10));
                listPane.add(inputCat);
                listPane.add(Box.createHorizontalStrut(10));
                listPane.add(spinner);

                Object[] array = {
                    new JLabel("Enter a new category:"),
                    listPane
                };

                JOptionPane pane = new JOptionPane(array, JOptionPane.PLAIN_MESSAGE,
                        JOptionPane.OK_CANCEL_OPTION);
                JDialog dialog = pane.createDialog(listPane, "Enter a new category:");
                dialog.setVisible(true);
            }
        });
    }
}

但是JTextField由示例字符串填充。我需要这个宽度的空JTextField

只需使用指定所需列数的构造函数:

JTextField inputCat = new JTextField(example.length());

为了更快地获得更好的帮助,请发布一个(最小完整的可验证示例)或(简短、自包含、正确的示例)。您想用它实现什么?我不太理解需求或问题(特别是因为没有提出任何问题),但请注意
JTextField inputCat=new JTextField()最好是
JTextField inputCat=newjtextfield(10);//建议列的宽度伟大链接@Madhan.:)我不熟悉StackOverflow,只是跟随您的脚步@andreThompson,但是
JTextField
由示例
String
填充。我需要这个宽度的空
JTextField