主要用到的技巧包括界面嵌套布局(包括BorderLayout, FlowLayout, GridLayout),匿名类,以及java.util.Map<K,V>泛型类的使用。Enjoy it !
import javax.swing.*; import java.util.HashMap; import java.util.Map; import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TranslateDemo { public static void main( String[] args ) { new MyWin( "Translator" ); } } class MyWin extends JFrame { private static final long serialVersionUID = 4965728863455140660L; private JTextField txtEn = new JTextField( 30 ); private JTextField txtCN = new JTextField( 30 ); private JLabel lblInfo = new JLabel( "Translation Demo", JLabel.CENTER ); private JLabel lblEn = new JLabel( "English", JLabel.LEFT ); private JLabel lblCN = new JLabel( "Chinese", JLabel.LEFT ); private JButton btnTrans = new JButton( "Translate" ); private Map<String, String> dict = new HashMap<String, String>(); MyWin( String title ) { super( title ); Container cp = getContentPane(); cp.add( lblInfo, BorderLayout.NORTH ); JPanel enPanel = new JPanel(); enPanel.add( lblEn ); enPanel.add( txtEn ); JPanel lblPanel = new JPanel( new GridLayout( 2, 1 ) ); lblPanel.add( lblEn ); lblPanel.add( lblCN ); txtEn.setAutoscrolls( true ); txtCN.setAutoscrolls( true ); JPanel txtPanel = new JPanel( new GridLayout( 2, 1 ) ); txtPanel.add( txtEn ); txtPanel.add( txtCN ); txtEn.requestFocus(); JPanel panel = new JPanel( new BorderLayout() ); panel.add( lblPanel, BorderLayout.WEST ); panel.add( txtPanel, BorderLayout.CENTER ); cp.add( panel, BorderLayout.CENTER ); JPanel btnPane = new JPanel(); btnPane.add( btnTrans ); cp.add( btnPane, BorderLayout.SOUTH ); dict.put( "Hello, Java!", "你好,JAVA!"); dict.put( "good morning", "早上好" ); btnTrans.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { txtCN.setText( dict.get( txtEn.getText() ) ); } }); setSize( 200, 100 ); setLocation( 450, 200 ); setVisible( true ); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); pack(); } }