Java 简单布局管理

来源:互联网 发布:知乎 北京 皮肤科 编辑:程序博客网 时间:2024/05/17 21:51
边框布局(BorderLayout): 中是先放置边缘组件,剩余的空间由中间组件占据,当容器缩放时边缘组建厚度不变,而中部组件的大小会发生变化。 边框布局的默认放置位置是CENTER。


流式布局(FlowLayout): 容器里面的组件总是位于容器的中间, 当一行空间不足够时, 会自动换置下一行, 当容器拉伸时,同理。


网格布局(GridLayout): 其像电子数据表一样, 按行列排列所有组件, 且每个单元大小都是一样的。当容器缩放时,组件也会随之变大或变小,但每个网格大小都是保持一致的。在网格布局对象构造其中,需要制定行数和列数。添加组件,不指定的情况下,是从第一行第一列开始,然后是第一行第二列,一次类推。 (课调用pack方法将所有组件俺最佳的高度和宽度显示在框架中。)

JPane 默认的是流式布局管理

JFrame默认的是边框布局管理



eg:


package com.njust.JunH.JavaStart;


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


import javax.swing.*;


public class Calculator {


/**
* @param args
* @author Jun.h
* @company NUST
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EventQueue.invokeLater(new Runnable() {
public void run() {
CalculatorFrame frame = new CalculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}


}


class CalculatorFrame extends JFrame {
public CalculatorFrame() {
setTitle("Calculator");
CalculatorPanel panel = new CalculatorPanel();
add(panel);
pack();
}
}


class CalculatorPanel extends JPanel {
private JButton display;
private JPanel panel;
private double result;
private String lastCommand;
private boolean start;

public CalculatorPanel() {
setLayout(new BorderLayout());
result = 0;
lastCommand = "=";
start = true;

//add the display
display = new JButton("0");
display.setEnabled(false);
add(display, BorderLayout.NORTH);

ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();

//add the buttons in a 4*4 grid
panel = new JPanel();
panel.setLayout(new GridLayout(4,4));

addButton("7", insert);
addButton("8", insert);
addButton("9", insert);
addButton("/", command);

addButton("4", insert);
addButton("5", insert);
addButton("6", insert);
addButton("*", command);

addButton("1", insert);
addButton("2", insert);
addButton("3", insert);
addButton("-", command);

addButton("0", insert);
addButton(".", insert);
addButton("=", command);
addButton("+", command);

add(panel, BorderLayout.CENTER);
}

private void addButton(String label, ActionListener listener) {
JButton btn = new JButton(label);
btn.addActionListener(listener);
panel.add(btn);
}

private class InsertAction implements ActionListener {
public void actionPerformed(ActionEvent event) {
String input = event.getActionCommand();
if (start) {
display.setText("");
start = false;
}

display.setText(display.getText() + input);
}
}

private class CommandAction implements ActionListener {
public void actionPerformed(ActionEvent event) {
String command = event.getActionCommand();

if (start) {
if (command.equals("-")){
display.setText(command);
start = false;
}
else lastCommand = command;
}
else {
calculate(Double.parseDouble(display.getText()));
lastCommand = command;
start = true;
}
}
}

public void calculate(double x) {
if (lastCommand.equals("+")) result += x;
else if (lastCommand.equals("*")) result *= x;
else if (lastCommand.equals("-")) result -= x;
else if (lastCommand.equals("/")) result /= x;
else if (lastCommand.equals("=")) result = x;

display.setText("" + result);
}
}
原创粉丝点击