java - 更改 JComponent 上的文本

标签 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();         
    }
};

我能做什么?谢谢!

最佳答案

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

which are arranged at the coordinates x and y on JPanel

<小时/>
  • 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...., 
    
  • 这种形式的这个/这些临时变量仅在循环内部有效,但提供真正的JComponent,并且它们确实发生了变化

  • 您可能会迷失在 JFrame 中,并且某些 Compound JComponent 不会返回真正的 JComponents (JPanelJButtonJTextField),返回在 BasicXxxUI 中实现的 Objects,但可以用 替换>JComponents,或者可以使用为 JComponents 实现的方法,例如可编辑的 JComboBox 可以返回 JTextFieldJFormattedTextField 作为编辑器组件

<小时/>
  • JComponents 放置在 JPanel 中并不是一个好主意,您需要在所有情况下都知道什么、如何、在哪里、有多少......

关于java - 更改 JComponent 上的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16721147/

相关文章:

java - AspectJ 属性问题

java - 使用 rowInModel 或 rowInTable 获取 JTable 单元格值?

java - 当我调用 repaint() 方法时,屏幕上没有显示任何内容

Java Swing 第二个 JFrame 布局填充空间?

java - 如何按字典顺序循环特定长度的所有可能 vector ?

java - Swing 删除游戏对象

java - 重新绘制图形问题

java - 如何用Java制作按钮绘画?

java - MongoDB 获取所有记录 Java API

java - JPanel 中的鼠标移动事件