ورود

View Full Version : سوال: حذف سطری از جدول که داده هایش از یک فایل متنی استخراج شده اند



sajjad4563
سه شنبه 12 دی 1391, 17:36 عصر
باسلام و ممنون بابت پاسختان

من یک جدول دارم که اطلاعات را از فایل متنی میخواند و به درستی در داخل
سطر هایش قرار میدهد.
در این قسمت مشکلی نیست.
من میخواهم دکمه ای داشته باشم که وقتی که کاربر سطری را انتخاب میکند و
بر دکمه کلیک میکند، آن سطر حذف شوند و دوباره جدول مرتب شود، فعلا حذف
آن فایل از رکورد مد نظر نیست
این تمام کد من است:

import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class RemoveRow extends AbstractTableModel{

Vector data;
Vector columns;
public RemoveRow() {

String line;
data = new Vector();
columns = new Vector();
try {
FileInputStream fis = new FileInputStream("D:\\AllUserRecords.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
StringTokenizer st1 = new StringTokenizer(br.readLine(), " ");
while (st1.hasMoreTokens())
columns.addElement(st1.nextToken());
while ((line = br.readLine()) != null) {
StringTokenizer st2 = new StringTokenizer(line, " ");
while (st2.hasMoreTokens())
data.addElement(st2.nextToken());
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}

public int getRowCount() {
return data.size() / getColumnCount();
}

public int getColumnCount() {
return columns.size();
}

public Object getValueAt(int rowIndex, int columnIndex) {
return (String) data.elementAt((rowIndex * getColumnCount())
+ columnIndex);
}
public static void main(String[] args){

final RemoveRow rR1=new RemoveRow();
JFrame frame=new JFrame();
final JTable table=new JTable();
table.setModel(rR1);
JPanel panel=new JPanel();
JButton button1=new JButton("Delete");

button1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
table.remove(table.getSelectedRow());
}
});
panel.add(button1);
panel.add(new JScrollPane(table));
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setBounds(10, 10, 550, 300);
frame.setVisible(true);
}

}

اما دکمه کار نمیکنه و ارور میگیره.

لطفا کمکم کنید، ممنونم!

spiderman200700
سه شنبه 12 دی 1391, 20:46 عصر
سلام
متد ها را بد پیاده سازی کردی. بهتره هر سطرت یه Vector باشه . یعنی اگه 5 سطر داری ، کل اطلاعات جدولت شامل یه Vector هست که هر کدوم از Elementهاش یه Vector هست. به بیان ساده تر متغییر data یه vector دو بعدی یا vectorی از vectorها میشه.
در سوال شما 2 نکته وجود داره. حذف کردن یه سطر و مرتب کردن اطلاعات جدول
برای حذف کردن شما باید سطر مورد تنظر رو از متغییر data حذف کنی و بعش یکی از این 2 متد رو صدا بزنی:
fireTableRowsDeleted(firstRow, lastRow);
fireTableDataChanged();

firstRow و lastRow شماره سطر ابتدایی و انتهایی شماس که حذف شده . اگه فقط یه سطر رو حذف کردی، جای هردوی اینها شماره سطر حذف شده رو بنویس.بدیهیه که شماره سطر ها از صفر شروع میشه.

برای مرتب کردن جدول هم باید یه متد بنویسی که اطلاعات متغییر data رو مرتب کنه.فرض کنیم اسم متد sort هست. بنا بر این هر جا که نیاز داشتی جدول مرتب بشه، باید این دوتا متد رو صدا بزنی:
sort();
fireTableDataChanged();
با این کدی که شما نوشتی ، یه کمی کارت برای حذف و مرتب سازی اطلاعات متغییر data سخت میشه. بهتره dataرو اونطوری که گفتم تعریف کنی
نمونشم میتونی در اینجا ببینی:
http://neo-one.ir/main/?type=cG9zdA==&target=Ng==

البته اینجا از یه آرایه دو بعدی استفاده شده که شما میتونی خیلی راحت جاش یه Vector دو بعدی تعریف کنی(Vectorی از Vector ها)
موفق باشی

sajjad4563
چهارشنبه 13 دی 1391, 13:30 عصر
دستت درد نکنه که وقت گذاشتی، ولی کم متوجه شدم.
شما که این زحمتو کشیدی، اون جاهایی که اشکال داره و سخت کرده رو برام عوض کنی دیگه خیلی آقایی کردی.

خیلی وقته گیر این مسئله هستم.

قربانت!:قلب:

spiderman200700
چهارشنبه 13 دی 1391, 21:37 عصر
راستش وقت نمیکنم فعلا درستش کنم. امیدوارم دوستان دیگه وقت داشته باشن کمکت کنن.
ولی به هر حال خودت اگه چیزایی که گفتم رو رعایت کنی و آموزش لینکی که گذاشتمو ببینی، و یه کم آزمون و خطا کنی کاملا متوجه میشی باید چکار کنی.