【问题标题】:fixing the size of a JTextField within a GUI在 GUI 中修复 JTextField 的大小
【发布时间】:2020-10-04 05:39:49
【问题描述】:

我有以下代码来创建 GUI。我遇到的问题是 JTextField 似乎随着 GUI 的大小调整而扩展。

我希望 JTextField 保持与扩大 GUI 相同的大小。 JTextField 似乎也位于控制面板的底部,而不是顶部。我如何控制这个?

有人可以提供一些直升机吗:

public class HtmlDemo extends JPanel
                      implements ActionListener {
    JLabel theLabel;
    JTextArea htmlTextArea;
    private boolean bLastName = false;
    private boolean bNickName = false;
    private boolean bMarks = false;
    private JFreeChart chart;
    private ChartPanel chartPanel;    
    private JLabel date1Label, date2Label,date3Label,date4Label;
    private JTextField date1Field, date2Field,date3Field,date4Field;
    private JButton button,button1;
    private Container window;
  //  public createChart stackedChart = new createChart();
    public XYPlot plot1;
    private JPanel panel, panel1,panel3,panel4;

    public HtmlDemo() {
        setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));

      chart = createChart(null);
        chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(1060, 370));
        chartPanel.setMouseZoomable(true, false);
        //panel4.add(chartPanel);

        htmlTextArea = new JTextArea(10, 20);
        //htmlTextArea.setText(initialText);
        JScrollPane scrollPane = new JScrollPane(chartPanel);


        theLabel = new JLabel() {
            public Dimension getPreferredSize() {
                return new Dimension(200, 200);
            }
            public Dimension getMinimumSize() {
                return new Dimension(200, 200);
            }
            public Dimension getMaximumSize() {
                return new Dimension(200, 200);
            }
        };
        theLabel.setVerticalAlignment(SwingConstants.CENTER);
        theLabel.setHorizontalAlignment(SwingConstants.CENTER);

        JPanel leftPanel = new JPanel();
        leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.PAGE_AXIS));
        leftPanel.setBorder(BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder(
                    "Rolling Demand"),
                BorderFactory.createEmptyBorder(10,10,10,10)));
        leftPanel.add(scrollPane);
        leftPanel.add(Box.createRigidArea(new Dimension(0,10)));
        //leftPanel.add(changeTheLabel);

        JPanel rightPanel = new JPanel();
        rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.PAGE_AXIS));
        rightPanel.setBorder(BorderFactory.createCompoundBorder(
                        BorderFactory.createTitledBorder("Controls"),
                        BorderFactory.createEmptyBorder(10,10,10,10)));
        rightPanel.add(theLabel);


        button = new JButton();
        date1Label = new JLabel("Enter Start Date");
       rightPanel.add(date1Label);
        date1Field = new JTextField(5);
  rightPanel.add(date1Field);
        date2Label = new JLabel("Enter End Date");
      rightPanel.add(date2Label);
        date2Field = new JTextField(5);

      rightPanel.add(date2Field);

       panel1 = new JPanel();
        date3Label = new JLabel("Enter comparator Start Date");
        rightPanel.add(date3Label);
        date3Field = new JTextField(5);
        rightPanel.add(date3Field);
        date4Label = new JLabel("Enter comparator End Date");
        rightPanel.add(date4Label);
        date4Field = new JTextField(5);
        rightPanel.add(date4Field);





      button.setText("Get Data");

        rightPanel.add(button);



        setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
        add(leftPanel);
        add(Box.createRigidArea(new Dimension(10,0)));
        add(rightPanel);
    }


     private JFreeChart createChart(final XYDataset dataset)
    {
       // System.out.println("hello");
        return ChartFactory.createTimeSeriesChart(
                "Test",
                "Seconds",
                "Value",
                dataset,
                false,
                false,
                false);
    }

    //React to the user pushing the Change button.
    public void actionPerformed(ActionEvent e) {
        theLabel.setText(htmlTextArea.getText());
    }

    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event dispatch thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("HtmlDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Add content to the window.
        frame.add(new HtmlDemo());

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event dispatch thread:
        //creating and showing this application's GUI.
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                //Turn off metal's use of bold fonts
            UIManager.put("swing.boldMetal", Boolean.FALSE);
            createAndShowGUI();
            }
        });
    }
}

【问题讨论】:

  • 我希望 JTextField 在 GUI 放大时保持相同的大小。 - 代码中有多个文本字段。 JTextField 似乎也位于控制面板的底部而不是顶部。 - 组件的显示基于布局管理器的规则以及将组件添加到面板的顺序.您发布的代码不是minimal reproducible example,因为您使用的是非标准JDK 类,所以我们看不到您描述的问题。发布适当的“MRE”来展示您的问题。如果您关心的是文本字段,那么 JFreeChart 组件应该无关紧要。
  • 对不起,我的问题不清楚。我所有的 JTextFields 都有相同的行为。我希望它们都保持相同的大小(在线表单中看到的典型 JTextField)
  • 问题很明确。可能我的回答不清楚。你的问题是关于布局管理器的,但你还没有发布你的minimal reproducible example 来展示你是如何使用布局管理器的。我们不能复制/粘贴/编译和测试发布的代码。由于您的问题仅与文本字段有关,因此“MRE”应删除第 3 方组件并证明您的文本字段存在问题。
  • 我想上传问题的快照。 stackexchange 是否允许 .jpeg 上传
  • 我们对快照不感兴趣。代码导致了问题。我们需要代码。您已声明您的文本字段有问题。所以发布一个minimal reproducible example 来展示这个问题。创建“MRE”需要 5 分钟。如果您对花 5 分钟创建 MRE 不感兴趣,那么我对提供帮助不感兴趣。如果您会针对您的问题发布适当的 MRE,我敢肯定您已经有了答案。

标签: java swing jtextfield


【解决方案1】:

布局根据大小控制放置的内容。只要你有一个布局,它总是会调整大小。大多数时候,您希望这种行为发生,但简单地说就是禁用

parentContainer.setLayout(null);

这称为空布局。注意我放了parentContainer,因为你有一堆文本字段,所以我不知道你想要哪个。

然后您可以使用textField.setBounds(x, y, width, height) 指定位置。

但我建议您不要使用空布局。

【讨论】:

  • (1-) 不应使用空布局。那不是解决方案。解决方案是正确使用布局管理器。 只要你有一个布局,它总是会调整大小 - 这不是真的。组件是否调整大小取决于布局管理器的规则。
猜你喜欢
  • 2011-02-07
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
相关资源
最近更新 更多