簡體   English   中英

Java網格布局GUI - 如何在事件上輸入新窗格?

[英]Java grid layout GUI - how to enter new pane on event?

如何設置按鈕以鏈接到完全不同的網格窗格? 如果我單擊JButton“更多選項”,我希望它將我鏈接到一個包含更多JButton選項的新頁面。 現在,一切都是靜態的。

現在,當您按“計算”時,程序只計算給定長度和寬度的矩形區域。 網格布局為4 x 2,由下面列出的JLabel,JTextField和JButton表示。

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

public class RectangleProgram extends JFrame
{
private static final int WIDTH = 400;
private static final int HEIGHT = 300;

private JLabel lengthL, widthL, areaL;
private JTextField lengthTF, widthTF, areaTF;
private JButton calculateB, exitB;

//Button handlers:
private CalculateButtonHandler cbHandler;
private ExitButtonHandler ebHandler;

public RectangleProgram()
{
    lengthL = new JLabel("Enter the length: ", SwingConstants.RIGHT);
    widthL = new JLabel("Enter the width: ", SwingConstants.RIGHT);
    areaL = new JLabel("Area: ", SwingConstants.RIGHT);

    lengthTF = new JTextField(10);
    widthTF = new JTextField(10);
    areaTF = new JTextField(10);

    //SPecify handlers for each button and add (register) ActionListeners to each button.
    calculateB = new JButton("Calculate");
    cbHandler = new CalculateButtonHandler();
    calculateB.addActionListener(cbHandler);
    exitB = new JButton("Exit");
    ebHandler = new ExitButtonHandler();
    exitB.addActionListener(ebHandler);

    setTitle("Sample Title: Area of a Rectangle");
    Container pane = getContentPane();
    pane.setLayout(new GridLayout(4, 2));

    //Add things to the pane in the order you want them to appear (left to right, top to bottom)
    pane.add(lengthL);
    pane.add(lengthTF);
    pane.add(widthL);
    pane.add(widthTF);
    pane.add(areaL);
    pane.add(areaTF);
    pane.add(calculateB);
    pane.add(exitB);

    setSize(WIDTH, HEIGHT);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}

private class CalculateButtonHandler implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        double width, length, area;

        length = Double.parseDouble(lengthTF.getText()); //We use the getText & setText methods to manipulate the data entered into those fields.
        width = Double.parseDouble(widthTF.getText());
        area = length * width;

        areaTF.setText("" + area);
    }
}

public class ExitButtonHandler implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        System.exit(0);
    }
}

public static void main(String[] args)
{
    RectangleProgram rectObj = new RectangleProgram();
}

}

您可以使用CardLayout 它允許兩個或更多組件共享相同的顯示空間。

這是一個簡單的例子

在此輸入圖像描述

public class RectangleProgram {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {

                JFrame frame = new JFrame("Area of a Rectangle");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                JTextField lengthField = new JTextField(10);
                JTextField widthField = new JTextField(10);
                JTextField areaField = new JTextField(10);

                JButton calculateButton = new JButton("Calculate");
                JButton exitButton = new JButton("Exit");

                final JPanel content = new JPanel(new CardLayout());

                JButton optionsButton = new JButton("More Options");
                optionsButton.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        CardLayout cardLayout = (CardLayout) content.getLayout();
                        cardLayout.next(content);
                    }
                });

                JPanel panel = new JPanel(new GridLayout(0, 2)) {
                    @Override
                    public Dimension getPreferredSize() {
                        return new Dimension(250, 100);
                    }
                };
                panel.add(new JLabel("Enter the length: ", JLabel.RIGHT));
                panel.add(lengthField);

                panel.add(new JLabel("Enter the width: ", JLabel.RIGHT));
                panel.add(widthField);
                panel.add(new JLabel("Area: ", JLabel.RIGHT));
                panel.add(areaField);
                panel.add(calculateButton);
                panel.add(exitButton);

                JPanel optionsPanel = new JPanel();
                optionsPanel.add(new JLabel("Options", JLabel.CENTER));

                content.add(panel, "Card1");
                content.add(optionsPanel, "Card2");
                frame.add(content);
                frame.add(optionsButton, BorderLayout.PAGE_END);

                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}

閱讀如何使用CardLayout

暫無
暫無

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

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