2015-10-09 2 views
0

Вчера я опубликовал этот код для другой проблемы, но теперь я еще раз должен обратиться ко всем вам за помощью .. Я ценю всю помощь, до сих пор имевшуюся без этого сообщества, у меня не было бы сделал это до сих пор.Кнопка по умолчанию с JOptionsPane не работает должным образом

Теперь моя проблема довольно проста. У меня есть графический интерфейс с полем ввода для пользователя и тремя кнопками. Кнопки не являются JButtons, они являются стандартными кнопками JOptionsPane yes, no и cancel. Я изменил текст на «следующую запись», «следующую партию» и «закончен».

Прежде чем я вносил изменения в свой графический интерфейс, у меня были стандартные кнопки. Кнопка, которая чаще всего будет использоваться, - это кнопка «да» (теперь «следующая запись»). Эта кнопка будет нажата LOT в моей программе. До того, как была установлена ​​настройка кнопки по умолчанию. Пользователь может просто ввести номер и быстро нажать клавишу ввода. Теперь клавиша ввода не активирует кнопку по умолчанию, а пользователь должен физически щелкнуть по ней. Это то, что я хочу изменить.

Есть ли способ, которым я могу установить нижеприведенный код, поэтому, когда пользователь нажимает кнопку ввода, независимо от того, какой текст они набрали, «да» (теперь «следующая партия» нажата по умолчанию)? Для чего это стоило, я делал исследования по этому вопросу, но не смог найти решение, которое соответствовало бы моим конкретным обстоятельствам.

package nacha; 

import java.awt.BorderLayout; 

import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class Testing4 

{ 

    public static void main(String args[]){ 

     String css = "<span style='font-size:10; color: white; background-color:black'>"; 
     String batchCss = "<span style='font-size: 20'>"; 
     String endSpanCss = "</span>"; 
     String table = "<table border=4>"; 
     String endTable = "</table>"; 
     String mainCss = "<span style='font-size:12; color: red'>"; 
     String header1Css = "<span style = 'font-size:15; font-weight:bold;text-decoration:underline;border:1px dotted red'>"; 
     String text1Css = "<span style = 'font-size:12; font-style:italic'>"; 



     String text = "<html>" + 
       css + batchCss + "1 of 2"+endSpanCss+endSpanCss+ endSpanCss + 
       "<br><br><br>"+header1Css+"Entry Detail:"+endSpanCss + 
       "<br>"+mainCss+"111111111111111111111"+endSpanCss+ 
       "<br><br><br>"+text1Css+"Please type 1-21 to apply a reason code and addenda record to the entry detail." + 
       "<br>Please type 'h' and press the next entry button to open the help screen."+endSpanCss + 
       "<br><br><br>"+header1Css+"Reason Codes"+ endSpanCss + 
       "<br>"+table+"R01 - Insufficient Funds" + 
       "<br>R02 - Account Closed" + 
       "<br>R03 - No Account" + 
       "<br>R04 - Invalid Account Number" + 
       "<br>R05 - Unauthorized Debit to Consumer Account" + 
       "<br>R06 - Returned per ODFI Request" + 
       "<br>R07 - Auth Revoked by Customer" + 
       "<br>R08 - Payment Stopped" + 
       "<br>R09 - Uncollected Funds" + 
       "<br>R10 - Customer Advises Not Authorized" + 
       "<br>R11 - Check Truncation Entry Return" + 
       "<br>R12 - Branch Sold to Another DFI" + 
       "<br>R13 - Invalid ACH Routing Number" + 
       "<br>R14 - Represenative Payee Deceased or Unable to Continue" + 
       "<br>R15 - Beneficiary or Account Holder Deceased" + 
       "<br>R16 - Account Frozen" + 
       "<br>R17 - File Record Edit Criteria" + 
       "<br>R18 - Improper Effective Entry Date" + 
       "<br>R19 - Account Field Error" + 
       "<br>R20 - Non-Transaction Amount" + 
       "<br>R21 - Invalid Company Information" + 
       "<br>R22 - Invalid Individual ID Number"+endTable; 

     //Below code creates the GUI for the return builder portion of the program. 
      Object[] options1 = {"Next Entry","Next Batch","Finished"};//Changes the default buttons. 
      BorderLayout border = new BorderLayout(); 
      JPanel panel = new JPanel();  
      panel.setLayout(border); 
      panel.add(new JLabel(text),BorderLayout.NORTH);//Adds the label to the top of the panel.    
      JTextField textField = new JTextField(10); 
      panel.add(textField,BorderLayout.SOUTH);//Adds a user-input text area to the bottom of the panel. 

      int result = JOptionPane.showOptionDialog(null, panel, "Return Builder", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options1, JOptionPane.YES_OPTION); 

    } 

} 

ответ

1

Вам необходимо пройти опцию по умолчанию в качестве последнего аргумента JOptionPane.showOptionDialog:

int result = JOptionPane.showOptionDialog(null, panel, "Return Builder", 
    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, 
    options1, options1[0]); 

Это будет иметь побочный эффект в том, что кнопка имеет начальную фокус клавиатуры, когда отображается диалоговое окно. Если вы не хотите этого, вы можете заставить JTextField получить фокус, когда он отображается в окне:

textField.addHierarchyListener(new HierarchyListener() { 
    @Override 
    public void hierarchyChanged(HierarchyEvent e) { 
     final Component c = e.getComponent(); 
     long flags = e.getChangeFlags(); 
     if ((flags & HierarchyEvent.SHOWING_CHANGED) != 0 && 
       c.isShowing()) { 

      EventQueue.invokeLater(new Runnable() { 
       @Override 
       public void run() { 
        c.requestFocusInWindow(); 
       } 
      }); 
     } 
    } 
}); 

Примечание стороны: Для запроса пользователю выбрать из списка известных вариантов, JComboBox - лучший выбор, чем JTextField. Ваш вариант справки может быть просто другим JButton, присутствующим в теле сообщения JOptionPane.

+0

Что делать, если я хочу, чтобы была выбрана кнопка и текстовое поле, чтобы пользователь мог быстро ввести что-то и просто нажать Enter? Это была моя цель в использовании JTextField, потому что это может быть очень быстро, если у пользователя есть более 30 записей о записи, а также возможность быстрого ввода номеров клавиш и ввода ввода. – jesric1029

+0

Кнопка выбора по умолчанию всегда активируется нажатием Enter в любом месте диалога JOptionPane. Попробуйте и убедитесь сами. – VGR

+0

Обратите внимание на случай с моей JOptionsPane. Я не уверен, что это потому, что я использовал объекты для замены текста кнопки или потому, что я добавил JTextField, но компонент по умолчанию стал JTextField. (Что здорово, я хочу, чтобы это произошло). Проблема в том, что я хочу, чтобы курсор уже находился в JTextField для пользователя, а кнопка - по умолчанию. Когда я выполнил первый набор инструкций выше, кнопка стала по умолчанию, но я потерял свой курсор JTextField. Я собираюсь попробовать второй метод и обновить. – jesric1029

Смежные вопросы