我需要更改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();
}
};
我该怎么办?谢谢!
答案 0 :(得分:1)
排列在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
则不会返回真实JComponents
(JPanel
,JButton
,{{1 }}),返回JTextField
中实现的Objects
,但可以替换为BasicXxxUI
,或者可以使用为JComponents
实现的方法,例如可编辑的JComponents
可以返回JComboBox
或JTextField
作为编辑组件
JFormattedTextField
JComponents
并不是一个好主意,你需要知道所有情况下,什么,如何,在哪里,多少...... 答案 1 :(得分:0)
我认为问题在于您使用的布局,但在没有提供此信息时难以得到一个好的答案。