使用JavaSwing将内容从jtable输出到textarea

jdg4fx2g  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(428)

因此,我尝试使用JavaSwing制作一个基本的gui。我有一些按钮,一个带有回车按钮的文本字段,还有一个更大的文本区域。当单击“显示所有团队”按钮时,此按钮的操作侦听器应该将jtable内容输出到文本区域,但是它不工作,也没有输出任何内容。

  1. package footballmanager;
  2. import java.awt.EventQueue;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.JFrame;
  6. import javax.swing.JButton;
  7. import javax.swing.JList;
  8. import javax.swing.JTextPane;
  9. import javax.swing.JLabel;
  10. import javax.swing.JTextArea;
  11. import javax.swing.JScrollBar;
  12. import javax.swing.JTable;
  13. import javax.swing.JTextField;
  14. import javax.swing.table.DefaultTableModel;
  15. public class FootballGUI
  16. {
  17. private JFrame frame;
  18. private JTextField textField;
  19. //Launch the application.
  20. public static void main(String[] args)
  21. {
  22. FootballGUI window = new FootballGUI();
  23. window.frame.setVisible(true);
  24. }
  25. //Display the application
  26. public void displayGUI() {
  27. this.frame.setVisible(true);
  28. }
  29. //Create the application.
  30. public FootballGUI()
  31. {
  32. frame = new JFrame();
  33. frame.setBounds(100, 100, 611, 471);
  34. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  35. // Text area
  36. final JTextArea testArea = new JTextArea(5,20);
  37. testArea.setBounds(6, 6, 329, 343);
  38. frame.getContentPane().add(testArea);
  39. // Buttons on the window
  40. JButton displayTeams = new JButton("Display all teams");
  41. // (x, y, w, h)
  42. displayTeams.setBounds(370, 6, 200, 29);
  43. frame.getContentPane().add(displayTeams);
  44. class MyActionListener implements ActionListener{
  45. public void actionPerformed(ActionEvent e) {
  46. // String s = String.format("%s %s", "Club name", "Club points");
  47. // testArea.setText(s);
  48. String[] columnNames = {"First Name",
  49. "Last Name",
  50. "Sport",
  51. "# of Years",
  52. "Vegetarian"};
  53. Object[][] data = {
  54. {"Kathy", "Smith",
  55. "Snowboarding", new Integer(5), new Boolean(false)},
  56. {"John", "Doe",
  57. "Rowing", new Integer(3), new Boolean(true)},
  58. {"Sue", "Black",
  59. "Knitting", new Integer(2), new Boolean(false)},
  60. {"Jane", "White",
  61. "Speed reading", new Integer(20), new Boolean(true)},
  62. {"Joe", "Brown",
  63. "Pool", new Integer(10), new Boolean(false)}
  64. };
  65. JTable table = new JTable(data, columnNames);
  66. DefaultTableModel model1 = (DefaultTableModel) table.getModel();
  67. int nRow = model1.getRowCount(), nCol = model1.getColumnCount();
  68. Object [][] tableData = new Object [nRow] [nCol];
  69. for (int i = 0; i < nRow; i++){
  70. for (int j = 0; j < nCol; j++){
  71. tableData [i][j] = model1.getValueAt (i,j);
  72. testArea.append((String) tableData [i][j] + "\t");
  73. }
  74. }
  75. testArea.append("\n");
  76. }
  77. }
  78. displayTeams.addActionListener(new MyActionListener());
  79. JButton goalSort = new JButton("Sort list by goals");
  80. goalSort.setBounds(370, 40, 200, 29);
  81. frame.getContentPane().add(goalSort);
  82. JButton winSort = new JButton("Sort list by most wins");
  83. winSort.setBounds(370, 74, 200, 29);
  84. frame.getContentPane().add(winSort);
  85. JButton randomMatch = new JButton("Generate random match");
  86. randomMatch.setBounds(370, 280, 200, 29);
  87. frame.getContentPane().add(randomMatch);
  88. JButton displayMatches = new JButton("Display all played matches");
  89. displayMatches.setBounds(370, 314, 200, 29);
  90. frame.getContentPane().add(displayMatches);
  91. JButton btnEnter = new JButton("Search for a match");
  92. btnEnter.setBounds(518, 404, 85, 39);
  93. frame.getContentPane().add(btnEnter);
  94. JScrollBar scrollBar = new JScrollBar();
  95. scrollBar.setBounds(320, 6, 15, 338);
  96. frame.getContentPane().add(scrollBar);
  97. textField = new JTextField();
  98. textField.setBounds(5, 410, 508, 28);
  99. frame.getContentPane().add(textField);
  100. textField.setColumns(10);
  101. JLabel lblMapGoesHere = new JLabel("List goes here");
  102. lblMapGoesHere.setBounds(342, 37, 263, 312);
  103. frame.getContentPane().add(lblMapGoesHere);
  104. }
  105. }
jtoj6r0c

jtoj6r0c1#

但是它不起作用
好吧,你有一个阶级例外。你不认为把这些信息放在问题中很重要吗?

  1. JTable table = new JTable(data, columnNames);
  2. DefaultTableModel model1 = (DefaultTableModel) table.getModel();
  3. int nRow = model1.getRowCount(), nCol = model1.getColumnCount();
  4. Object [][] tableData = new Object [nRow] [nCol];
  5. for (int i = 0; i < nRow; i++){
  6. for (int j = 0; j < nCol; j++){
  7. tableData [i][j] = model1.getValueAt (i,j);
  8. testArea.append((String) tableData [i][j] + "\t");
  9. }
  10. }

上面的逻辑是什么意思?
为什么要将数据添加到一个jtable中,在那里数据显示格式良好,然后尝试在一个jtextarea中复制并显示它,而在jtextarea中数据没有格式化?
为什么要从模型中获取数据并尝试将数据添加到二维数组中?
你为什么要访问tablemodel?
您可以直接从jtable获取信息。您只需要:

  1. //testArea.append((String) tableData [i][j] + "\t");
  2. testArea.append( table.getValueAt(i, j).toString() + "\t" )?

当然,您还需要两个循环,一个用于行,一个用于列。

展开查看全部
qkf9rpyu

qkf9rpyu2#

我重拨了你的gui以使用 JTable .
下面是修改后的gui的样子。

以下是左键单击“显示所有团队”按钮后的效果。

以下是我对您的gui所做的主要更改。
我通过调用
SwingUtilities invokeLater 方法。此方法确保在事件调度线程上创建和使用swing组件。
我用了两个swing布局管理器 JPanels 我创造了。jframe内容窗格使用默认值 BorderLayout . 这个
JTable JPanel 使用默认值 FlowLayout . 这个
JButton JPanel 使用 GridBagLayout . 你使用的固定布局不允许我调整 JTextArea 你在用。
我用了一个 JTable 显示团队。我把 JTable 在一个 JScrollPane ,和 JScrollPane 在一个小房间里。
在创建gui之前,我创建了列和数据。通常,您希望首先创建应用程序模型,然后创建gui。这是模型/视图/控制器模式的一个简单示例。
下面是我使用的完整的可运行代码。

  1. import java.awt.BorderLayout;
  2. import java.awt.GridBagConstraints;
  3. import java.awt.GridBagLayout;
  4. import java.awt.Insets;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import javax.swing.BorderFactory;
  8. import javax.swing.JButton;
  9. import javax.swing.JFrame;
  10. import javax.swing.JPanel;
  11. import javax.swing.JScrollPane;
  12. import javax.swing.JTable;
  13. import javax.swing.SwingUtilities;
  14. import javax.swing.table.DefaultTableModel;
  15. public class FootballGUI implements Runnable {
  16. private DefaultTableModel model;
  17. private JFrame frame;
  18. private JTable table;
  19. private String[][] data;
  20. // Launch the application.
  21. public static void main(String[] args) {
  22. SwingUtilities.invokeLater(new FootballGUI());
  23. }
  24. public FootballGUI() {
  25. String[] columnNames = { "First Name", "Last Name", "Sport",
  26. "# of Years", "Vegetarian" };
  27. this.model = new DefaultTableModel();
  28. for (String s : columnNames) {
  29. model.addColumn(s);
  30. }
  31. this.data = new String[][] { { "Kathy", "Smith", "Snowboarding", "5", "false" },
  32. { "John", "Doe", "Rowing", "3", "true" },
  33. { "Sue", "Black", "Knitting", "2", "false" },
  34. { "Jane", "White", "Speed reading", "20", "true" },
  35. { "Joe", "Brown", "Pool", "10", "false" } };
  36. }
  37. // Create the application.
  38. @Override
  39. public void run() {
  40. frame = new JFrame("Football GUI");
  41. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  42. frame.add(createTablePanel(), BorderLayout.CENTER);
  43. frame.add(createButtonPanel(), BorderLayout.AFTER_LINE_ENDS);
  44. frame.pack();
  45. frame.setLocationByPlatform(true);
  46. frame.setVisible(true);
  47. }
  48. private JPanel createTablePanel() {
  49. JPanel panel = new JPanel();
  50. table = new JTable(model);
  51. JScrollPane scrollPane = new JScrollPane(table);
  52. panel.add(scrollPane);
  53. return panel;
  54. }
  55. private JPanel createButtonPanel() {
  56. JPanel panel = new JPanel(new GridBagLayout());
  57. panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
  58. GridBagConstraints gbc = new GridBagConstraints();
  59. gbc.anchor = GridBagConstraints.CENTER;
  60. gbc.fill = GridBagConstraints.HORIZONTAL;
  61. gbc.gridx = 0;
  62. gbc.gridy = 0;
  63. gbc.insets = new Insets(5, 5, 5, 5);
  64. gbc.weightx = 1.0d;
  65. JButton displayTeams = new JButton("Display all teams");
  66. displayTeams.addActionListener(new MyActionListener());
  67. panel.add(displayTeams, gbc);
  68. gbc.gridy++;
  69. JButton goalSort = new JButton("Sort list by goals");
  70. panel.add(goalSort, gbc);
  71. gbc.gridy++;
  72. JButton winSort = new JButton("Sort list by most wins");
  73. panel.add(winSort, gbc);
  74. gbc.gridy++;
  75. JButton randomMatch = new JButton("Generate random match");
  76. panel.add(randomMatch, gbc);
  77. gbc.gridy++;
  78. JButton displayMatches = new JButton("Display all played matches");
  79. panel.add(displayMatches, gbc);
  80. gbc.gridy++;
  81. JButton btnEnter = new JButton("Search for a match");
  82. panel.add(btnEnter, gbc);
  83. return panel;
  84. }
  85. public class MyActionListener implements ActionListener {
  86. @Override
  87. public void actionPerformed(ActionEvent event) {
  88. int count = model.getRowCount();
  89. for (int i = 0; i < count; i++) {
  90. model.removeRow(0);
  91. }
  92. for (int i = 0; i < data.length; i++) {
  93. model.addRow(data[i]);
  94. }
  95. }
  96. }
  97. }
展开查看全部

相关问题