在事件上设置位置不起作用

时间:2017-07-12 06:47:18

标签: java swing layout-manager

我有以下代码,其中我尝试使一些jLabel / jComboBox可见/不可见,并移动jRadioButton上可见的位置。

问题是该位置仅在第二次点击时更新。

    private void SingleButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             

   this.serverLabel.setVisible(true);
   this.serverList.setVisible(true);


   this.serverLabel.setLocation(this.hostGroupLabel.getLocation().x, this.cpuCountSpinner.getLocation().y);
   this.serverList.setLocation(this.cpuCountSpinner.getLocation().x, this.cpuCountSpinner.getLocation().y);

   this.jXDatePickerStartDate.setLocation(153, jXDatePickerStartDate.getLocation().y);

   this.requestedRamLabel.setVisible(false);
   this.ramText.setVisible(false);
   this.cpuLabel.setVisible(false);
   this.cpuCountSpinner.setVisible(false);

}  

1 个答案:

答案 0 :(得分:0)

我不知道为什么它不适合你,可能你正在修改你的GUI,或者事件根本没有被解雇。这是一个有效的例子。您应该将代码放在实际将侦听器附加到按钮的位置。你这样做了吗?它应该是这样的:

    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            singleButtonActionPerformed(e)
        }
    });
使用Lambdas的

或Java8变体

button.addActionListener(this::singleButtonActionPerformed)

但使用this取决于上下文。它应该是对象hta hold给定的方法。

以下是按钮和单选按钮(如建议所示)的工作示例

public class SettingLocation {

public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setSize(400, 400);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel p = new JPanel();
    f.setContentPane(p);

    p.setLayout(new FlowLayout());

    JButton b = new JButton("Click me");
    b.setBounds(150, 150,100,100);
    p.add(b);

    JRadioButton rb=new JRadioButton("Exmaple radio");
    p.add(rb);
    rb.addActionListener(new ActionListener() {
        Random r = new Random();

        @Override
        public void actionPerformed(ActionEvent e) {
            rb.setLocation(r.nextInt(300), r.nextInt(300));
        }
    });

    b.addActionListener(new ActionListener() {
        Random r = new Random();

        @Override
        public void actionPerformed(ActionEvent e) {
            b.setLocation(r.nextInt(300), r.nextInt(300));
        }
    });
    f.setVisible(true);

}
}