Java 调整标签、文本字段和;按钮大小

Java 调整标签、文本字段和;按钮大小,java,swing,user-interface,layout,Java,Swing,User Interface,Layout,我已经在Swing中编写了分期付款贷款计划的代码,但外观不太好。如何调整标签、文本字段和按钮的大小 import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JApplet; import javax.swing.JButton; import javax

我已经在Swing中编写了
分期付款贷款计划
的代码,但外观不太好。如何调整标签、文本字段和按钮的大小

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

public class AmortizationLoanSchedule extends JApplet implements ActionListener {

    private JLabel LoanAmount = new JLabel("Loan Amount");
    private JLabel NumberOfYears = new JLabel("Number Of Years");
    private JLabel InterestRate = new JLabel("Interest Rate (Annual)");

    private JTextField jtfLoanAmount = new JTextField(10);
    private JTextField jtfNumberOfYears = new JTextField(10);
    private JTextField jtfInterestRate = new JTextField(10);

    // Calculate button is also needed
    private JButton jbtCalculate = new JButton("Amortize Loan");

    // ...and a text area where the results will be displayed
    private JTextArea jtaResults = new JTextArea();

    public void init() {
        try {
            // Panel p1 will hold the input
            JPanel p1 = new JPanel();
            p1.setLayout(new GridLayout(3, 3));
            p1.add(LoanAmount);
            p1.add(jtfLoanAmount);
            p1.add(NumberOfYears);
            p1.add(jtfNumberOfYears);
            p1.add(InterestRate);
            p1.add(jtfInterestRate);

            // Panel p2 will hold panel p1 and the calculate button
            JPanel p2 = new JPanel();
            p2.setLayout(new BorderLayout());
            p2
                    .setBorder(new TitledBorder(
                            "Enter loan amount, Number of years and annual interest rate"));
            p2.add(p1, BorderLayout.BEFORE_FIRST_LINE);
            p2.add(jbtCalculate, BorderLayout.AFTER_LAST_LINE);

            // Action listener for the button
            jbtCalculate.addActionListener(this);

            // Make the text area scrollable and uneditable
            JScrollPane scrollPane = new JScrollPane(jtaResults);
            jtaResults.setRows(12);
            jtaResults.setEditable(false);

            // Place the two panels to the applet
            getContentPane().add(p2, BorderLayout.NORTH);
            getContentPane().add(scrollPane, BorderLayout.SOUTH);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == jbtCalculate)
            calculateLoan();
        else
            System.out.println("you will never see this text!");

    }

    public void calculateLoan() {
        if ((jtfNumberOfYears.getText().equals(""))
                || (jtfLoanAmount.getText().equals(""))
                || (jtfInterestRate.getText().equals(""))) {
            JOptionPane.showMessageDialog(null, "All fields are mandatory",
                    null, 1);
        } else {
            int numberOfYears = Integer.parseInt(jtfNumberOfYears.getText());
            double loanAmount = Double.parseDouble(jtfLoanAmount.getText());
            double annualInterestRate = (Double.parseDouble(jtfInterestRate
                    .getText())) / 100;

            double monthlyInterestRate = annualInterestRate / 12;
            double numberOfMonths = numberOfYears * 12;
            double monthlyPayment = loanAmount
                    * (monthlyInterestRate / (1 - Math.pow(
                            1 + monthlyInterestRate, -numberOfMonths)));
            double totalPayment = monthlyPayment * numberOfMonths;
            double balance = loanAmount;
            double interest;
            double principal;

            jtaResults.append("Payment#\t" + "Interest\t" + "Principal\t"
                    + "Balance\n\n");

            for (int i = 0; i < numberOfYears * 12; i++) {
                interest = (int) (monthlyInterestRate * balance * 100) / 100.0;
                principal = (int) ((monthlyPayment - interest) * 100) / 100.0;
                balance = (int) ((balance - principal) * 100) / 100.0;

                jtaResults.append(i + 1 + "\t" + interest + "\t" + principal
                        + "\t" + balance + "\n");
            }

            jtaResults.append("\n\nMonthly Payment: $"
                    + (int) (monthlyPayment * 100) / 100.0 + "\n");
            jtaResults.append("Total Payment: $" + (int) (totalPayment * 100)
                    / 100.0 + "\n\n");
        }
    }
}
导入java.awt.BorderLayout;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JApplet;
导入javax.swing.JButton;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
导入javax.swing.JTextField;
导入javax.swing.border.TitledBorder;
公共类AmorizationLoanSchedule扩展JApplet实现ActionListener{
私人JLabel LoanAmount=新JLabel(“贷款金额”);
私人JLabel NumberOfYears=新JLabel(“年数”);
私人JLabel利率=新JLabel(“年利率”);
私有JTextField jtfLoanAmount=新JTextField(10);
私有JTextField jtfNumberOfYears=新JTextField(10);
私有JTextField jtfineterestate=新JTextField(10);
//还需要“计算”按钮
私人JButton jbtCalculate=新JButton(“摊销贷款”);
//…以及显示结果的文本区域
私有JTextArea jtaResults=新JTextArea();
公共void init(){
试一试{
//面板p1将保持输入
JPanel p1=新的JPanel();
p1.设置布局(新网格布局(3,3));
p1.添加(贷款金额);
p1.添加(jtfLoanAmount);
p1.增加(年数);
p1.增加(JTF年数);
p1.添加(酯);
p1.添加(JTFinterestate);
//面板p2将保持面板p1和计算按钮
JPanel p2=新的JPanel();
p2.setLayout(新的BorderLayout());
p2
.SEBTORDER(新标题边界)(
“输入贷款金额、年数和年利率”);
p2.添加(p1,边界布局。在第一行之前);
p2.添加(jbtCalculate,BorderLayout.在最后一行之后);
//按钮的操作侦听器
jbtCalculate.addActionListener(此);
//使文本区域可滚动且不可编辑
JScrollPane scrollPane=新的JScrollPane(jtaResults);
jtaResults.setRows(12);
jtaResults.setEditable(false);
//将两个面板放置到小程序中
getContentPane().add(p2,BorderLayout.NORTH);
getContentPane().add(滚动窗格,BorderLayout.SOUTH);
}捕获(例外e){
e、 printStackTrace();
}
}
已执行的公共无效操作(操作事件e){
如果(例如getSource()==jbtCalculate)
calculateLoan();
其他的
System.out.println(“您永远不会看到此文本!”);
}
公共空值计算器(){
if((jtfNumberOfYears.getText().equals(“”))
||(jtfLoanAmount.getText()等于(“”)
||(jtfinTerestate.getText()等于(“”)){
JOptionPane.showMessageDialog(null,“所有字段都是必需的”,
空,1);
}否则{
int numberOfYears=Integer.parseInt(jtfNumberOfYears.getText());
double-loanAmount=double.parseDouble(jtfLoanAmount.getText());
double AnnualInterestate=(double.parseDouble(JTFinTerestate
.getText())/100;
双月利率=年利率/12;
double numberOfMonths=numberOfYears*12;
双月付款=贷款金额
*(月利率/(1-Math.pow)(
1+月利率,-月数);
双倍总付款=月付款*月数;
双倍余额=贷款金额;
双重利益;
双重主体;
jtaResults.append(“付款”#\t“+”利息\t“+”本金\t”
+“余额\n\n”);
对于(int i=0;i

更新 这是必需的

有什么问题吗

  • (包括教程底部使用的LayoutManager)


2) 为避免输入非字符的普通字符,大小由。您可以选择一个LayoutManager,它可以按照您想要的方式放置和调整内容的大小,也可以在您想要显示空间的位置放置空白元素(JPanel应该可以工作)

您还可以使用组件上的方法,例如
setMaximumSize(Dimension)
来更直接地控制各种组件的大小。

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

import javax.swing.border.TitledBorder;

class AmortizationLayout {

    AmortizationLayout() {
        JPanel gui = new JPanel(new BorderLayout(2,2));

        JPanel labelFields = new JPanel(new BorderLayout(2,2));
        labelFields.setBorder(new TitledBorder("BorderLayout"));

        JPanel labels = new JPanel(new GridLayout(0,1,1,1));
        labels.setBorder(new TitledBorder("GridLayout"));
        JPanel fields = new JPanel(new GridLayout(0,1,1,1));
        fields.setBorder(new TitledBorder("GridLayout"));

        for (int ii=1; ii<4; ii++) {
            labels.add(new JLabel("Label " + ii));
            // if these were of different size, it would be necessary to
            // constrain them using another panel
            fields.add(new JTextField(10));
        }

        labelFields.add(labels, BorderLayout.CENTER);
        labelFields.add(fields, BorderLayout.EAST);

        JPanel guiCenter = new JPanel(new BorderLayout(2,2));
        guiCenter.setBorder(new TitledBorder("BorderLayout"));
        JPanel buttonConstrain = new JPanel(new FlowLayout(FlowLayout.CENTER));
        buttonConstrain.setBorder(new TitledBorder("FlowLayout"));
        buttonConstrain.add( new JButton("Click Me") );
        guiCenter.add( buttonConstrain, BorderLayout.NORTH );

        guiCenter.add(new JScrollPane(new JTextArea(5,30)));

        gui.add(labelFields, BorderLayout.NORTH);
        gui.add(guiCenter, BorderLayout.CENTER);

        JOptionPane.showMessageDialog(null, gui);
    }

    public static void main(String[] args) throws Exception {
        //Create the GUI on the event dispatching thread
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                new AmortizationLayout();
            }
        });
    }
}
import java.awt.*;
导入javax.swing.*;
导入javax.swing.border.TitledBorder;
类摊销布局{
摊销布局(){
JPanel gui=新JPanel(新边界布局(2,2));
JPanel labelFields=新JPanel(新边界布局(2,2));
labelFields.SetBeOrder(新标题边框(“边框布局”);
JPanel标签=新的JPanel(新的GridLayout(0,1,1,1));
标签。收尾顺序(新标题边框(“网格布局”);
JPanel字段=新的JPanel(新的GridLayout(0,1,1,1));
字段。设置顺序(新标题边框(“GridLayout”);
对于(int ii=1;i)你能画吗