我正在Netbeans 7.1中构建一个GUI,它代表了医院设备项目的输液泵.按jButton1应显示某个jLabel,表示输液正在运行.再次按jButton1应该停止它.我唯一的问题是按钮需要在第一次工作之前点击两次.在那之后,它完全符合我希望它的工作方式.我在这个问题上搜索了多个线程,但其他解决方案似乎不起作用.谁能帮我?提前致谢!
package infusion;
public class Infusion {
static Interface screen;
public Infusion(){
screen = new Interface();
screen.setVisible(true);
screen.jLabel3.setVisible(true);
screen.jButton1.setVisible(true);
}
public static void main(String[] args) {
// TODO code application logic here
Infusion infusion = new Infusion();
}
}
这是用户界面的代码(主要由Netbeans生成). jButton1ActionPerformed的实现是我调整过的唯一代码.
package infusion;
public class Interface extends javax.swing.JFrame {
boolean pump1Running = false;
/**
* Creates new form Interface
*/
public Interface() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// SEOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setBackground(new java.awt.Color(255,255,255));
setPreferredSize(new java.awt.Dimension(800,562));
setResizable(false);
jPanel1.setPreferredSize(new java.awt.Dimension(800,540));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,800,Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,540,Short.MAX_VALUE)
);
jLabel3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Pauze.png"))); // NOI18N
jLabel3.setText("Infusion Paused");
jButton1.setText("Start infusion");
jButton1.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
.addContainerGap(36,Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
.addComponent(jButton1)
.addGap(18,18,18)
.addComponent(jLabel3,javax.swing.GroupLayout.PREFERRED_SIZE,189,javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jSeparator1,javax.swing.GroupLayout.Alignment.TRAILING,649,javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
.addGap(0,22,Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(51,51,51)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1,64,javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3,59,javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18,18)
.addComponent(jSeparator1,10,javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jPanel1,javax.swing.GroupLayout.PREFERRED_SIZE)))
);
pack();
}//
最佳答案
问题:pump1Running = false,所以当你点击按钮时,它会将标签和图像设置为与之相同的东西.然后将其切换为true,然后它可以切换到另一个标签/图像.
if (pump1Running){
jLabel3.setIcon(new ImageIcon(getClass().getResource("/Pauze.png")));
jLabel3.setText("Infusion Paused");
jButton1.setText("Start Infusion");
pump1Running = !pump1Running;
}
else {//if (pump1Running == true){
jLabel3.setIcon(new ImageIcon(getClass().getResource("/Pauze.png")));
jLabel3.setText("Running infusion");
jButton1.setText("Stop Infusion");
pump1Running = !pump1Running;
}
这会切换pump1Running来回运行并解决问题.