簡體   English   中英

在 GUI 中修復 JTextField 的大小

[英]fixing the size of a JTextField within a GUI

我有以下代碼來創建 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();
            }
        });
    }
}

布局根據大小控制放置的內容。 只要你有一個布局,它總是會調整大小。 大多數時候,您希望這種行為發生,但禁用簡單地說

parentContainer.setLayout(null);

這稱為 null 布局。 注意我放了parentContainer因為你有一堆文本字段所以我不知道你想要哪個。

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

但我建議您不要使用 null 布局。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM