2015-03-06 9 views
0

Я только что начал программировать в Swing. Я делаю приложение для фитнеса с помощью Swing. У меня есть 2 вопроса:Форматирование компонентов в Swing

  1. Всякий раз, когда я нажимаю «Calculate Scales», он должен отображать результаты только один раз, но отображается столько раз, сколько я нажимаю. Как я могу это решить?
  2. Как я могу установить предел JTextField до 3 цифр в моем коде?

Вот мой код. Поправьте меня, если я где-то пойду. Предложите мне, где я могу улучшить.


import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*;//since obsolete 
class H1 extends JFrame implements ActionListener 
{ 
JLabel l1,l2,l3,l4,l5; 
JTextField t1,t2,t3; 
JRadioButton r1,r2; 
ButtonGroup bg1; 
JLabel bmr; 
    JLabel bmi; 
int click=0; 
JButton b1,b2;Container c1; 
public static void main(String args[]) 
{ 

    H1 j1 =new H1(); 
    j1.setTitle("Personal Scales "); 
    j1.setSize(1000,1000); 
    j1.setVisible(true); 
    j1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    j1.pack(); 
} 

H1() 
{ 

c1=this.getContentPane(); 
setLayout(new BoxLayout(c1,BoxLayout.Y_AXIS)); 


JPanel j1 = new JPanel(); 
j1.setLayout(new FlowLayout()); 
t1 = new JTextField(10); 
l1=new JLabel("Height"); 
j1.add(l1); 
j1.add(t1); 
c1.add(j1); 


JPanel j2 = new JPanel(); 
j2.setLayout(new FlowLayout()); 
l2=new JLabel("Weight"); 
t2 = new JTextField(10); 
j2.add(l2); 
j2.add(t2); 
c1.add(j2); 



JPanel j3 = new JPanel(); 
j3.setLayout(new FlowLayout()); 
l3=new JLabel("Age"); 
t3 = new JTextField(10); 
j3.add(l3); 
j3.add(t3); 
c1.add(j3); 


JPanel j4 = new JPanel(); 
j4.setLayout(new FlowLayout()); 
l4=new JLabel("Sex"); 
bg1=new ButtonGroup(); 
r1=new JRadioButton("M"); 
r2=new JRadioButton("F"); 
bg1.add(r1);//button grouping is done to avoid multiple selection of radio button 
bg1.add(r2); 
j4.add(l4); 
j4.add(r1); 
j4.add(r2); 
c1.add(j4); 


JPanel j5 = new JPanel(); 
j5.setLayout(new FlowLayout()); 

b1=new JButton("Calculate Scales");//creating instance of JButton 
j5.add(b1); 
c1.add(j5); 
b1.addActionListener(this); 

} 

public void actionPerformed(ActionEvent e) 
{ 

    click +=1; 
    //JLabel bmr; 
    //JLabel bmi; 
    long ht=Long.parseLong(t1.getText()); 
    long wt=Long.parseLong(t2.getText()); 
    long age=Long.parseLong(t3.getText()); 
    //JPanel j6 = new JPanel(); 

    //j6.setLayout(new FlowLayout()); 


    double bmi1 = wt/Math.pow((ht * 0.01),2); 

    String bmi2 = Double.toString(bmi1);//since double cant be added to container 

    bmi=new JLabel("BMI  "+bmi2); 

    //c1.add(j6); 
// JPanel j7 = new JPanel(); 
    //j7.setLayout(new FlowLayout()); 

    double bmr1;String bmr2; 

if(r1.isSelected()) 
    bmr1 = 66.47 +(13.75 * wt) + (5.003 * ht) - (6.775 * age); 

else 

    bmr1 = 655.1 +(9.563 * wt) + (1.85 * ht) - (4.676 * age); 


bmr2=Double.toString(bmr1); 
bmr=new JLabel("BMR  "+bmr2); 

if(click>1) 
    { 
    c1.remove(bmi); 
    c1.remove(bmr); 
    } 

/*j6.add(bmi); 
j6.add(bmr);*/ 

    c1.add(bmi); 
    c1.add(bmr); 

} 
} 
+0

1) Это не «Сомнение и уверенность в том,» сайт, но «Вопросы и ответы» на сайте - так задавать вопросы, если вы будете, но сохранить ваши сомнения для продавцов подержанных автомобилей и политиков. 2) Каждый поток должен иметь один вопрос (в идеале) один ответ, поэтому решите, на какой вопрос вы хотите ответить в этой теме, и переместите другой вопрос на новый вопрос. 3) Этот код был помечен как бы исполняемый фрагмент JavaScript. Это работает только для JavaScript. Вместо этого используйте кнопку '{}' для обозначения фрагмента кода на любом другом языке. .. –

+0

.. 4) Используйте логическую и согласованную форму отступов и блоков кода. Отступы предназначены для того, чтобы поток кода стал проще следовать! 5) Единственная пустая строка пробела в исходном коде - это все, что требуется * всегда. Пустые строки после '{' или before '}' также типично избыточны. 6) * «Как установить предел' JTextField' до 3 цифр?? * * Подумайте, используя 'JSpinner' с [' SpinnerNumberModel'] (https://docs.oracle.com/javase/8/ docs/api/javax/swing/SpinnerNumberModel.html). –

+0

@AndrewThompson Бросание словаря в кого-то не делает ничего, чтобы отвлечься от точки nhgrif и сделать больше, чтобы подорвать вашу собственную. Я бы ожидал от члена сообщества более 100 тыс. Репутации. nhgrif просто указывал, как работает наш раздел сайта. Не нужно грубить об этом только потому, что вам показалось, что вы ошибаетесь или получаете отвращение к семантическому слову, вроде «могу». –

ответ

1

Я также новее для Java, так что поправьте меня, если я ошибаюсь, и причина того, что я не могу написать вам комментарий и должен написать ответ;)

Как я вижу, вы создаете новый JLabel каждый раз, когда вы нажимаете кнопку.
Попробуйте использовать, например. bmi.setText("BMI here" + bmi2); для вашего описания результата через setText() вы меняете текст только на этом ярлыке. А также как использование переменной декларации JLabel bmi = null;

Возможно, вы также можете добавить JPanel, чтобы отобразить результат, чтобы получить JLabel фиксированную позицию и инициализировать ее.

Я надеюсь, что я могу вам помочь;)
Zorian

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