此例主要演示了JList和JRadioButton、ButtonGroup类的使用,用到的技巧主要是嵌套布局及匿名类。
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class SelectButtonDemo {
public static void main( String[] args ) {
new MyFrame( "Selection Button Demo" );
}
}
class MyFrame extends JFrame {
private static final long serialVersionUID = 3961792940094823675L;
private JRadioButton[] btnSports = null;
private ButtonGroup btnGroup = null;
private JTextArea txtInfo = null;
JList<String> cityList = null;
String sportType;
private static final String [] SPORTS = { "Football", "Basketball", "Running", "Bicycle" };
private static final String [] CITY = { "Beijing", "Shanghai", "Guangzhou", "Xi\'an", "Tianjin", "Hangzhou" };
MyFrame( String title ) {
super( title );
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
cityList = new JList<String>( CITY );
JScrollPane cityPane = new JScrollPane( cityList );
cityList.addListSelectionListener( new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
// do nothing
}
});
cityList.addMouseListener( new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
JList<?> src = null;
if( e.getClickCount() == 2 ) {
if( e.getSource() instanceof JList<?> ) {
src = (JList<?>) e.getSource();
txtInfo.setText( sportType + " : " + src.getSelectedIndex() + " : " + src.getSelectedValue() + "\n" );
}
}
}
});
JPanel btnPanel = new JPanel( new GridLayout( 1, 4 ) );
// initialize the button group
btnSports = new JRadioButton[4];
btnGroup = new ButtonGroup();
for( int i = 0; i < 4; ++i ) {
btnSports[i] = new JRadioButton( SPORTS[i] );
btnSports[i].addItemListener( new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
JRadioButton src = (JRadioButton)e.getItemSelectable();
txtInfo.setText( src.getText() );
sportType = src.getText();
}
});
btnGroup.add( btnSports[i] );
btnPanel.add( btnSports[i] );
}
txtInfo = new JTextArea( 10, 5 );
txtInfo.setLineWrap( true );
JScrollPane sp = new JScrollPane( txtInfo );
Container cp = getContentPane();
cp.add( btnPanel, BorderLayout.NORTH );
cp.add( sp, BorderLayout.CENTER );
cp.add( cityPane, BorderLayout.WEST );
setBounds( 400, 200, 300, 200 );
setVisible( true );
pack();
}
}