使JButton将文本从JTextField插入变量?

时间:2012-10-12 16:43:50

标签: java swing variables jbutton jtextfield

我正在尝试编写一个程序,它将在JTextField中获取文本并将其放入我按下JButton时声明的变量中。我需要计算一个学校项目的每周工资,但这只需要控制台,我正在为自己的乐趣做GUI。我试图得到它所以当我点击'calc'时它将从id,rh,oh,hp等取得输入并计算每周支付(wp),然后将其打印在旁边的右侧列上计算按钮。

//the calculations aren't complete yet until I finish the GUI

public class Weekly_Pay 
{

public static void calculations(String[] args) 
{

Scanner imput = new Scanner(System.in);

System.out.println("ID number: ");
int employeeId = imput.nextInt();

System.out.println("Hourly Wage: ");
Double hourlyWage = imput.nextDouble();

System.out.println("Regular Hours: ");
double regularHours = imput.nextDouble();

System.out.println("Overtime Hours: ");
double overtimeHours = imput.nextDouble();

double overtimePay = round(overtimeHours * (1.5 * hourlyWage));
double regularPay  = round(hourlyWage * regularHours);

double weeklyPay = regularPay + overtimePay;

System.out.println("Employee ID Number:" + employeeId);
System.out.printf("Weekly Pay: " + "$%.2f\n", weeklyPay);

}

public static double round(double num) 
{

// rounding to two decimal places
num *= 100;
int rounded = (int) Math.round(num);
return rounded/100.0;

}


public static void main(String[] args) 
{

JFrame window = new JFrame();
window.setTitle("Weekly Pay");
window.setSize(350, 200);
window.setResizable(false);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Color lGray = new Color(209, 209, 209);

JPanel panel = new JPanel();
GroupLayout layout = new GroupLayout(panel);
panel.setBackground(lGray);
panel.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);

JTextField idEntry = new JTextField(); //where the user imputs their ID
JTextField hwEntry = new JTextField(); //where the user imputs their hourly wage
JTextField rhEntry = new JTextField(); //where the user imputs their regular hours
JTextField ohEntry = new JTextField(); //where the user imputs their overtime hours

JLabel id = new JLabel("ID Number");
JLabel hw = new JLabel("Hourly Wage");
JLabel rh = new JLabel("Regular Hours");
JLabel oh = new JLabel("Overtime Hours");
JButton calc = new JButton("Calculate");
JLabel wp = new JLabel(" Weekly Pay: $" + "$%.2f\n", weeklyPay);

GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();    
hGroup.addGroup(layout.createParallelGroup().
           addComponent(id).addComponent(hw).addComponent(rh).addComponent(oh).addComponent(calc));
hGroup.addGroup(layout.createParallelGroup().
  addComponent(idEntry).addComponent(hwEntry).addComponent(rhEntry).addComponent(ohEntry).addComponent(wp));
layout.setHorizontalGroup(hGroup);

GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();    
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
    addComponent(id).addComponent(idEntry));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
    addComponent(hw).addComponent(hwEntry));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
    addComponent(rh).addComponent(rhEntry));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
    addComponent(oh).addComponent(ohEntry));
vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
    addComponent(calc).addComponent(wp));
layout.setVerticalGroup(vGroup);

window.add(panel);
window.setVisible(true);

}  
}

1 个答案:

答案 0 :(得分:9)

例如:

String input = new String();         
JButton mbutt = new JButton;
JTextField jtxt = new JTextField();

mbutt.addActionListener(new ActionListener(){

       public void actionPerformed(ActionEvent event){    
             input = jtxt.getText().toString();
       }
 });

//////////////////////////////////编辑部//////// //////////////////////

在我跳入代码之前,现在很少有事情。

- 我只想展示ActionListener的工作原理,以及如何从字段中提取数据并将其放入变量中。

- 不良做法 直接将组件放在JFramethats exactly what i have done here上对我不好.. !!!),所以你应该总是在JPanel上使用JFrame之类的东西,然后在上放置组件。为了保持简单,我故意使用直接JFrame来保存组件。

- 是的,拥有UI work on the UI thread, and Non-UI work on Non-UI thread始终是非常好的做法

- Swings main()方法不久以来,在{{1}中安排GUI构建后} 它退出 ...所以现在它是EDT处理GUI的责任,所以你应该保持EDT只处理GUI ,就像我在Event Dispatcher Thread方法[main()]。

完整代码:

EventQueue.invokeLater()