更改JComponent上的文本

时间:2013-05-23 18:18:45

标签: java swing repaint jcomponent

我需要更改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();         
    }
};

我该怎么办?谢谢!

2 个答案:

答案 0 :(得分: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 JComponent则不会返回真实JComponentsJPanelJButton,{{1 }}),返回JTextField中实现的Objects,但可以替换为BasicXxxUI,或者可以使用为JComponents实现的方法,例如可编辑的JComponents可以返回JComboBoxJTextField作为编辑组件


  • 狩猎JFormattedTextField JComponents并不是一个好主意,你需要知道所有情况下,什么,如何,在哪里,多少......

答案 1 :(得分:0)

我认为问题在于您使用的布局,但在没有提供此信息时难以得到一个好的答案。