.


:




:

































 

 

 

 


Public class FlowLayout extends Object




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);





:


: 2016-04-03; !; : 622 |


:

:

, .
==> ...

1698 - | 1573 -


© 2015-2024 lektsii.org - -

: 0.677 .