implements LayoutManager, Serializable { }
.
/* # 1: : FlowLayoutEx.java */
package chapt13;
import java.awt.*;
import javax.swing.*;
public class FlowLayoutEx extends JApplet {
private Component c[] = new Component[9];
public void init() {
String[] msg =
{ " 1", " 2", " 3" };
String[] str =
{ " 1", " 2", " 3" };
String[] txt = {" 1", " 2", " 3"};
//
setLayout(new FlowLayout());
setBackground(Color.gray);
setForeground(Color.getHSBColor(1f, 1f, 1f));
for (int i = 0; i < c.length/3; i++) {
c[i] = new JButton(str[i]);
add(c[i]);
c[i + 3] = new JLabel(msg[i]);
add(c[i + 3]);
c[i+6] = new JTextField(txt[i]);
add(c[i + 6]);
}
setSize(450, 150);
}
}
add(Component ob), java.awt.Container ( Component), JButton, JLabel, JTextField , .
setLayout(LayoutManager mgr) . .
. 13.1. FlowLayout
GridLayout . BoxLayout . .
/* # 2: : GridLayoutEx.java */
package chapt13;
import javax.swing.*;
import java.awt.*;
public class GridLayoutEx extends JApplet {
private Component b[] = new Component[7];
public void init() {
setLayout(new GridLayout(2, 4)); /* ,
*/
for (int i = 0; i < b.length; i++)
add((b[i] = new JButton("(" + i + ")")));
}
}
. 13.2. GridLayout
BorderLayout , , : NORTH, SOUTH, EAST, WEST. CENTER.
/* # 3: :
BorderGridLayoutDemo.java */
package chapt13;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Container;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JToggleButton; //
public class BorderGridLayoutDemo extends JFrame {
public BorderGridLayoutDemo() {
Container c = getContentPane();
c.setLayout(new BorderLayout());
c.add(new JToggleButton("--1--"), BorderLayout.WEST);
|
|
c.add(new JToggleButton("--2--"), BorderLayout.SOUTH);
c.add(new JToggleButton("--3--"), BorderLayout.EAST);
JPanel jPanel = new JPanel();
c.add(jPanel, BorderLayout.NORTH);
jPanel.setSize(164, 40);
jPanel.setLayout(new GridLayout(2, 4));
for (int i = 0; i < 7; i++)
jPanel.add(new JButton("" + i));
}
public static void main(String[] args) {
BorderGridLayoutDemo fr =
new BorderGridLayoutDemo();
fr.setSize(300, 200);
fr.setTitle("Border & Grid Layouts Example");
fr.setDefaultCloseOperation(EXIT_ON_CLOSE);
fr.setVisible(true);
}
}
. 13.3. BorderLayout GridLayout
BoxLayout . Box , .
/* # 4: : BoxLayoutDemo.java */
package chapt13;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
public class BoxLayoutDemo extends JFrame {
public BoxLayoutDemo() {
Container c = getContentPane();
setBounds(20, 80, 300, 300);
c.setLayout(new BorderLayout());
Box row = Box.createHorizontalBox();
for (int i = 0; i < 4; i++) {
JButton btn = new JButton(" " + i);
btn.setFont(new Font("Tahoma", 1, 10 + i * 2));
row.add(btn);
}
c.add(row, BorderLayout.SOUTH);
JPanel col = new JPanel();
col.setLayout(
new BoxLayout(col, BoxLayout.Y_AXIS));
col.setBorder(
new TitledBorder(new EtchedBorder(), ""));
for (int i = 0; i < 4; i++) {
JToggleButton btn =
new JToggleButton(" " + i);
col.add(btn);
}
c.add(col, BorderLayout.WEST);
}
public static void main(String[] args) {
BoxLayoutDemo frame = new BoxLayoutDemo();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
. 13.4. BoxLayout Box
, null setBounds().
/* # 5: : NullLayoutEx.java */
package chapt13;
import java.awt.Container;
import javax.swing.*;
public class NullLayoutEx extends JFrame {
public NullLayoutEx() {
Container c = getContentPane();
//
setBounds(20, 80, 300, 300);
c.setLayout(null);
JButton jb = new JButton("");
//
jb.setBounds(200, 50, 90, 40);
c.add(jb);
JTextArea jta = new JTextArea();
//
jta.setBounds(10, 130, 180, 70);
jta.setText(" ");
c.add(jta);
}
public static void main(String args[]) {
NullLayoutEx nl = new NullLayoutEx();
nl.setDefaultCloseOperation(EXIT_ON_CLOSE);
nl.setVisible(true);
}
}
. 13.5.
|
|
AWT Component Container. Swing JComponent, Container.
Label, JLabel, , .
setText(String txt). getText().
Button JButton, CheckBox JCheckBox, RadioButton JRadioButton, JToggleButton .
List JList .
ScrollBar JScrollBar .
TextField JTextField TextArea JTextArea (. . 13.6).
AbstractButton, : JButton JToggleButton. , - , ( JRadioButton) ( JCheckBox). , AbstractButton JCheckBoxMenuItem JRadioButtonMenuItem, (. . 13.7).
. 13.6. Swing
. 13.7. Swing
: JButton , . JButton Swing : JButton(), JButton(String s), JButton(Icon i), JButton(String s, Icon i).
, . , . . JButton . JButton - , . , , ; . , init(). , , action-. , .
// # 6: : VisualEx.java
package chapt13;
import javax.swing.JPanel;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class VisualEx extends JApplet {
private JPanel jContentPane = null;
private JButton yesBtn = null;
private JButton noBtn = null;
private JLabel label = null;
private JTextField textField = null;
public void init() {
setSize(180, 160);
setContentPane(getJContentPane());
setBackground(java.awt.Color.white);
}
private JPanel getJContentPane() {
if (jContentPane == null) {
label = new JLabel();
label.setText("");
jContentPane = new JPanel();
jContentPane.setLayout(new FlowLayout());
jContentPane.add(getYesBtn(), null);
jContentPane.add(getNoBtn(), null);
jContentPane.add(label, null);
jContentPane.add(getTextField(), null);
}
return jContentPane;
}
private JButton getYesBtn() {
if (yesBtn == null) {
yesBtn = new JButton();
yesBtn.setText("");
yesBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label.setText(",");
textField.setText(" ");
|
|
}
});
}
return yesBtn;
}
private JButton getNoBtn() {
if (noBtn == null) {
noBtn = new JButton();
noBtn.setText("");
noBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label.setText(" ,");
textField.setText("");
}
});
}
return noBtn;
}
private JTextField getTextField() {
if (textField == null) {
textField = new JTextField();
textField.setColumns(12);
textField.setHorizontalAlignment(JTextField.CENTER);
textField.setEditable(false);
}
return textField;
}
}
. 13.8. ,
getSource() , , JButton. getText() , , setText() JLabel lbl. , .
JTextField, , . JTextField, . JTextField , , setText(). , ,
JComboBox , . , . JComboBox , . getSelectedItem() getSelectedIndex(). , setEditable(boolean editable). insertItemAt(int pos) removeItemAt(int pos).
// # 7: : ComboBoxEx.java
package chapt13;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class ComboBoxEx extends JApplet {
private final int N = 3;
private JTextField textField = new JTextField(2);
private JComboBox comboBox = new JComboBox();
private Map<String, Integer> exams =
new HashMap<String, Integer>(N);
private class ComboListener implements ItemListener {
// ComboBox
public void itemStateChanged(ItemEvent ev) {
String name = (String) ev.getItem();
textField.setText(exams.get(name).toString());
}
}
public void init() {
exams.put("", 4);
exams.put("", 7);
exams.put("", 8);
// ComboBox
Iterator i = exams.entrySet().iterator();
while (i.hasNext())
comboBox.addItem(
((Map.Entry) i.next()).getKey());
comboBox.addItemListener(new ComboListener());
textField.setText(exams.get(
comboBox.getSelectedItem()).toString());
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(comboBox);
c.add(textField);
}
}
. 13.9.
ItemEvent , . ItemListener. itemStateChanged(). ItemEvent . , JTextField.
|
|
. ResourceBundle (properties). , .
/* # 8: , ActionEvent:
ButtonActionDemo.java, Messages.java */
package chapt13;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.UnsupportedEncodingException;
import java.util.Locale;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ButtonActionDemo extends JFrame {
private static final String EN_LANGUAGE = "English";
private static final String RU_LANGUAGE = "";
private JPanel jContentPane = null;
private JComboBox languageChooser = null;
private JButton yesBtn = null;
private JButton noBtn = null;
private JLabel jLabel = null;
public ButtonActionDemo() {
initialize();
}
// ActionListener 'Yes'
private class YesButtonListener
implements ActionListener {
public void actionPerformed(ActionEvent event) {
jLabel.setText(getString("BUTTON_YES_MESSAGE"));
}
}
// ActionListener 'No'
private class NoButtonListener
implements ActionListener {
public void actionPerformed(ActionEvent event) {
jLabel.setText(getString("BUTTON_NO_MESSAGE"));
}
}
// ItemListener combobox
private class LanguageChooserItemListener
implements ItemListener {
public void itemStateChanged(ItemEvent e) {
if (((String) e.getItem()).equals(EN_LANGUAGE)) { Locale. setDefault (Locale. ENGLISH);
} else {
Locale. setDefault (new Locale("RU"));
}
yesBtn.setText(getString("BUTTON_YES"));
noBtn.setText(getString("BUTTON_NO"));
}
}
private void initialize() {
setSize(230, 200);
setContentPane(getJContentPane());
setTitle("JFrame");
setVisible(true);
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel = new JLabel();
jLabel.setText("JLabel");
jContentPane = new JPanel();
jContentPane.setLayout(new FlowLayout());
}
languageChooser = new JComboBox();
languageChooser.addItem(EN_LANGUAGE);
languageChooser.addItem(RU_LANGUAGE);
languageChooser.addItemListener(
new LanguageChooserItemListener());
yesBtn = new JButton(getString("BUTTON_YES"));
yesBtn.addActionListener(
new YesButtonListener());
noBtn = new JButton(getString("BUTTON_NO"));
noBtn.addActionListener(
new NoButtonListener());
jContentPane.add(languageChooser);
jContentPane.add(yesBtn);
jContentPane.add(noBtn);
jContentPane.add(jLabel);
return jContentPane;
}
public static void main(String[] args) {
Locale. setDefault (Locale. ENGLISH);
ButtonActionDemo ob = new ButtonActionDemo();
ob.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private String getString(String property) {
String text = "";
try {
text = new String(
Messages.getString(property).getBytes(
"ISO-8859-1"), "CP1251");
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}
return text;
}
}
package chapt13;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class Messages {
private static final String BUNDLE_NAME =
"chapt13.messages";
private static final ResourceBundle RESOURCE_BUNDLE =
ResourceBundle.getBundle(BUNDLE_NAME);
public static String getString(String key) {
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
}
messages.properties messages_ru.properties, , :
BUTTON_YES=yes
BUTTON_NO=no
BUTTON_YES_MESSAGE=Button <yes> is pressed
BUTTON_NO_MESSAGE=Button <no> is pressed
BUTTON_YES=
BUTTON_NO=
|
|
BUTTON_YES_MESSAGE= <>
BUTTON_NO_MESSAGE= <>
. 13.10.
, , getActionCommand() ActionEvent, .
(JRadioButton) .
/* # 9: :
RadioBtnGroupEx.java */
package chapt13;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
public class RadioBtnGroupEx extends JApplet {
private ButtonGroup btnGroup = new ButtonGroup();
private JLabel label = null;
private class RadioItemListener
implements ItemListener {
public void itemStateChanged(ItemEvent e) {
boolean selected =
(e.getStateChange() == ItemEvent.SELECTED);
AbstractButton button =
(AbstractButton) e.getItemSelectable();
if (selected)
label.setText("Selected Button: "
+ button.getActionCommand());
System.out.println(
"ITEM Choice Selected: " + selected +
", Selection: " + button.getActionCommand());
}
}
public void init() {
Container c = getContentPane();
c.setLayout(new FlowLayout());
JRadioButton red = new JRadioButton("Red");
red.setSelected(true);
btnGroup.add(red);
c.add(red);
label = new JLabel("Selected Button: Red");
JRadioButton green = new JRadioButton("Green");
btnGroup.add(green);
c.add(green);
JRadioButton blue = new JRadioButton("Blue");
btnGroup.add(blue);
c.add(blue);
ItemListener itemListener = new RadioItemListener();
red.addItemListener(itemListener);
green.addItemListener(itemListener);
blue.addItemListener(itemListener);
c.add(label);
}
}
. 13.11. JRadioButton
JSlider, , .
/* # 10: : SliderEx.java */
package chapt13;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SliderEx extends JApplet {
private JLabel sliderValue =
new JLabel("Slider Value: 25");
private class SliderListener
implements ChangeListener {
public void stateChanged(ChangeEvent e) {
sliderValue.setText("Slider Value: " +
((JSlider) (e.getSource())).getValue());
}
}
public void init() {
Container c = getContentPane();
c.setLayout(new FlowLayout());
JSlider slider =
new JSlider(JSlider. HORIZONTAL, 0, 50, 25);
//
slider.setPaintLabels(true);
slider.setPaintTicks(true);
//
slider.setMinorTickSpacing(2);
slider.setMajorTickSpacing(10);
slider.setLabelTable(
slider.createStandardLabels(10));
slider.addChangeListener(new SliderListener());
c.add(slider);
c.add(sliderValue);
}
}
. 13.12. JSlider
ItemEvent itemStateChange(ItemEvent e), ItemEvent , SELECTED, ChangeEvent stateChanged(ChangeEvent e).
JOptionPane. show Dialog( ). showConfirmDialog(), showMessageDialog(), showInputDialog()
showOptionDialog().
/ showConfirmDialog().
/* # 11: /: DemoConfirm.java */
package chapt13;
import javax.swing.*;
public class DemoConfirm {
public static void main(String[] args) {
int result = JOptionPane. showConfirmDialog (
null,
" ?",
"hooser",
JOptionPane.YES_NO_OPTION);
if (result == 0)
System.out.println("You chose Yes");
Else
System.out.println("You chose No");
}
}
, , , null.
. 13.13.
: YES_NO_CANCEL_OPTION, OK_CANCEL_OPTION, DEFAULT_OPTION .
(, , ..) showMessageDialog().
/* # 12: : DemoMessage.java */
package chapt13;
import javax.swing.*;
public class DemoMessage {
public static void main(String[] args) {
JOptionPane.showMessageDialog(
null,
" !",
"!",
JOptionPane.WARNING_MESSAGE);
// ERROR_MESSAGE
// INFORMATION_MESSAGE -
// WARNING_MESSAGE -
// QUESTION_MESSAGE -
// PLAIN_MESSAGE -
}
}
. 13.14.
- , showInputDialog(). .
/* # 13: : DemoInput.java */
package chapt13;
import javax.swing.*;
public class DemoInput {
public static void main(String[] args) {
String str =
JOptionPane. showInputDialog (
"Please input a value");
if (str!= null)
System. out. println("You input: " + str);
}
}
. 13.15.
.
/* # 14: :
DemoInputWithOptions.java */
package chapt13;
import javax.swing.*;
public class DemoInputWithOptions {
public static void main(String[] args) {
Object[] possibleValues =
{ "", "", "" };
Object selectedValue =
JOptionPane. showInputDialog (
null,
" ",
"Input",
JOptionPane.INFORMATION_MESSAGE,
null,
possibleValues,
possibleValues[0]);
// possibleValues[1] -
// null
if (selectedValue!= null)
System.out.println("You input: "
+ selectedValue);
}
}
. 13.16.
JDailog. .
// # 15: : MyDialog.java
package chapt13;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class MyDialog extends JDialog{
private final JFrame parent;
private JCheckBox cb = new JCheckBox();
private JButton ok = new JButton("Ok");
public MyDialog(final JFrame parent, String name) {
super (parent, name, true);
this. parent = parent;
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.add(new JLabel("Exit?"));
ok.addActionListener(
new ActionListener(){
public void actionPerformed(
ActionEvent e) {
dispose();
if (cb.isSelected())
parent.dispose();
}
});
c.add(cb);
c.add(ok);
setSize(200, 100);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
}
public class DemoJDialog extends JFrame {
private JButton jButton = new JButton("Dialog");
DemoJDialog() {
super ("My DialogFrame");
Container c = getContentPane();
c.setLayout(new FlowLayout());
jButton.addActionListener(
new ActionListener() {
public void actionPerformed(
ActionEvent e) {
JDialog jDialog =
new MyDialog(DemoJDialog. this, "MyDialog");
}
});
c.add(jButton);
}
public static void main(String[] args) {
DemoJDialog f = new DemoJDialog();
f.setDefaultCloseOperation(EXIT_ON_CLOSE);
f.setSize(200, 120);
f.setVisible(true);
}
}
. 13.17.
JMenu, JMenuBar JMenuItem.
/* # 16: : SimpleMenu.java */
package chapt13;
import javax.swing.*;
import java.awt.event.*;
public class SimpleMenu extends JApplet {
private JMenu menu;
private JMenuItem item1, item2;
private class MenuItemListener
implements ActionListener {
public void actionPerformed(ActionEvent e) { JMenuItem jmi =
(JMenuItem) e.getSource();
if (jmi.equals(item2))
System. exit (0);
Else
showStatus("My Simple Menu");
}
}
public void init() {
JMenuBar menubar = new JMenuBar();
setJMenuBar(menubar);
menu = new JMenu("Main");
item1 = new JMenuItem("About");
item2 = new JMenuItem("Exit");
item1.addActionListener(
new MenuItemListener());
item2.addActionListener(
new MenuItemListener());
menu.add(item1);
menu.add(item2);
menubar.add(menu);
}
}
. 13.18.
JTextArea . , . , <Enter>. ( ), , , . JTextArea JTextComponent, , . , , , (. . 13.19).
JTextComponent |
JEditorPane |
JTextArea |
JTextField |
JTextPane |
JPasswordField |
JFormattedTextField |
JTextArea . JFileChooser.
. 13.19.
/* # 17: : ArraysWork.java */
package chapt13;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.plaf.metal.MetalBorders.TextFieldBorder;
public class ArraysWork extends JFrame {
private JFileChooser fileChooser =
new JFileChooser("D:\\");
private JButton openBtn = new JButton("Open");
private JButton resultBtn = new JButton("Result");
private JButton clearBtn = new JButton("Clear");
private JTextArea textArea = new JTextArea();
private ArrayList< int []> arrays =
new ArrayList< int []>();
private ArraysWork() {
Container contentPane = getContentPane();
contentPane.setLayout(null);
JPanel col = new JPanel();
col.setBounds(10, 10, 90, 110);
col.setLayout(new GridLayout(3, 1, 0, 8));
openBtn.addActionListener(
new ButtonListener());
resultBtn.addActionListener(
new ButtonListener());
clearBtn.addActionListener(
new ButtonListener());
col.add(openBtn);
col.add(resultBtn);
col.add(clearBtn);
contentPane.add(col, BorderLayout. EAST);
textArea.setBounds(130, 10, 110, 110);
textArea.setBorder(new TextFieldBorder());
textArea.setFont(
new Font("Courier New", Font. PLAIN, 12));
contentPane.add(textArea);
}
private class ButtonListener
implements ActionListener {
public void actionPerformed(ActionEvent event) {
if (event.getSource() == clearBtn)
textArea.setText("");
else if (event.getSource() == resultBtn)
viewArrays(true);
else if (event.getSource() == openBtn)
readArraysFromFile();
}
}
public static void main(String[] args) {
ArraysWork frame = new ArraysWork();
frame.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
frame.setBounds(200, 100, 280, 155);
frame.setVisible(true);
}
private void readArraysFromTextArea() {
arrays.clear();
//
for (int i = 0; i < textArea.getLineCount(); i++)
try {
int startOffset = textArea.getLineStartOffset(i);
int endOffset = textArea.getLineEndOffset(i);
StringTokenizer str =
new StringTokenizer(textArea.getText(
startOffset, endOffset - startOffset), " \n");
arrays.add(new int [str.countTokens()]);
int k = 0;
while (str.hasMoreTokens())
arrays.get(i)[k++] =
new Integer(str.nextToken()).intValue();
} catch (BadLocationException e) {
e.printStackTrace();
} catch (NumberFormatException e) {
JOptionPane. showMessageDialog (
null, "Enter only numbers!",
"Fatal error!", JOptionPane. ERROR_MESSAGE);
}
}
private void readArraysFromFile() {
String filePath = null;
int rVal =
fileChooser.showOpenDialog(fileChooser);
fileChooser.setVisible(true);
if (JFileChooser. APPROVE_OPTION == rVal)
filePath = fileChooser.getSelectedFile().getPath();
if (filePath == null)
return;
try {
Scanner sc = new Scanner(
new File(filePath));
int i = 0;
while (sc.hasNextLine()) {
StringTokenizer str =
new StringTokenizer(sc.nextLine());
arrays.add(new int [str.countTokens()]);
int k = 0;
while (str.hasMoreTokens())
arrays.get(i)[k++] =
new Integer(str.nextToken()).intValue();
i++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
viewArrays(false);
}
private void viewArrays(boolean result) {
if (result) {
readArraysFromTextArea();
handlingOfArrays();
}
textArea.setText("");
for (int i = 0; i < arrays.size(); i++) {
Formatter fmt = new Formatter();
for (int j = 0; j < arrays.get(i).length; j++)
fmt.format("%4d", arrays.get(i)[j]);
textArea.append(fmt.toString() + '\n');
}
}
void handlingOfArrays() {
for (int i = 0; i < arrays.size(); i++)
try {
arrays.get(i)[0] = -arrays.get(i)[0];
} catch (ArrayIndexOutOfBoundsException e) {
throw new AssertionError(" !");
}
}
}
. 13.20.
:
JScrollPane sp = new JScrollPane(textarea);