2015-10-20 2 views
-1

Я пытаюсь создать простую модель RGM, которая изменяет цвет текста на цвет, заданный пользователем, используя три текстовых поля (красный, зеленый, синий). После ввода чисел в три поля нажмите кнопку «Создать», цвет текста изменится на цвет, заданный целыми числами (R, G, B). Если при нажатии кнопки содержимое любых текстовых полей не является целым числом, то недопустимое поле (поля) должно быть очищено и должно появиться соответствующее сообщение. Текстовые поля, содержащие целые числа, никогда не должны быть очищены.Очистка текстовых полей, если контент не является целым [JApplet]

Я изо всех сил пытаюсь выполнить часть, где вводится что-либо, что не является целым числом. Я попытался попытаться поймать методы каждого цвета целого числа (R, G, B), так как:

  try{ 
       R = Integer.parseInt(Tred.getText()); 
      }catch (Exception ex){ 
       out.setText("Invalid Input in Red."); 
       R = 0; 
       Tred.setText(""); 
      } 

Хотя это ничего не делает для меня. Вот мой полный actionPerformed, который обрабатывает то, что происходит, когда нажимаются кнопки:

  @Override 
    public void actionPerformed(ActionEvent e) { 

     try{ 
      try{ 
       R = Integer.parseInt(Tred.getText()); 
      }catch (Exception ex){ 
       out.setText("Invalid Input in Red."); 
       R = 0; 
       Tred.setText(""); 
      } 
      try{ 
       G = Integer.parseInt(Tgreen.getText()); 
      }catch (Exception ex){ 
       out.setText("Invalid Input in Green."); 
       G = 0; 
       Tgreen.setText(""); 
      } 
      try{ 
       B = Integer.parseInt(Tblue.getText()); 
      }catch (Exception ex){ 
       out.setText("Invalid Input in Blue."); 
       B = 0; 
       Tblue.setText(""); 
      } 

      inputColor = new Color(R,G,B); 

      switch (theOp){ 
       case 'C': 
        out.setText("My Name"); 
        out.setForeground(inputColor); 
        break; 

       case 'R': 
        out.setText("Welcome"); 
        out.setForeground(Color.green); 
        Tred.setText(""); 
        Tgreen.setText(""); 
        Tblue.setText(""); 
        break; 
      } 


     }catch(Exception e1){ 

      out.setText("Invalid Input captured"); 
      out.setForeground(Color.black); 

     } 
    } 
} 

я, возможно, нужно будет использовать, если заявление для каждого цвета целого числа?

[UPDATE] В соответствии с просьбой, вот исполняемый пример моего кода:

import javax.swing.*; 
    import java.awt.*; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 

    public class Ex1 extends JApplet { 
     //Here i create the 3 primary colour integers 
     int R = 0,G = 0,B = 0; 
     //inputColor will be the color the user created 
     Color inputColor = new Color(R,G,B); 
     TextField Tred,Tgreen,Tblue; 
     JButton buttCreate,buttReset; 
     JLabel sR,sG,sB,out; 
     JPanel topPanel,centrePanel; 


public void init() 

{ 
    this.setSize(700, 100); 

    topPanel = new JPanel(); 
    centrePanel = new JPanel(); 

    buttCreate = new JButton("Create!"); 
    buttCreate.addActionListener(new ButtonHandler(this,'C')); 
    buttReset = new JButton("Reset"); 
    buttReset.addActionListener(new ButtonHandler(this,'R')); 


    Tred = new TextField("",3); 
    Tgreen = new TextField("",3); 
    Tblue = new TextField("",3); 

    sR = new JLabel("R:"); 
    sG = new JLabel("G:"); 
    sB = new JLabel("B:"); 

    out = new JLabel 
      ("Welcome to CE203 Assignment 1,submitted by: Lewis Horsley 1405160"); 
    out.setForeground(Color.green); 



    topPanel.add(sR); 
    topPanel.add(Tred); 
    topPanel.add(sG); 
    topPanel.add(Tgreen); 
    topPanel.add(sB); 
    topPanel.add(Tblue); 
    topPanel.add(buttCreate); 
    topPanel.add(buttReset); 

    centrePanel.add(out); 

    this.add(centrePanel, BorderLayout.CENTER); 
    this.add(topPanel, BorderLayout.NORTH); 


} 

class ButtonHandler implements ActionListener { 

    Ex1 theApplet; 
    char theOp; 

    ButtonHandler(Ex1 app, char op){ 
     this.theApplet = app; 
     this.theOp = op; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     try{ 
      try{ 
       R = Integer.parseInt(Tred.getText()); 
      }catch (Exception ex){ 
       out.setText("Invalid Input in Red."); 
       R = 0; 
       Tred.setText(""); 
      } 
      try{ 
       G = Integer.parseInt(Tgreen.getText()); 
      }catch (Exception ex){ 
       out.setText("Invalid Input in Green."); 
       G = 0; 
       Tgreen.setText(""); 
      } 
      try{ 
       B = Integer.parseInt(Tblue.getText()); 
      }catch (Exception ex){ 
       out.setText("Invalid Input in Blue."); 
       B = 0; 
       Tblue.setText(""); 
      } 

      inputColor = new Color(R,G,B); 

      switch (theOp){ 
       case 'C': 
        out.setText("My Name"); 
        out.setForeground(inputColor); 
        break; 

       case 'R': 
        out.setText("Welcome"); 
        out.setForeground(Color.green); 
        Tred.setText(""); 
        Tgreen.setText(""); 
        Tblue.setText(""); 
        break; 
      } 


     }catch(Exception e1){ 

      out.setText("Invalid Input captured"); 
      out.setForeground(Color.black); 

     } 
    } 
} 


} 
+0

* «Хотя это ничего не делает для меня» * - Также вы не используете фрагмент кода для нас. Рассмотрите возможность предоставления [runnable example] (https://stackoverflow.com/help/mcve), который демонстрирует вашу проблему. Это не дамп кода, а пример того, что вы делаете, что подчеркивает проблему, с которой вы сталкиваетесь. Это приведет к меньшему путанице и лучшим ответам. – MadProgrammer

+0

Причина, по которой я воздержался от публикации, почему исполняемый код до того, как мне сказали попробовать и показывать только соответствующие фрагменты. Я обновлю. – Volken

+0

Посмотрите на ссылку, которая приведена в моем примере, которая должна предоставить вам некоторое представление о том, что мы пытаемся найти. – MadProgrammer

ответ

0

Большой вопрос, в следующий раз, пожалуйста, дайте нам какой-то исполняемый код, чтобы помочь нам лучше понять и решить вашу проблему. Из того, что я вижу, не имея возможности запускать код, вы просто пропустили немного. Вместо того, чтобы прыгать прямо в оператор try catch, измените тип за пределами оператора и сохраните его как переменную.

Например:

String inputconverter=Tred.getText(); 

Независимо, если это целое число или нет, это не даст ошибку, поэтому он может быть оставлен из попытки поймать заявление, и вам даже не нужно использовать : R = Integer.parseInt(Tred.getText());, поскольку вы никогда не используете R для любого аспекта программы. Вместо этого перейдите прямо на:

Integer.parseInt(inputconverter) 

Надеюсь, это поможет!