Java Tutorial/Swing/Swing Introduction
Содержание
Get position of component
<source lang="java">
import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.border.TitledBorder; public class Main extends JFrame {
JComponent comp = new JLabel("Test label"); public Main() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); comp.setToolTipText("Some tooltip text for component"); comp.setBorder(new TitledBorder("Button")); System.out.println("X:" + comp.getX() + " Y:" + comp.getY() + " width:" + comp.getWidth() + " height:" + comp.getHeight()); getContentPane().add(comp); pack(); System.out.println("X:" + comp.getX() + " Y:" + comp.getY() + " width:" + comp.getWidth() + " height:" + comp.getHeight()); setVisible(true); } public static void main(String arg[]) { new Main(); }
}</source>
Small Swing Application
<source lang="java">
import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; public class ButtonSample {
public static void main(String args[]) { Runnable runner = new Runnable() { public void run() { JFrame frame = new JFrame("Button Sample"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton button = new JButton("Select Me"); // Define ActionListener ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { System.out.println("I was selected."); } }; // Attach listeners button.addActionListener(actionListener); frame.add(button, BorderLayout.SOUTH); frame.setSize(300, 100); frame.setVisible(true); } }; EventQueue.invokeLater(runner); }
}</source>
Swing components
JPasswordFielda specialized text field for password entryJEditorPane and JTextPaneprovide support for displaying and editing multiple-attributed content, such as an HTML and RTF.JSpinnerprovides selection from an ordered set of predefined valuesJToggleButtonoffers a button that stays depressed when selected.JSliderlike the Scrollbar component, offers various clues to help the user choose a value.JProgressBarallows the user to visually see the progress of an activity.JFormattedTextFieldprovides help for the input of formatted text, like numeric values, phone numbersJTabledisplays two-dimensional row and column informationJTreesupports the display of hierarchical data.JToolTipoffers useful tips.JToolBaroffers a draggable toolbarJRadioButtonMenuItema radio button menu component.JSeparatorThe menu"s separator barJDesktopPane and JInternalFrameThis pair of components are for Windows Multiple Document Interface (MDI).JOptionPanecreates pop-up windows with varied content,JColorChooserfor choosing a colorJSplitPaneplaces multiple components in a window with draggable divider.JTabbedPanetabbed panel
Swing Constants
Box-orientation Constants:
- static int TOP
- static int LEFT
- static int BOTTOM
- static int RIGHT
Geographical-direction Constants:
- static int NORTH
- static int NORTH_EAST
- static int EAST
- static int SOUTH_EAST
- static int SOUTH
- static int SOUTH_WEST
- static int SOUTH
- static int NORTH_WEST
- static int CENTER
The orientation of a component:
- static int HORIZONTAL
- static int VERTICAL
Swing MVC
The design of the Swing component classes is loosely based on the Model-View-Controller architecture, or MVC.
- The model stores the data.
- The view creates the visual representation from the data in the model.
- The controller deals with user interaction and modifies the model and/or the view.
Swing Worker from JDK 6 SE
<source lang="java">
import java.awt.LayoutManager; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.SwingWorker; public class SwingWorkerDemo {
public static void main(String[] args) { JTextArea textArea = new JTextArea(10, 20); final JProgressBar progressBar = new JProgressBar(0, 10); final CounterTask task = new CounterTask(); task.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if ("progress".equals(evt.getPropertyName())) { progressBar.setValue((Integer) evt.getNewValue()); } } }); JButton startButton = new JButton("Start"); startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { task.execute(); } }); JButton cancelButton = new JButton("Cancel"); cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { task.cancel(true); } }); JPanel buttonPanel = new JPanel(); buttonPanel.add(startButton); buttonPanel.add(cancelButton); JPanel cp = new JPanel(); LayoutManager layout = new BoxLayout(cp, BoxLayout.Y_AXIS); cp.setLayout(layout); cp.add(buttonPanel); cp.add(new JScrollPane(textArea)); cp.add(progressBar); JFrame frame = new JFrame("SwingWorker Demo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(cp); frame.pack(); frame.setVisible(true); }
} class CounterTask extends SwingWorker<Integer, Integer> {
private static final int DELAY = 1000; public CounterTask() { } @Override protected Integer doInBackground() throws Exception { int i = 0; int count = 10; while (!isCancelled() && i < count) { i++; publish(new Integer[] { i }); setProgress(count * i / count); Thread.sleep(DELAY); } return count; } protected void process(List<Integer> chunks) { for (int i : chunks) System.out.println(i); } @Override protected void done() { if (isCancelled()) System.out.println("Cancelled !"); else System.out.println("Done !"); }
}</source>
Understanding the Predefined Data Models: Swing Component Models
<source lang="java">
Component Data Model(Interface) Implementations
AbstractButton ButtonModel DefaultButtonModel JColorChooser ColorSelectionModel DefaultColorSelectionModel JComboBox ComboBoxModel N/A MutableComboBoxModel DefaultComboBoxModel JFileChooser ListModel BasicDirectoryModel JList ListModel AbstractListModel DefaultListModel ListSelectionModel DefaultListSelectionModel JMenuBar SingleSelectionModel DefaultSingleSelectionModel JPopupMenu SingleSelectionModel DefaultSingleSelectionModel JProgressBar BoundedRangeModel DefaultBoundedRangeModel JScrollBar BoundedRangeModel DefaultBoundedRangeModel JSlider BoundedRangeModel DefaultBoundedRangeModel JSpinner SpinnerModel AbstractSpinnerModel SpinnerDateModel SpinnerListModel SpinnerNumberModel JTabbedPane SingleSelectionModel DefaultSingleSelectionModel JTable TableModel AbstractTableModel DefaultTableModel TableColumnModel DefaultTableColumnModel ListSelectionModel DefaultListSelectionModel JTextComponent Document AbstractDocument PlainDocument StyledDocument DefaultStyleDocument HTMLDocument JToggleButton ButtonModel ToggleButtonModel JTree TreeModel DefaultTreeModel TreeSelectionModel DefaultTreeSelectionModel JTree.EmptySelectionModel</source>