0

我需要更改 Jcomponents 中的文本,这些文本排列在 JPanel 上的坐标 x 和 y 处。但是,如果我在任何地方更改文本,除了 TextFields 或 PasswordFields,元素的位置和尺寸就会滑动。

监听器,改变元素的参数

private TextListener textListener = new TextListener() {

    @Override
    public void textValueChanged(TextEvent e) {
        if (comp.getClass() == JButton.class) {
            ((JButton)comp).setText(ttext.getText());
        }else{
            if(comp.getClass() == JTextField.class){
                ((JTextField)comp).setText(ttext.getText());
            }else{
                if(comp.getClass() == JPasswordField.class){
                    ((JPasswordField)comp).setText(ttext.getText());
                }else{
                    if(comp.getClass() == JTextArea.class){
                        ((JTextArea)comp).setText(ttext.getText());
                    }else{
                            if(comp.getClass() == JCheckBox.class){
                                ((JCheckBox)comp).setText(ttext.getText());
                            }else{
                                ((JRadioButton)comp).setText(ttext.getText());
                            }
                        }
                    }
                }
            }
        try{
            comp.setBounds(tx,ty,Integer.valueOf(twidth.getText()),Integer.valueOf(theight.getText()));
        }catch(NumberFormatException ex){
            JOptionPane.showMessageDialog(null,"Error","Error",JOptionPane.ERROR_MESSAGE);
        }
        comp.repaint();         
    }
};

我能做些什么?谢谢!

4

2 回答 2

1
  • 为了获得更好的帮助,请尽快发布SSCCE,简短,可运行,可编译

它们排列在JPanel上的坐标x和y处


  • Component[] components = myPanel.getComponents();

  • components然后在数组内循环

        if (components[i] instanceof JLabel) {        
           JLabel myLabel = (JLabel) components[i];
           myLabel.whatever
        } else if (components[i] instanceof JButton) {
           JButton myButton = (JButton) components[i];
           myButton.whatever
        } and so on...., 
    
  • 这种形式的这个/这些临时变量仅在循环内有效,但要提供真实的JComponents,它们确实被改变了

  • 你可以迷失在JFrame其中一些Compound JComponents 不返回真正的JComponents( JPanel, JButton, JTextField),返回Objects实现 in BasicXxxUI,但可以替换为JComponents,或者可以使用实现的方法JComponents,例如 editableJComboBox可以返回JTextFieldJFormattedTextField作为编辑器组件


  • 狩猎不是好主意,你需要知道JComponentsJPanel所有情况下什么,如何,在哪里,多少......
于 2013-05-23T21:08:28.027 回答
0

我认为问题在于您使用的布局,但是如果没有给出这些信息,很难得到一个好的答案。

于 2013-05-23T18:25:46.917 回答