Mercurial > hg > octave-lyh
view scripts/java/org/octave/JDialogBox.java @ 15733:628011b1bd2f
maint: Remove unnecessary execute permissions from newly added java files.
* libinterp/dldfcn/__java__.h, scripts/java/java.m, scripts/java/javafields.m,
scripts/java/javamethods.m, scripts/java/javarmpath.m,
scripts/java/org/octave/DlgListener.java,
scripts/java/org/octave/JDialogBox.java, scripts/java/org/octave/TeXcode.java,
scripts/java/org/octave/TeXtranslator.java,
scripts/java/org/octave/images/error.png,
scripts/java/org/octave/images/information.png,
scripts/java/org/octave/images/octave.png,
scripts/java/org/octave/images/question.png,
scripts/java/org/octave/images/warning.png:
Remove unnecessary execute permissions.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 06 Dec 2012 08:22:32 -0800 |
parents | acf0addfc610 |
children | 6e39fe7992d9 |
line wrap: on
line source
/* ** Copyright (C) 2010 Martin Hepperle ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; If not, see <http://www.gnu.org/licenses/>. */ package org.octave; import java.net.*; import java.util.*; import java.awt.*; import javax.swing.*; /** * <p>Implementation of various dialog box functions</p> * * <p>The following functions are provided for being called via * Octave script files:</p> * <ul> * <li>errordlg</li> * <li>helpdlg</li> * <li>inputdlg</li> * </ul> * * <p>Copyright (c) 2010 Martin Hepperle</p> * * @author Martin Hepperle * @version 1.0 */ public class JDialogBox { public static final int CLOSE_OK = 1; public static final int CLOSE_NO = 2; public static final int CLOSE_CANCEL = 3; // dialog type public static int FLAG_LABEL = 1; public static int FLAG_TEXT = 2; public static int FLAG_INPUT = 4; public static int FLAG_LIST = 8; // icon selection public static int FLAG_QUESTION = 32; public static int FLAG_ERROR = 64; public static int FLAG_WARNING = 128; public static int FLAG_INFORMATION = 256; public static int DLG_QUEST = FLAG_QUESTION | FLAG_TEXT; public static int DLG_INPUT = FLAG_QUESTION | FLAG_INPUT; public static int DLG_LIST = FLAG_QUESTION | FLAG_LIST; private final static String m_OK = "OK"; private final static String m_Yes = "Yes"; private final static String m_No = "No"; private final static String m_Cancel = "Cancel"; private JButton m_ButtonNO; private JButton m_ButtonOK; private JButton m_ButtonCANCEL; private JButton m_Focus; private JTextArea m_TextField[]; private JList m_List; private JFrame m_ParentFrame; private int m_CloseMethod; // ------------------------------------ // implementation of listdlg function // ------------------------------------ /** * * @param listcell String[] - a array of strings, one for each list entry * @param selmode String * @param sizecell Object[] * @param initialcell Object[] * @param name String * @param promptcell String[] * @param okstring String * @param cancelstring String * @return String[] */ public static int[] listdlg ( String[] listcell, String selmode, Object[] sizecell, Object[] initialcell, String name, String[] promptcell, String okstring, String cancelstring ) { JDialogBox d = new JDialogBox (); d.genericdlg ( promptcell, listcell, name, selmode, DLG_LIST, sizecell, initialcell, okstring, null, cancelstring ); return ( d.getSelectedIndices () ); } // ------------------------------------ // implementation of inputdlg function // ------------------------------------- /** * Implements a variation of the inputdlg function. * * @param prompt String[] - an array of text strings to be used as labels. * @param title String - a text string to be used to label the dialog caption. * @param RowsCols int - defines the width of the text fields in columns. * @param defaults Object[] - an array of text strings or numbers to be * placed into the text fields as default values. * @return String[] - an array of text strings containing the content of the * text fields. */ public static String[] inputdlg ( String[] prompt, String title, Object[] RowsCols, Object[] defaults ) { JDialogBox d = new JDialogBox (); d.genericdlg ( prompt, null, title, "on", FLAG_INPUT | FLAG_QUESTION, RowsCols, defaults, m_OK, null, m_Cancel ); return ( d.getInput () ); } /** * Extract the current content from the text fields of an inputdlg. * * @return String[] - the text contained in the fields of an inputdlg. * null if the dialog was cancelled. */ private String[] getInput () { String s[] = null; if ( m_CloseMethod == CLOSE_OK ) { s = new String[m_TextField.length]; for ( int i = 0; i < s.length; i++ ) { s[i] = new String ( m_TextField[i].getText () ); } } return ( s ); } private String getResult () { String s = null; if ( m_CloseMethod == CLOSE_OK ) { s = m_ButtonOK.getText (); } else if ( m_CloseMethod == CLOSE_CANCEL ) { s = m_ButtonCANCEL.getText (); } else { s = m_ButtonNO.getText (); } return ( s ); } /** * Extract the current content from the text fields of an inputdlg. * * @return String[] - the text contained in the fields of an inputdlg. * null if the dialog was cancelled. */ private String[] getSelection () { String s[] = null; if ( m_CloseMethod == CLOSE_OK ) { int selection[] = m_List.getSelectedIndices (); s = new String[selection.length]; for ( int i = 0; i < s.length; i++ ) { // s[i] = new String ( Integer.toString(selection[i]) ); s[i] = ( m_List.getSelectedValues ()[i] ).toString (); } } return ( s ); } private int[] getSelectedIndices () { int s[] = null; if ( m_CloseMethod == CLOSE_OK ) { s = m_List.getSelectedIndices (); for ( int i = 0; i < s.length; i++ ) { // translate to 1 based indices s[i] = s[i] + 1; } } return ( s ); } public void SelectAll () { if ( null != m_List ) { m_List.setSelectionInterval ( 0, m_List.getModel ().getSize () - 1 ); } } // ------------------------------------- // implementation of helpdlg function // ------------------------------------- /** * Implements a simple helpdlg with default text and caption. Not very useful. * * Octave > helpdlg('helpstring','title') * * Called via helpdlg.m. * * @param helpstring String - a message string to be presented to the user. * The string can have embedded newline (\n) characters to break the message * into multiple lines. * @param title String - a text string to be used to label the dialog caption. * @return int - always 1 */ public static int helpdlg ( String helpstring, String title ) { JDialogBox d = new JDialogBox (); String s[] = new String[1]; s[0] = helpstring; return ( d.genericdlg ( s, null, title, "on", FLAG_TEXT | FLAG_INFORMATION, null, null, m_OK, null, m_Cancel ) ); } // ------------------------------------- // implementation of emptydlg function // ------------------------------------- /** * Implements a simple helpdlg with default text and caption. Not very useful. * * Octave > emptydlg('messagestring','title') * * Called via dlgbox.m. * * @param messagestring String - a message string to be presented to the user. * The string can have embedded newline (\n) characters to break the message * into multiple lines. * @param title String - a text string to be used to label the dialog caption. * @return int - always 1 */ public static int emptydlg ( String helpstring, String title ) { JDialogBox d = new JDialogBox (); String s[] = new String[1]; s[0] = helpstring; return ( d.genericdlg ( s, null, title, "on", FLAG_TEXT, null, null, m_OK, null, m_Cancel ) ); } // ------------------------------------------- // implementation of questdlg related functions // ------------------------------------------- /** * Implements a simple questdlg with default text and caption. Not very useful. * * @param question String - the question to be presented * @param title String - the caption * @param options String[] - 'str1', 'str2', 'str3', 'default' * @return String - the caption of the button pressed by the user */ public static String questdlg ( String question, String title, String[] options ) { JDialogBox d = new JDialogBox (); String s[] = new String[1]; s[0] = question; d.genericdlg ( s, options, title, "on", DLG_QUEST, null, null, options[0], options[1], options[2] ); return ( d.getResult () ); } // ------------------------------------- // implementation of errordlg function // ------------------------------------- /** * Implements a simple errordlg with default text and caption. Not very useful. * * @param errorstring String - the error message to display. * @param dlgname String - the caption of the dialog box. * @return int - always 1 */ public static int errordlg ( String errorstring, String dlgname ) { JDialogBox d = new JDialogBox (); String s[] = new String[1]; s[0] = errorstring; return ( d.genericdlg ( s, null, dlgname, "on", FLAG_TEXT | FLAG_ERROR, null, null, m_OK, null, m_Cancel ) ); } // ------------------------------------------- // implementation of warndlg related functions // ------------------------------------------- /** * Implements a simple warndlg with default text and caption. Not very useful. * * Called via warndlg.m. * * @param errorstring String - the message to be presented to the user. * @param dlgname String - the caption of the dialog box. * @return int - always 1 */ public static int warndlg ( String errorstring, String dlgname ) { JDialogBox d = new JDialogBox (); String s[] = new String[1]; s[0] = errorstring; return ( d.genericdlg ( s, null, dlgname, "on", FLAG_TEXT | FLAG_WARNING, null, null, m_OK, null, m_Cancel ) ); } // ------------------------------------- // generic dlg function // ------------------------------------- /** * A generic dialog creation and display function. * * @param message String[] * @param list String[] * @param caption String * @param on String * @param flag int * @param RowsCols Object[] * @param defaults Object[] * @param okstring String * @param nostring String * @param cancelstring String * @return int */ public int genericdlg ( String message[], String list[], String caption, String on, int flag, Object[] RowsCols, Object[] defaults, String okstring, String nostring, String cancelstring ) { TeXtranslator theTranslator = new TeXtranslator (); setSystemLnF ( true ); caption = theTranslator.replace ( caption ); m_ButtonNO = null; m_ButtonOK = null; m_ButtonCANCEL = null; // create a modal dialog with an empty frame as its parent m_ParentFrame = new JFrame (); // --- trick to bring dialog to the front // In Windows, the dialog is not brought to the foreground, but hidden // behind the Octave window as long as the parent frame is not visible. // To avoid that the frame is visible, we move it outside of the screen. m_ParentFrame.setBounds ( Toolkit.getDefaultToolkit ().getScreenSize (). width + 100, Toolkit.getDefaultToolkit ().getScreenSize (). height + 100, 1, 1 ); m_ParentFrame.setVisible ( true ); //-- end of trick JDialog dlg; dlg = new JDialog ( m_ParentFrame ); dlg.setTitle ( caption ); dlg.setModal ( true ); dlg.setDefaultCloseOperation ( JDialog.DISPOSE_ON_CLOSE ); DlgListener theListener = new DlgListener ( this ); Container d = dlg.getContentPane (); d.setLayout ( new BorderLayout ( 8, 8 ) ); // spacer d.add ( new JLabel ( " " ), BorderLayout.NORTH ); d.add ( new JLabel ( " " ), BorderLayout.EAST ); JPanel p = new JPanel (); if ( FLAG_LABEL == ( FLAG_LABEL & flag ) ) { // a single line label JLabel l = new JLabel ( theTranslator.replace ( message[0] ) ); p.add ( l ); } else if ( FLAG_TEXT == ( FLAG_TEXT & flag ) ) { String msg = theTranslator.replace ( message[0] ); // a multi-line text display for helpdlg StringTokenizer st = new StringTokenizer ( msg, "\n" ); int nRows = ( null == RowsCols ) ? 1 : Integer.parseInt ( RowsCols[0].toString () ); nRows = Math.max ( nRows, st.countTokens () ); int nCols = Math.max ( 1, msg.length () / nRows ); p.setLayout ( new GridLayout ( message.length, 1 ) ); JTextArea ta = new JTextArea ( msg, nRows, nCols ); ta.setEditable ( false ); ta.setFocusable ( false ); ta.setOpaque ( false ); // replace ugly monospaced font ta.setFont ( p.getFont () ); p.add ( ta ); } else if ( FLAG_INPUT == ( FLAG_INPUT & flag ) ) { // a multi label/textfield entry dialog for inputdlg GridBagConstraints gbc = new GridBagConstraints (); gbc.insets.top = 4; gbc.insets.left = 8; gbc.gridx = 0; gbc.anchor = GridBagConstraints.NORTHWEST; p.setLayout ( new GridBagLayout () ); m_TextField = new JTextArea[message.length]; // default values int nRows = 1; int nCols = 10; for ( int i = 0; i < message.length; i++ ) { String msg = theTranslator.replace ( message[i] ); JLabel l = new JLabel ( msg ); l.setHorizontalAlignment ( Label.LEFT ); gbc.gridy = 2 * i; p.add ( l, gbc ); /** * @todo CHECK handling of RowsCols for inputdlg */ if ( RowsCols != null ) { if ( RowsCols.length == 2 * message.length ) { nRows = Integer.parseInt ( RowsCols[i].toString () ); nCols = Integer.parseInt ( RowsCols[RowsCols.length / 2 + i].toString () ); } } m_TextField[i] = new JTextArea ( "", Math.max ( nRows, 1 ), nCols ); // avoid resizing m_TextField[i].setPreferredSize ( new Dimension ( Math.max ( nRows, 1 ), nCols ) ); m_TextField[i].setAutoscrolls ( false ); m_TextField[i].setFont ( p.getFont () ); m_TextField[i].setBorder ( new javax.swing.border.EtchedBorder () ); m_TextField[i].addKeyListener ( theListener ); gbc.gridy = 2 * i + 1; p.add ( m_TextField[i], gbc ); } if ( defaults != null ) { if ( defaults.length == message.length ) { for ( int i = 0; i < message.length; i++ ) { String def = theTranslator.replace ( defaults[i].toString () ); m_TextField[i].setText ( def ); } } } } else if ( DLG_LIST == ( DLG_LIST & flag ) ) { GridBagConstraints gbc = new GridBagConstraints (); gbc.insets.top = 4; gbc.insets.left = 8; gbc.gridx = 0; gbc.anchor = GridBagConstraints.NORTHWEST; p.setLayout ( new GridBagLayout () ); for ( int i = 0; i < message.length; i++ ) { // a single line label String msg = theTranslator.replace ( message[i] ); JLabel l = new JLabel ( msg ); gbc.gridy = i; p.add ( l, gbc ); } String lst[] = new String[list.length]; for ( int i = 0; i < list.length; i++ ) { lst[i] = theTranslator.replace ( list[i] ); } m_List = new JList ( lst ); // replace ugly monospaced font m_List.setFont ( p.getFont () ); m_List.setMinimumSize ( new Dimension ( Math.max ( 1, Integer.parseInt ( RowsCols[0].toString () ) ), Math.max ( 1, Integer.parseInt ( RowsCols[1].toString () ) ) ) ); m_List.setPreferredSize ( new Dimension ( Math.max ( 1, Integer.parseInt ( RowsCols[1].toString () ) ), Math.max ( 1, Integer.parseInt ( RowsCols[0].toString () ) ) ) ); m_List.setBorder ( new javax.swing.border.EtchedBorder () ); gbc.gridy = message.length; gbc.fill = GridBagConstraints.HORIZONTAL; p.add ( m_List, gbc ); if ( on.toLowerCase ().equals ( "single" ) ) { // single selection list m_List.setSelectionMode ( ListSelectionModel.SINGLE_SELECTION ); m_List.setSelectedIndex ( Integer.parseInt ( defaults[0].toString () ) - 1 ); } else { // multiple selection possible m_List.setSelectionMode ( ListSelectionModel. MULTIPLE_INTERVAL_SELECTION ); int selection[] = new int[defaults.length]; for ( int i = 0; i < defaults.length; i++ ) { selection[i] = Integer.parseInt ( defaults[i].toString () ) - 1; } m_List.setSelectedIndices ( selection ); JButton b = new JButton ( "Select All" ); b.setActionCommand ( "SELALL" ); b.addActionListener ( theListener ); gbc.gridy = message.length + 1; gbc.fill = GridBagConstraints.HORIZONTAL; p.add ( b, gbc ); } } // prepare icon, if any String sIconFile = null; String sIconResource = null; Icon theIcon = null; if ( FLAG_ERROR == ( FLAG_ERROR & flag ) ) { sIconFile = "images/error.png"; // Java for Windows sIconResource = "OptionPane.errorIcon"; // Java for Linux does not offer these standard icons... } else if ( FLAG_WARNING == ( FLAG_WARNING & flag ) ) { sIconFile = "images/warning.png"; // Java for Windows sIconResource = "OptionPane.warningIcon"; // Java for Linux does not offer these standard icons... } else if ( FLAG_QUESTION == ( FLAG_QUESTION & flag ) ) { sIconFile = "images/question.png"; // Java for Windows sIconResource = "OptionPane.questionIcon"; // Java for Linux does not offer these standard icons... } else if ( FLAG_INFORMATION == ( FLAG_INFORMATION & flag ) ) { sIconFile = "images/information.png"; // Java for Windows sIconResource = "OptionPane.informationIcon"; // Java for Linux does not offer these standard icons... } // first try to find the UIManager specific icon to fit look and feel // Note: the Windows XP look and feel offers 50 icons. if ( sIconResource != null ) { UIDefaults df = UIManager.getLookAndFeelDefaults (); theIcon = df.getIcon ( sIconResource ); } // fallback on bitmap image resource if icon was not found if ( theIcon == null && sIconFile != null ) { URL theResource = JDialogBox.class.getResource ( sIconFile ); if ( theResource != null ) { theIcon = new ImageIcon ( theResource ); } } if ( theIcon != null ) { // dummy panel to provide space around icon JPanel pi = new JPanel ( new GridLayout ( 1, 3 ) ); pi.add ( new JLabel () ); pi.add ( new JLabel ( theIcon ) ); pi.add ( new JLabel () ); d.add ( pi, BorderLayout.WEST ); // use Octave icon if available. otherwise use dialog icon Icon theOctaveIcon = getOctaveIcon (); prepareFrameIcon ( m_ParentFrame, theOctaveIcon == null ? theIcon : theOctaveIcon ); } d.add ( p, BorderLayout.CENTER ); // button bar (2 rows of 3 columns each p = new JPanel (); p.setLayout ( new java.awt.GridLayout ( 2, 3 ) ); // spacer row p.add ( new JLabel () ); p.add ( new JLabel () ); p.add ( new JLabel () ); if ( DLG_QUEST == ( DLG_QUEST & flag ) ) { // questdlg with empty option[2]: only two buttons if ( nostring.length () < 1 ) { // spacer: left p.add ( new JLabel () ); } } else { // spacer: left p.add ( new JLabel () ); } m_ButtonOK = new JButton ( theTranslator.replace ( okstring ) ); m_ButtonOK.setActionCommand ( "OK" ); m_ButtonOK.addActionListener ( theListener ); m_Focus = m_ButtonOK; p.add ( m_ButtonOK ); if ( DLG_QUEST == ( DLG_QUEST & flag ) ) { // questdlg with empty option[2]: only two buttons if ( nostring.length () > 01 ) { // questdlg has three buttons m_ButtonNO = new JButton ( theTranslator.replace ( nostring ) ); m_ButtonNO.setActionCommand ( "NO" ); m_ButtonNO.addActionListener ( theListener ); p.add ( m_ButtonNO ); if ( DLG_QUEST == ( DLG_QUEST & flag ) ) { // select default button if ( list[3].equals ( nostring ) ) { m_Focus = m_ButtonNO; } } } } if ( DLG_INPUT == ( DLG_INPUT & flag ) || DLG_LIST == ( DLG_LIST & flag ) || DLG_QUEST == ( DLG_QUEST & flag ) ) { m_ButtonCANCEL = new JButton ( theTranslator.replace ( cancelstring ) ); m_ButtonCANCEL.setActionCommand ( "CANCEL" ); m_ButtonCANCEL.addActionListener ( theListener ); p.add ( m_ButtonCANCEL ); if ( DLG_QUEST == ( DLG_QUEST & flag ) ) { // select default button if ( list[3].equals ( cancelstring ) ) { m_Focus = m_ButtonCANCEL; } } } else { // spacer: right p.add ( new JLabel () ); } d.add ( p, BorderLayout.SOUTH ); dlg.pack (); dlg.addWindowListener ( theListener ); if ( on.equals ( "on" ) ) { m_ParentFrame.setAlwaysOnTop ( true ); } // center dialog on screen Dimension dlgSize = dlg.getSize (); Dimension screenSize = Toolkit.getDefaultToolkit ().getScreenSize (); dlg.setLocation ( ( screenSize.width - dlgSize.width ) / 2, ( screenSize.height - dlgSize.height ) / 2 ); dlg.setVisible ( true ); dlg.requestFocus (); m_ParentFrame.setVisible ( false ); return ( 1 ); } /** * * @return Icon - null if icon was not found */ private Icon getOctaveIcon () { Icon theIcon = null; URL theResource = JDialogBox.class.getResource ( "images/octave.png" ); if ( theResource != null ) { theIcon = new ImageIcon ( theResource ); } return theIcon; } /** * Replace the standard Java frame icon with an Octave Icon. * * @param theFrame Frame - the Frame to decorate * @param theIcon Icon - the icon to use if octave icon is not found. */ private void prepareFrameIcon ( Frame theFrame, Icon theIcon ) { // prepare icon for upper left corner of Frame window // maybe there is a simpler way to achieve this int w = theIcon.getIconWidth (); int h = theIcon.getIconHeight (); // Frame must be made displayable by packing it for createImage() to succeed theFrame.pack (); Image theImage = theFrame.createImage ( w, h ); theIcon.paintIcon ( theFrame, theImage.getGraphics (), 0, 0 ); theFrame.setIconImage ( theImage ); } /** * Select Look and Feel * * @param bSystemLnF boolean - if true, the current systesm Look&Feel is used, * otherwise the Swing/Metal cross platform Look&Feel is used. */ private void setSystemLnF ( boolean bSystemLnF ) { try { if ( bSystemLnF ) { // switch from Swing LnF to local system LnF UIManager.setLookAndFeel ( UIManager. getSystemLookAndFeelClassName () ); } else { // use Swing LnF UIManager.setLookAndFeel ( UIManager. getCrossPlatformLookAndFeelClassName () ); } } catch ( Exception exception ) { exception.printStackTrace (); } } /** * Called when the dialog is closed. Allows for specific cleanup actions. * * @param closeMethod int - OctaveDialog.CLOSE_OK, OctaveDialog.CLOSE_CANCEL */ public void closeDialog ( int closeMethod ) { m_CloseMethod = closeMethod; m_ParentFrame.dispose (); } public void setFocus () { if ( null != m_Focus ) { m_Focus.requestFocus (); m_ParentFrame.getRootPane ().setDefaultButton ( m_Focus ); m_ParentFrame.setAlwaysOnTop ( true ); } } /** * Tests the dialogs * * @param args String[] - not used. */ public static void main ( String[] args ) { TeXtranslator t = new TeXtranslator(); if(false) { // find out key names of icon UI resources UIDefaults df = UIManager.getLookAndFeelDefaults (); for ( Enumeration e = df.keys (); e.hasMoreElements (); ) { String s = e.nextElement ().toString (); if ( s.toLowerCase ().contains ( "icon" ) ) { System.out.println ( s ); } } } try { Class[] argTypes = new Class[1]; argTypes[0] = String.class; java.lang.reflect.Constructor c = ClassHelper.findConstructor ( java.lang.StringBuffer.class, argTypes ); Object argValues[] = new Object[1]; argValues[0] = new String("initial value"); Object sb = c.newInstance(argValues); System.out.println(sb.toString()); ClassHelper.invokeMethod(sb,"append",argValues,argTypes); System.out.println(sb.toString()); argValues = new Object[2]; argTypes = new Class[2]; argTypes[0] = Integer.class; argTypes[1] = String.class; argValues[0] = new Integer(0); argValues[1] = new String("inserted"); ClassHelper.invokeMethod(sb,"insert",argValues,argTypes); System.out.println(sb.toString()); } catch ( Throwable e ) {} if ( true ) { return; } helpdlg ( "If you need help\nyou should ask for help\nif someone is around\notherwise you are on your own.", "Information" ); String[] options = new String[4]; options[0] = "Yeah \\vartheta is too low"; options[1] = "Maybe"; options[2] = "Nay \\vartheta is too high"; options[3] = "Maybe"; System.out.println ( questdlg ( "Is it too cold?", "Temperature", options ) ); // test variants of errordlg // does not affect layering of dialog errordlg ( "Background error!", "Error" ); // test variants of helpdlg // test variants of inputdlg String prompt[] = new String[2]; prompt[0] = "Question 1"; prompt[1] = "Question 2"; String defaults[] = new String[2]; defaults[0] = "1.1"; defaults[1] = "2.2"; String title = "Enter values"; Integer rc[] = new Integer[2 * 2]; rc[0] = new Integer ( 1 ); rc[1] = new Integer ( 2 ); rc[2] = new Integer ( 10 ); rc[3] = new Integer ( 20 ); inputdlg ( prompt, title, rc, defaults ); String listcell[] = new String[4]; listcell[0] = "a \\alpha"; listcell[1] = "b \\beta"; listcell[2] = "c \\gamma"; listcell[3] = "d \\delta"; Integer size[] = new Integer[2]; size[0] = new Integer ( 80 ); size[1] = new Integer ( 100 ); Integer initial[] = new Integer[2]; initial[0] = new Integer ( 4 ); initial[1] = new Integer ( 2 ); String promptcell[] = new String[2]; promptcell[0] = "Select something"; promptcell[1] = "(or even more than one thing)"; int idx[] = listdlg ( listcell, "Multiple", size, initial, "name", promptcell, "okstring", "cancelstring" ); if ( idx != null ) { for ( int i = 0; i < idx.length; i++ ) { System.out.println ( idx[i] ); } } } }