GridBagLayout把一个界面分为m行n列的网格
gridx表示组件位于第几列,gridy表示组件位于第几行
gridwidth表示组件占几列,gridheight表示组件占几行
fill指定当组件小于单元格大小时的填充方式
anchor表示当组件小于单元格大小时的对齐方式
weighx表示当界面有收缩放大时,组件的宽度收缩放大的程度,
weighty表示组件高度收缩放大的程度
ipadx表示组件最小的宽度,
ipady表示组件最小的高度
package swing.mail; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.util.Scanner; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.SwingWorker; /*2015-7-7*/ public class MailTest { public static void main(String[] args) { JFrame frame = new MailTestFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); frame.setLocationRelativeTo(null); } } class MailTestFrame extends JFrame { private static final long serialVersionUID = 1L; private Scanner in; private PrintWriter out; private JTextField from; private JTextField to; private JTextField smtpServer; private JTextArea message; private JTextArea comm; public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 300; public MailTestFrame() { setTitle("MailTest"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); setLayout(new GridBagLayout()); add(new JLabel("From:"), new GBC(0, 0).setFill(GBC.HORIZONTAL)); from = new JTextField(20); add(from, new GBC(1, 0).setFill(GBC.HORIZONTAL).setWeight(100, 0)); add(new JLabel("To:"), new GBC(0, 1).setFill(GBC.HORIZONTAL)); to = new JTextField(20); add(to, new GBC(1, 1).setFill(GBC.HORIZONTAL).setWeight(100, 0)); add(new JLabel("SMTP server:"), new GBC(0, 2).setFill(GBC.HORIZONTAL)); smtpServer = new JTextField(20); add(smtpServer, new GBC(1, 2).setFill(GBC.HORIZONTAL).setWeight(100, 0)); message = new JTextArea(); add(new JScrollPane(message), new GBC(0, 3, 2, 1).setFill(GBC.BOTH).setWeight(100, 100)); comm = new JTextArea(); add(new JScrollPane(comm), new GBC(0, 4, 2, 1).setFill(GBC.BOTH).setWeight(100, 100)); JPanel buttonPanel = new JPanel(); add(buttonPanel, new GBC(0, 5, 2, 1)); JButton sendButton = new JButton("Send"); buttonPanel.add(sendButton); sendButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new SwingWorker<Void, Void>() { @Override protected Void doInBackground() throws Exception { comm.setText(""); sendMail(); return null; } }.execute(); } }); } public void sendMail() { try { Socket s = new Socket(smtpServer.getText(), 25); InputStream inputStream = s.getInputStream(); OutputStream outputStream = s.getOutputStream(); in = new Scanner(inputStream); out = new PrintWriter(outputStream, true); String hostName = InetAddress.getLocalHost().getHostName(); receive(); send("Hello" + hostName); receive(); send("Mail From:<" + from.getText() + ">"); receive(); send("RCPT TO:<" + to.getText() + ">"); receive(); send("DATA"); receive(); send(message.getText()); send("."); receive(); s.close(); } catch (Exception e) { comm.append("Error:" + e); } } private void send(String string) { comm.append(string); comm.append("\n"); out.println(string.replace("\n", "\r\n")); out.print("\r\n"); out.flush(); } private void receive() { String line = in.nextLine(); comm.append(line); comm.append("\n"); } }
package swing.mail; import java.awt.GridBagConstraints; /** * This class simplifies the use of the GridBagConstraints class. */ public class GBC extends GridBagConstraints { private static final long serialVersionUID = 1L; /** * Constructs a GBC with a given gridx and gridy position and all other grid * bag constraint values set to the default. * * @param gridx * the gridx position * @param gridy * the gridy position */ public GBC(int gridx, int gridy) { this.gridx = gridx; this.gridy = gridy; } /** * Constructs a GBC with given gridx, gridy, gridwidth, gridheight and all * other grid bag constraint values set to the default. * * @param gridx * the gridx position * @param gridy * the gridy position * @param gridwidth * the cell span in x-direction * @param gridheight * the cell span in y-direction */ public GBC(int gridx, int gridy, int gridwidth, int gridheight) { this.gridx = gridx; this.gridy = gridy; this.gridwidth = gridwidth; this.gridheight = gridheight; } /** * Sets the cell spans. * * @param gridwidth * the cell span in x-direction * @param gridheight * the cell span in y-direction * @return this object for further modification */ public GBC setSpan(int gridwidth, int gridheight) { this.gridwidth = gridwidth; this.gridheight = gridheight; return this; } /** * Sets the anchor. * * @param anchor * the anchor value * @return this object for further modification */ public GBC setAnchor(int anchor) { this.anchor = anchor; return this; } /** * Sets the fill direction. * * @param fill * the fill direction * @return this object for further modification */ public GBC setFill(int fill) { this.fill = fill; return this; } /** * Sets the cell weights. * * @param weightx * the cell weight in x-direction * @param weighty * the cell weight in y-direction * @return this object for further modification */ public GBC setWeight(double weightx, double weighty) { this.weightx = weightx; this.weighty = weighty; return this; } /** * Sets the insets of this cell. * * @param distance * the spacing to use in all directions * @return this object for further modification */ public GBC setInsets(int distance) { this.insets = new java.awt.Insets( distance, distance, distance, distance); return this; } /** * Sets the insets of this cell. * * @param top * the spacing to use on top * @param left * the spacing to use to the left * @param bottom * the spacing to use on the bottom * @param right * the spacing to use to the right * @return this object for further modification */ public GBC setInsets(int top, int left, int bottom, int right) { this.insets = new java.awt.Insets( top, left, bottom, right); return this; } /** * Sets the internal padding * * @param ipadx * the internal padding in x-direction * @param ipady * the internal padding in y-direction * @return this object for further modification */ public GBC setIpad(int ipadx, int ipady) { this.ipadx = ipadx; this.ipady = ipady; return this; } }
http://bbs.csdn.net/topics/300244821
时间: 2024-11-08 00:27:45