我有一个JFrame,下面有很多JPanel,各个panel都有几个JTextField,JTextArea,我想让所有的JTextField和JTextArea都不可编辑,怎么办?

harbor1981 2005-07-27 09:27:41
我有一个JFrame,下面有很多JPanel,各个panel都有几个JTextField,JTextArea,我想让所有的JTextField和JTextArea都不可编辑,怎么办?

法一、最原始的方法就是对每个JTextField和JTextArea使用setEditable(false);

法二、

for(int i=1;i<count;i++){
if(jPanel1.getComponent(i).getClass().toString().equals("class javax.swing.JTextField")){
((JTextField)jPanel1.getComponent(i)).setEditable(true);
}
}
上面这个很笨的方法也只能实现对一个JPanel下面的所有JTextField的修改
我现在问题时一个JFrame下面有很多JPanel

55555,神阿,救救我!
...全文
493 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
harbor1981 2005-07-28
  • 打赏
  • 举报
回复
但是发生了一个很奇怪的错误,那就是但循环到JPanel时,p.getComponentCount()居然为0

明明有两个JTextField啊

不然你运行上面的代码看看,看是什么错误
believefym 2005-07-28
  • 打赏
  • 举报
回复
楼主,为什么把Container改成JPanel就对了,JPanel本身就是Container啊
harbor1981 2005-07-28
  • 打赏
  • 举报
回复
搞定了,我改了一下
public void setTextEditable(JPanel pp,boolean b){
JPanel p = pp;
for (int i = 0; i < p.getComponentCount(); i++) {
if (p.getComponent(i) instanceof JPanel) {
setTextEditable( (JPanel) p.getComponent(i), b);
}
else if (p.getComponent(i) instanceof JTextField) {
( (JTextField) p.getComponent(i)).setEditable(false);
}
}
}

然后setTextEditable(jPanel1,false);
harbor1981 2005-07-28
  • 打赏
  • 举报
回复
谢谢楼上gtlang78()

但是发生了一个很奇怪的错误,那就是但循环到JPanel时,p.getComponentCount()居然为0

明明有两个JTextField啊

附代码:
import javax.swing.*;
import java.awt.*;
import javax.swing.text.*;
public class setEditableTest extends JFrame{
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
BorderLayout borderLayout1 = new BorderLayout();
JPanel jPanel3 = new JPanel();
JTextField jTextField1 = new JTextField();
JTextField jTextField2 = new JTextField();
JTextField jTextField3 = new JTextField();
JTextField jTextField4 = new JTextField();
public setEditableTest() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
setEditableTest setEditableTest1 = new setEditableTest();
setEditable(setEditableTest1,false);
setEditableTest1.setSize(400,300);
setEditableTest1.setVisible(true);
}
private void jbInit() throws Exception {
jPanel1.setBackground(Color.white);
jPanel1.setLayout(borderLayout1);
jPanel2.setBackground(Color.pink);
jPanel3.setBackground(Color.white);
jPanel3.setLayout(null);
jTextField1.setText("jTextField1");
jTextField1.setBounds(new Rectangle(41, 63, 145, 22));
jTextField2.setText("jTextField2");
jTextField2.setBounds(new Rectangle(208, 63, 145, 22));
jTextField3.setText("jTextField3");
jTextField4.setText("jTextField4");
this.getContentPane().add(jPanel1, BorderLayout.CENTER);
jPanel1.add(jPanel2, BorderLayout.SOUTH);
jPanel2.add(jTextField3, null);
jPanel2.add(jTextField4, null);
jPanel1.add(jPanel3, BorderLayout.CENTER);
jPanel3.add(jTextField1, null);
jPanel3.add(jTextField2, null);

}
public static void setEditable(Component c, boolean b) {
if (c instanceof Container) {
Container p = (Container) c;
int n = p.getComponentCount();
for (int i = 0; i < n; i++) {
setEditable(p.getComponent(i), b);
}
}
else if (c instanceof JTextField || c instanceof JTextArea) {
((JTextComponent)c).setEditable(b);
}
}
}
loreorion 2005-07-27
  • 打赏
  • 举报
回复
自己写两个类,分别扩展JTextField和JTextArea,构造函数里加上setEditable
programdolt 2005-07-27
  • 打赏
  • 举报
回复
楼上的牛,请问您做swing多长时间了,我也做过一段时间的swing,很想和你交个朋友。
gtlang78 2005-07-27
  • 打赏
  • 举报
回复
public static void setEditable(Component c, boolean b) {
if (c instanceof Container) {
Container p = (Container) c;
int n = p.getComponentCount();
for (int i = 0; i < n; i++) {
setEditable(p.getComponent(i), b);
}
}
else if (c instanceof JTextField || c instanceof JTextArea) {
((JTextComponent)c).setEditable(b);
}
}


setEditable(frame, false);
harbor1981 2005-07-27
  • 打赏
  • 举报
回复
补充一下,一个JPanel下面还可能包含子JPanel
1、 自定义类说明: (1)类名:MainTest 作用:主类,构建主界面 继承的父类:Jframe 主要实现接口:ActionListener 主要成员变量: private JPanel ContentPane; private JButton Insert = new JButton(); private JButton Select = new JButton(); private JButton Update = new JButton(); 内部类:MainTest_actionPerformed,主页面的事件监听。 jenter_ actionPerformed,按钮的事件监听。 主要成员方法: public MainTest() public static void main(String[] args) (2)类名:Insert 作用:实现添加个人信息 继承的父类:Jframe 主要实现接口:ActionListener 主要成员变量: private JPanel ContentPane; private JLabel jlab1 = new JLabel(); private JLabel jlab2 = new JLabel(); private JLabel jlab3 = new JLabel(); private JLabel jlab4 = new JLabel(); private JLabel jlab5 = new JLabel(); private JLabel jlab6= new JLabel(); private JLabel jlab7 = new JLabel(); private JLabel jlab8 = new JLabel(); private JTextField jtextfield1 = new JTextField(); private JTextField jtextfield2 = new JTextField(); private JTextField jtextfield3 = new JTextField(); private JTextField jtextfield4 = new JTextField(); private JTextField jtextfield5 = new JTextField(); private JComboBox jcombobox1 = new JComboBox(); private JComboBox jcombobox2 = new JComboBox(); private JTextArea jtextarea = new JTextArea(); private JButton sure = new JButton(); 内部类:sure_actionperformed,按钮的事件监听,实现对数据的插入。 主要成员方法:public Insert(); (3)类名:Update 作用:对个人信息进行修改。 继承的父类:Jframe 主要实现接口:ActionListener 主要成员变量: private JPanel ContentPane; private JLabel jlab1 = new JLabel(); private JLabel jlab2 = new JLabel(); private JLabel jlab3 = new JLabel(); private JLabel jlab4 = new JLabel(); private JLabel jlab5 = new JLabel(); private JTextField jtextfield1 = new JTextField(); private JTextField jtextfield2 = new JTextField(); private JTextField jtextfield3 = new JTextField(); private JTextField jtextfield4 = new JTextField(); private JButton sure = new JButton(); private JButton upda = new JButton(); 主要成员方法: public Update() public void actionPerformed(ActionEvent e) (4)类名:Select 作用:查询学生个人信息 继承的父类:Jframe 主要实现接口:ActionListener 主要成员变量: private JTextArea taInfo=new JTextArea(); private JPanel panel=new JPanel(); private JTextField jtextfield1=new JTextField(); private JButton jbutton=new JButton("查询"); private JLabel jlabel=new JLabel("学号"); 主要成员方法: public Select() public void actionPerformed(ActionEvent e)
//package chapter1; import java.text.*; import javax.swing.*; import java.awt.*; import javax.swing.event.*; import java.awt.event.*; import java.util.*; //package chapter1; import java.awt.BorderLayout; import java.awt.event.*; import javax.swing.*; public class MainFrame extends JFrame { private Inventory inventory=new Inventory(); private Invoice invoice=new Invoice(inventory); final JTextArea textArea_1=new JTextArea(); //显示存货单信息 final JTextArea textArea_2=new JTextArea(); //显示提货单信息 public static void main(String args[]) { MainFrame frame=new MainFrame(); frame.setBounds(100,100,450,300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); //框架可见 } public MainFrame() { super(); setTitle("商品库存管理系统"); final JTabbedPane tabbedPane =new JTabbedPane(); //定义总和面板tabbedPane 包含提货单和存货单 final JPanel panel_1=new JPanel(); //定义放存货单面板 final JPanel panel_2=new JPanel(); //定义放提货单面板 final JScrollPane srcollPane_1 =new JScrollPane(textArea_1); final JScrollPane srcollPane_2 =new JScrollPane(textArea_2); final JTextField id_1=new JTextField(4); final JTextField number_1=new JTextField(4); //欲修改的存货单某项的数量 final JTextField id_2=new JTextField(4); final JTextField number_2=new JTextField(4); //欲修改的提货单某项的数量 final JPanel paneButton_1 =new JPanel(); final JPanel paneButton_2 =new JPanel(); final JPanel paneInputl_1=new JPanel(); final JPanel paneInput_2=new JPanel();
java万年历课程设计,有源代码 源代码片段:public class wannianli extends JFrame implements ActionListener, MouseListener { private Calendar cld = Calendar.getInstance(); private String [] astr = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"}; private DefaultTableModel dtm = new DefaultTableModel(null,astr); private JTable table = new JTable(dtm); //装日期的表格 private JScrollPane sp = new JScrollPane(table); private JButton bLastYear = new JButton("上一年"); private JButton bNextYear = new JButton("下一年"); private JButton bLastMonth = new JButton("上月"); private JButton bNextMonth = new JButton("下月"); private JTextField jtfYear = new JTextField(5);//jtfYear年份显示和输入文本框,允许编辑单行文本 private JTextField jtfMonth = new JTextField(2);//jtfMonth月份显示文本框 private JPanel p1 = new JPanel(); //装入控制日期按钮的模块 private JPanel p2 = new JPanel(); private JPanel p3 = new JPanel(new BorderLayout()); private JPanel p4 = new JPanel(new GridLayout(2,1)); private JPanel p5 = new JPanel(new BorderLayout()); private JButton bAdd = new JButton("保存日志"); private JButton bDel = new JButton("删除日志"); private JTextArea jta = new JTextArea(); //JTextArea一个显示纯文本的多行区域 private JScrollPane jsp = new JScrollPane(jta); //管理视口、可选的垂直和水平滚动条以及可选的行和列标题视口 private JLabel l = new JLabel("小提示:可直接输入年份,提高查询效率!"); private JLabel lt = new JLabel();//系统时间 private JLabel ld = new JLabel();//日期是否被选择 private int lastTime; JMenuBar jmb = new JMenuBar(); JMenu view;

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧