কীভাবে জেটিবেলকে অ-সম্পাদনযোগ্য করে তুলবেন


97

একটি JTableঅ-সম্পাদনযোগ্য কীভাবে করবেন ? আমি চাই না যে আমার ব্যবহারকারীরা সেগুলিতে ডাবল-ক্লিক করে সেগুলিতে মানগুলি সম্পাদনা করতে সক্ষম হন।


এখানে আরও ভাল উত্তর পাওয়া যায়: stackoverflow.com/questions/9919230/disable-user-edit-in-jtable
পল

উত্তর:


22

আপনি একটি ব্যবহার করতে পারেন TableModel

এর মতো শ্রেণি সংজ্ঞায়িত করুন:

public class MyModel extends AbstractTableModel{
    //not necessary
}

আসলে isCellEditable()এটি falseডিফল্টরূপে হয় তাই আপনি এটি বাদ দিতে পারেন। (দেখুন: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )

তারপরে setModel()আপনার পদ্ধতিটি ব্যবহার করুন JTable

JTable myTable = new JTable();
myTable.setModel(new MyModel());

4
আপনার কাছে কোনও public voidপদ্ধতিতে বুলেটিয়ান রিটার্ন করা যাবে না ।
জিও

4
এছাড়াও পদ্ধতিisCellEditable
ম্যাট

আপনি যে অ্যাপ্রোচটি নির্দিষ্ট করেছেন তা কাজ করে, অ্যাবস্ট্র্যাক্ট টেবিলমোডলে এডেটেবলের মতো কোনও পদ্ধতি নেই। যা বিদ্যমান রয়েছে তা হ'ল সেলএডেবল (ইনট, ইনট) যা প্যারামিটার হিসাবে সারি ইনডেক্স এবং কুলমন ইনডেক্স নেয়। ব্যবহারকারী "isCellEdable" পদ্ধতি ওভাররাইড করে নির্দিষ্ট সারি / কলামের জন্য নির্বাচিতভাবে সম্পাদনা সক্ষম / অক্ষম করতে পারেন বা সমস্ত কক্ষের সম্পাদনা অক্ষম করতে ডিফল্ট প্রয়োগটি ব্যবহার করতে পারেন।
সতীশ

151

আপনি এই পদ্ধতিটি সেলএডেবলযোগ্য ওভাররাইড করতে পারেন এবং উদাহরণস্বরূপ যেমনটি চান তেমন প্রয়োগ করতে পারেন:

//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {

    @Override
    public boolean isCellEditable(int row, int column) {
       //all cells false
       return false;
    }
};

table.setModel(tableModel);

বা

//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {

   @Override
   public boolean isCellEditable(int row, int column) {
       //Only the third column
       return column == 3;
   }
};

table.setModel(tableModel);

আপনার জেটিবেলটি অদৃশ্য হয়ে গেলে তার জন্য দ্রষ্টব্য

আপনি JTableএটি ব্যবহার করার সময় যদি আপনার অদৃশ্য হয়ে থাকে তবে এটি সম্ভবত সম্ভবত এর DefaultTableModel(Object[][] data, Object[] columnNames)পরিবর্তে আপনাকে নির্মাণকারী ব্যবহার করা দরকার ।

//instance table model
DefaultTableModel tableModel = new DefaultTableModel(data, columnNames) {

    @Override
    public boolean isCellEditable(int row, int column) {
       //all cells false
       return false;
    }
};

table.setModel(tableModel);

4
এটি ডাবল ক্লিক ইভেন্টগুলি JTable এর সাথে সঠিকভাবে কাজ করার সমাধানও। ডাবল ক্লিকটি সাধারণত কোনও ঘরটি এডিট মোডে যাওয়ার সাথে সাথে গ্রাস করা হয় এবং এটি কোনও সেলকে তা করা থেকে বিরত রাখে এবং ডাবল ক্লিকটি নিজেই জেটিবেলে প্রেরণ করে। সমাধানের জন্য ধন্যবাদ, নেলসন!
অ্যাঙ্কোরাইট

4
@ জোপ তারপরে আপনার কোডে অন্য কোথাও কোনও সমস্যা রয়েছে - টেবিলের মডেলটি সম্পাদনযোগ্য নয় বলে কোনও টেবিল কখনও অদৃশ্য হয়ে যায় ...
ক্লিওপেট্রা

4
@ ডৌগহফ এটি দেখে মনে হচ্ছে আপনি জাভা জানেন না বা সত্যিই এমন কোনও ভাষা যা বেশিরভাগ ভাষা বুলিয়ান অপারেশনের জন্য একই-ইশ সিনট্যাক্স ব্যবহার করে ... এটি একটি বুলিয়ান ফেরত দেয় ... আমি আপনাকে একটি খুব বেসিক জাভা সন্ধান করার পরামর্শ দিচ্ছি টিউটোরিয়াল এবং শুরু থেকে শুরু। এভাবে দোল খাওয়ার চেষ্টা করা আপনার ভুল সবকিছু শিখার সাথে শেষ হতে চলেছে।
searchengine27

4
@ ডউগহফ, == হ'ল সমান ফাংশনের জন্য একটি উপ নাম যা বস্তুর তুলনা করে (বাম এবং ডানদিকে) এবং একটি বুলিয়ান দেয়। আমি মনে করি আপনি বিবৃতিটি ব্যবহার করেছেন যদি এটি বুলিয়ানগুলির মূল্যায়ন করে এবং সাধারণত এই ধরণের অভিব্যক্তিগুলির সাথে ব্যবহার করা হয় উদাহরণস্বরূপ যদি (a == খ) কিছু করে। একটি == বি মুদ্রণ করার চেষ্টা করুন বা এটি কেবল একটি ভেরিয়েবলের জন্য নির্ধারণ করুন এবং ফলাফলটি বোঝুন।
নেলসন ওরোরো

4
উপরের ফিক্সটি আমার পক্ষেও কার্যকর নয়। এটি টেবিলের কলাম এবং ডেটা উপাদানগুলিকে অদৃশ্য হয়ে যায়। আমার টেবিলটি টেবিল = নতুন জেটিবেল (টেম্পটেবল, কলামনাম) দিয়ে তৈরি হয়েছে;, যেখানে টেম্পটেবল একটি স্ট্রিং [] [] এবং কলামের নাম একটি স্ট্রিং []। আমি বিশ্বাস করি নতুন ডিফল্ট টেবিলমোডেল () সারণী মডেলের জন্য ডেটা এবং কলামের নাম উল্লেখ না করেই সমস্যাটি সৃষ্টি হয়েছে। ডেটা মডেলগুলিতে আমি কীভাবে তা নির্দিষ্ট করব। আমি টেবিল.সেটমোডেল (টেবিলমোডেল (টেম্পটেবল, কলামনাম)) চেষ্টা করেছি; কিন্তু এর ফলে "প্রতীকটি খুঁজে পাওয়া যায় না" ত্রুটি ঘটে।
ব্যবহারকারী 1164199

51
table.setDefaultEditor(Object.class, null);

4
এটি সেরা এবং সহজ উত্তর। অবশ্যই, আপনাকে সম্পাদকটি বাতিল করতে হবে যাতে আপনি এটি সম্পাদনা করতে পারবেন না।
লেমুড এডান

এটি একক নির্বাচনের সাথে দুর্দান্ত কাজ করে। যা আমার চাহিদা ছিল
ওয়েসোস ডি কুইসো

এটি উত্তর দেওয়া উচিত!
কৃষপ্রকাশ

36

শুধু যোগ কর

table.setEnabled(false);

এটা আমার জন্য ভালই কাজ করে.


4
আপনি যদি কাস্টম টেবিল মডেলটি ব্যবহার না করেন তবে এটি দুর্দান্ত!
কিংসোলম্যান

27
তবে আপনি কোনও ঘর বা সারিটি নির্বাচন করতে পারবেন না।
টিয়ানজ

4
এটি কিছু এল অ্যান্ড এফ-এর মধ্যে "গ্রেড আউট" দেখবে।
stommestack

4
ওই কাজগুলো. ধন্যবাদ তবে, আমি এখনও জানতে চাই কেন নেলসনের ডেটা মডেল পদ্ধতিটি টেবিলের কলাম এবং ডেটা উপাদানগুলিকে অদৃশ্য করে দেয়।
ব্যবহারকারী 1164199

4
আমার জন্য ভাল কাজ করে!
কলবি কক্স

10

যদি আপনি মানগুলির একটি সেট ("নতুন জেটিবেল (ভেক্টর, ভেক্টর)" সহ) স্বয়ংক্রিয়ভাবে টেবিলমোডেল তৈরি করে থাকেন তবে সম্ভবত কলামগুলি থেকে সম্পাদকগুলি সরানো আরও সহজ:

JTable table = new JTable(my_rows, my_header);

for (int c = 0; c < table.getColumnCount(); c++)
{
    Class<?> col_class = table.getColumnClass(c);
    table.setDefaultEditor(col_class, null);        // remove editor
}

সম্পাদক ছাড়া, ডেটা সম্পাদনাযোগ্য হবে না।


4
-১ অবৈধ স্থানে র্যান্ডম হ্যাকিং কখনই কোনও বিকল্প নয়
ক্লিওপেট্রা

দয়া করে, আপনি এটি ব্যাখ্যা করতে পারেন কেন এটি "অবৈধ স্থানে এলোমেলো হ্যাকিং"? মতে setDefaultEditor () ডক : "যদি সম্পাদক নাল, এই কলামের বর্গ জন্য ডিফল্ট এডিটর সরিয়ে ফেলা হয়।"
ফ্রিসফট

হ্যাঁ, এবং অবজেক্টের জন্য ডিফল্ট হয়ে পড়ে ;-) সুতরাং আপনি সম্পাদনাটি সত্যই অক্ষম করবেন না (কলামগুলির মধ্যে একটিতে যদি অবজেক্ট টাইপ করা হয় তবে) আপনি কাস্টম সম্পাদক হতে পারে এমন কোনও কলামও মিস করছেন। সেখানে হয় নিয়ন্ত্রণ সেল editability গ্রহণ করা বোঝানো API, এবং যে মডেলের আছে। অন্য সমস্ত কিছু হ্যাকিং এবং যেমন অনুপযুক্ত।
ক্লিওপাত্র

আমি আপনার পয়েন্ট দেখুন. তবে আমি এপিআই থেকে যা বুঝলাম তা হ'ল, যদি আমি দ্রুত পথে একটি টেবিল তৈরি করি ("নতুন জেটিবেল (ভেক্টর, ভেক্টর)" দিয়ে), তবে টেবিলটিতে তার সমস্ত কলামের জন্য ডিফল্ট সম্পাদক থাকবে। সুতরাং, আমি যদি "টেবিল.সেট ডেফল্টএডিটর (কলাম, নাল)" চালনা করি তবে আমি কলামটি থেকে ডিফল্ট সম্পাদক মুছে ফেলব, সুতরাং কলামে কোনও সম্পাদক থাকবে না এবং কলামটি সম্পাদনাযোগ্য হবে না। এটা হবে?
ফ্রিসফট

আমি টেবিলটি সেভাবে তৈরি করেছিলাম new JTable(Vector, Vector) এবং আমার জন্য কাজ করব। আমার কোনও ঘরে কোনও সম্পাদক দরকার নেই, তাই আপনার আমার ভোট রয়েছে।
দানি সানকাস

3

আমি এটি ব্যবহার করেছি এবং এটি কাজ করেছে: এটি খুব সহজ এবং সূক্ষ্মভাবে কাজ করে।

JTable myTable = new JTable();
myTable.setEnabled(false);

4
নির্বাচন করা সম্ভব হবে না।
এইচ

সহজ ও সুন্দর সমাধান
নুয়ান হর্ষকুমার পিয়ারাথনা

প্রশ্ন সম্পাদনাযোগ্য সক্ষম সম্পর্কে নয়।
সক্ষমটি

2

নতুন ডিফল্টসেলিটর শ্রেণি তৈরি করুন:

public static class Editor_name extends DefaultCellEditor {
  public Editor_name(JCheckBox checkBox) {
   super(checkBox);
  }
  @Override
  public boolean isCellEditable(EventObject anEvent) {
    return false;
  }
}

এবং সেটসেলএডিটর ব্যবহার করুন:

JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.