cuốn sách gpt4 ai đã làm

Thêm nhiều JProgressBar vào TableColumn của JTable

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 04:56:54 26 4
mua khóa gpt4 Nike

Tôi có nhiều JProgressBar 添加到 JTable của BảngCột 中。

Tôi cập nhật tất cả các JProgressBars bằng dữ liệu sau khi thực hiện một số phép tính, nhưng chỉ tính toán cuối cùng Thanh tiến trình(trong trường hợp này Thanh tiến trình tiến độObj4) đã được thêm và đang được cập nhật.

Làm thế nào để cập nhật tất cả Thanh tiến trình?

Yêu cầu cơ bản là tôi hiển thị trạng thái của tệp trên thanh tiến trình trong khi tải lên. Hiện tại tôi đang mã hóa cứng 4 thanh tiến trình để kiểm tra xem tất cả các thanh tiến trình có cập nhật dựa trên trạng thái của tệp hay không, nhưng tôi cần tạo chúng một cách linh hoạt. Tổng số thanh tiến trình có liên quan đến số lượng tệp được tải lên. Ngoài ra, làm cách nào để có được các phiên bản riêng lẻ của thanh tiến trình và cập nhật trạng thái của chúng?

Tôi đang đính kèm mã nguồn cho thanh tiến trình được thêm vào cột trong bảng.

//tc = đối tượng của TableColumn

ProgressObj1 = ProgressBarRenderer mới("Progress1");
ProgressObj1.setValue(0);
ProgressObj1.setStringPainted(true);
ProgressObj1.setBackground(Color.WHITE);
ProgressObj1.setBorderPainted(true);

tc.setCellRenderer(progressObj1);

ProgressObj2 = ProgressBarRenderer mới("Progress2");
ProgressObj2.setValue(0);
ProgressObj2.setStringPainted(true);
ProgressObj2.setBackground(Color.WHITE);
ProgressObj2.setBorderPainted(true);

tc.setCellRenderer(progressObj2);

ProgressObj3 = ProgressBarRenderer mới("Progress3");
ProgressObj3.setValue(0);
ProgressObj3.setStringPainted(true);
ProgressObj3.setBackground(Color.WHITE);
ProgressObj3.setBorderPainted(true);

tc.setCellRenderer(progressObj3);

ProgressObj4 = ProgressBarRenderer mới("Progress4");
ProgressObj4.setValue(0);
ProgressObj4.setStringPainted(true);
ProgressObj4.setBackground(Color.WHITE);
ProgressObj4.setBorderPainted(true);

tc.setCellRenderer(progressObj4);

câu trả lời hay nhất

Về cơ bản có hai cách để làm điều này bằng cách sử dụng Công Nhân Xoay di chuyển JProgressBarvà Runnable#Thread,Công Nhân Xoay

Ví dụ về
nhập java.awt.*;
nhập java.util.*;
nhập javax.swing.*;
nhập javax.swing.table.*;

lớp công khai TableCellProgressBar {

Chuỗi riêng tư[] cộtNames = {"Chuỗi", "ProgressBar"};
đối tượng riêng tư[][] data = {{"dummy", 100}};
mô hình DefaultTableModel riêng tư = new DefaultTableModel (dữ liệu, tên cột) {
riêng tư cuối cùng dài serialVersionUID = 1L;

@Ghi đè
Lớp công khai getColumnClass(int cột) {
trả về getValueAt(0, cột).getClass();
}

@Ghi đè
boolean công khai isCellEditable(int row, int col) {
trả về sai;
}
};
bảng JTable riêng tư = JTable mới(model);

JComponent công khai makeUI() {
Cột TableColumn = table.getColumnModel().getColumn(1);
cột.setCellRenderer(new ProgressRenderer());
EventQueue.invokeLater(new Runnable() {

@Ghi đè
công khai void run() {
startTask("kiểm tra");
startTask("kiểm tra lỗi");
startTask("kiểm tra");
}
});
JPanel p = JPanel mới(new BorderLayout());
p.add(JScrollPane mới(bảng));
trả lại p;
}
//http://java-swing-tips.blogspot.com/2008/03/jprogressbar-in-jtable-cell.html

khoảng trống riêng tư startTask(String str) {
khóa int cuối cùng = model.getRowCount();
SwingWorker worker = new SwingWorker() {

int riêng tư sleepDummy = new Random().nextInt(100) + 1;
riêng int lengthOfTask = 120;

@Ghi đè
Số nguyên được bảo vệ doInBackground() {
int hiện tại = 0;
while (hiện tại < lengthOfTask && !isCancelled()) {
if (!table.isDisplayable()) {
phá vỡ;
}
if (key == 2 && current > 60) { //Kiểm tra lỗi
hủy (đúng);
xuất bản(-1);
return -1;
}
hiện tại++;
thử {
Thread.sleep(sleepDummy);
} bắt (InterruptedException tức là) {
phá vỡ;
}
xuất bản (100 * hiện tại / lengthOfTask);
}
trả về sleepDummy * lengthOfTask;
}

@Ghi đè
quá trình void được bảo vệ (java.util.List c) {
model.setValueAt(c.get(c.size() - 1), key, 1);
}

@Ghi đè
khoảng trống được bảo vệ đã hoàn thành () {
Chuỗi văn bản;
int tôi = -1;
nếu (isCancelled()) {
text = "Đã hủy";
} khác {
thử {
tôi = lấy();
text = (i >= 0) ? "Xong" : "Đã xử lý";
} bắt (Bỏ qua ngoại lệ) {
bỏ qua.printStackTrace();
văn bản = bỏ qua.getMessage();
}
}
System.out.println(key + ://: + text + "(" + i + "ms)");
}
};
model.addRow(đối tượng mới[]{str, 0});
worker.execute();
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Ghi đè
công khai void run() {
createAndShowGUI();
}
});
}

khoảng trống tĩnh công khai createAndShowGUI() {
Khung JFrame = JFrame mới();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(new TableCellProgressBar().makeUI());
frame.setSize(320, 240);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

lớp ProgressRenderer mở rộng DefaultTableCellRenderer {

cuối cùng riêng tư JProgressBar b = new JProgressBar(0, 100);

ProgressRenderer công khai() {
super();
setOpaque(true);
b.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
}

@Ghi đè
Thành phần công khai getTableCellRendererComponent(bảng JTable, Giá trị đối tượng, boolean isSelected, boolean hasFocus, int row, int cột) {
Số nguyên i = giá trị (Số nguyên);
Chuỗi văn bản = "Đã hoàn thành";
nếu (tôi < 0) {
text = "Lỗi";
} khác nếu (i < 100) {
b.setValue(i);
return b;
}
super.getTableCellRendererComponent(bảng, văn bản, isSelected, hasFocus, hàng, cột);
return this;
}
}

Về java - thêm nhiều JProgressBars vào TableColumn của JTable, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/7036036/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress