Быстрый вопрос:
Я пытаюсь импортировать некоторую информацию из CSV в таблицу jtable, которая находится на поворотной панели в моей программе.
Я импортировал информацию в actionListener, используя поток ввода, и проанализировал его с помощью bufferedreader. После этого я просто использовал простой цикл while, чтобы добавить его в Jtable. однако, когда я запускаю приложение, в моей таблице jtable не отображается никакой информации.
Когда я пытаюсь отладить программу, у меня нет проблем с переключением между двумя панелями jpanel (и другой информацией, которая находится на них), это просто моя таблица jtable, которая оказывается пустой.
Вот мой код:
public class wert extends JFrame {
private JPanel contentPane;
private JPanel panel;
private JTable table;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
wert frame = new wert();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public wert() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 925, 486);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
Path filePath = Paths.get("\\test folder\\newNeetest.csv\\");
InputStream input = null;
input = Files.newInputStream(filePath);
BufferedReader reader = new BufferedReader (new InputStreamReader(input));
DefaultTableModel model = (DefaultTableModel)table.getModel();
Object [] lines = reader.lines().toArray();
for (int q =0; q > lines.length; q++) {
String dsa = lines[q].toString();
String [] dataRow = dsa.split(",");
model.addRow(dataRow);
}
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
);
contentPane.add(btnNewButton, BorderLayout.NORTH);
panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
table = new JTable();
GroupLayout gl_panel = new GroupLayout(panel);
gl_panel.setHorizontalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addGroup(gl_panel.createSequentialGroup()
.addGap(475)
.addComponent(table, GroupLayout.PREFERRED_SIZE, 230, GroupLayout.PREFERRED_SIZE)
.addContainerGap(188, Short.MAX_VALUE))
);
gl_panel.setVerticalGroup(
gl_panel.createParallelGroup(Alignment.LEADING)
.addGroup(Alignment.TRAILING, gl_panel.createSequentialGroup()
.addContainerGap()
.addComponent(table, GroupLayout.DEFAULT_SIZE, 0, Short.MAX_VALUE)
.addGap(375))
);
panel.setLayout(gl_panel);
}
}
Это непростой вопрос, поскольку вы просите помощи в отладке кода, который мы не можем скомпилировать, запустить или протестировать. Если вы не получите решение в ближайшее время, рассмотрите возможность публикации действующей программы минимальный воспроизводимый пример в виде текста в формате кода (как вы это сделали с фрагментом кода здесь) с вашим вопросом. Это дает нам наилучшие шансы помочь разобраться в проблеме и ее решении.
@camickr, хотя в моем приложении несколько таблиц, модель таблицы по умолчанию ссылается на таблицу 3, которая является единственной таблицей в панели, над которой я работаю ... если я что-то не пропустил?
@HovercraftFullOfEels обновленный код.
@Leemim, 1) Я тебе два вопроса задал. 2) ваш обновленный код по-прежнему нам ничего не говорит. а) мы не знаем, где вы создаете таблицу. б) это не «MCVE». Мы не можем скомпилировать / протестировать код, и у нас нет доступа к вашему файлу. Итак, в "MCVE" вы должны добавить в модель жестко закодированные данные. Как только вы докажете, что это работает, вы получите данные из файла. И в вашем "MCVE" нас не интересуют другие таблицы, а только та, которая вызывает проблему.
Спасибо за дополнительный код, но я все еще понятия не имею, так как ваш опубликованный код еще недостаточно завершен, чтобы я мог его копировать, вставлять, компилировать и запускать, все требования для действительного MCVE. Нам не нужна ваша программа целиком, так как в ней будет много кода, который не имеет отношения к проблеме, но нам нужен код достаточно, достаточно, чтобы опубликованный код продемонстрировал нам проблему. Если вы все еще застряли, перечитайте ссылку MCVE и попробуйте еще раз. Да, это многого от вас требует, но обычно оно того стоит
В дополнение к совету @HovercraftFullOfEels по созданию MCVE удалите файл внешних данных и замените его жестко закодированным String, который содержит всего две строки данных. BTW «Импорт CSV в JTable на Jpanel (без CSVReader)» К тому времени, когда вы добьетесь этого, у вас будет хотя бы простая программа для чтения CSV.
@Hovercraft Full Of Eels Спасибо всем за терпение. Я переделал пример про. Дайте мне знать, если это соответствует вашим потребностям. Ваша поддержка ценится.
Let me know if it suits your needs. - нет, потому что мы все еще не можем выполнить код по причинам, неоднократно указанным выше.




Несколько проблем с вашим опубликованным кодом:
Предложения:
Например, ваш код изменился на MCVE, который работает:
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.DefaultTableModel;
@SuppressWarnings("serial")
public class Wert2 extends JFrame {
private JPanel contentPane;
private JTable table;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Wert2 frame = new Wert2();
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Wert2() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// file I/O code removed for sake of MCVE
DefaultTableModel model = (DefaultTableModel) table.getModel();
for (int i = 0; i < 10; i++) {
Vector<String> rowData = new Vector<>();
for (int j = 0; j < 3; j++) {
rowData.add(String.format("[%d, %d]", i, j));
}
model.addRow(rowData);
}
}
});
contentPane.add(btnNewButton, BorderLayout.NORTH);
// contentPane.add(panel, BorderLayout.CENTER);
String[] colNames = {"A", "B", "C"};
table = new JTable(new DefaultTableModel(colNames, 0));
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
contentPane.add(scrollPane);
}
}
Спасибо за бесконечное терпение. Я проработаю этот пример над своим приложением.
Как узнать, что данные были добавлены в TableModel? Откуда вы знаете, что ваш метод ссылается на таблицу, отображаемую в графическом интерфейсе. Возможно, вы создали два экземпляра JTable.