即使我有一个 JScrollPane,JTable 列标题也没有显示
JTable column titles not showing up even though I have a JScrollPane
我一直在尝试制作一个简单的游戏,其中一个按钮会弹出一个带有玩家排行榜的 window,但在搜索了一段时间并尝试了所有方法之后,我的专栏标题现在出现了。
我使用的代码是:
package hr.tvz.programiranje.java.windows;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.BorderLayout;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.Font;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.awt.Color;
import javax.swing.border.MatteBorder;
import javax.swing.table.DefaultTableModel;
public class LeaderboardTable extends JFrame {
private JFrame frmLeaderboards;
private JTable leaderboard_table;
public void show_table_screen() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frmLeaderboards.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public LeaderboardTable() {
initialize();
}
@SuppressWarnings("serial")
private void initialize() {
frmLeaderboards = new JFrame();
frmLeaderboards.setTitle("Leaderboards");
frmLeaderboards.setBounds(100, 100, 485, 218);
frmLeaderboards.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
HashMap<String, Float> leaderboard_map = MainWindow.get_leaderboard_map();
int map_size = leaderboard_map.size();
Object[][] data = new Object[map_size][3];
// Sort the map
LinkedHashMap<String, Float> sorted = new LinkedHashMap<>();
leaderboard_map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEachOrdered(x -> sorted.put(x.getKey(), x.getValue()));
// Write the map data into a matrix
int i = 0;
for(String key:sorted.keySet()) {
data[i][0] = i + 1;
data[i][1] = key;
data[i++][2] = sorted.get(key);
}
String[] column_names = {
"Rank",
"Name",
"Time"
};
leaderboard_table = new JTable(new DefaultTableModel(data, column_names) {
boolean[] columnEditables = new boolean[] { false, false, false };
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
});
// ScrollPane
JScrollPane scrollPane = new JScrollPane(leaderboard_table);
scrollPane.setBounds(36, 37, 407, 79);
getContentPane().add(scrollPane);
leaderboard_table.setFont(new Font("Consolas", Font.PLAIN, 12));
GroupLayout groupLayout = new GroupLayout(frmLeaderboards.getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(leaderboard_table, GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE)
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(leaderboard_table, GroupLayout.DEFAULT_SIZE, 461, Short.MAX_VALUE)
);
frmLeaderboards.getContentPane().setLayout(groupLayout);
}
}
根据我的阅读,我需要将它附加到 JScrollPane,但这没有用。我的 window 的设计如下所示:
这就是我不断得到的:
编辑:问题已解决,现在新代码为:
package hr.tvz.programiranje.java.windows;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.BorderLayout;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.Font;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.awt.Color;
import javax.swing.border.MatteBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.BevelBorder;
public class LeaderboardTable extends JFrame {
private JFrame frmLeaderboards;
private JTable leaderboard_table;
public void show_table_screen() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frmLeaderboards.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public LeaderboardTable() {
initialize();
}
@SuppressWarnings("serial")
private void initialize() {
frmLeaderboards = new JFrame();
frmLeaderboards.setTitle("Leaderboards");
frmLeaderboards.setBounds(100, 100, 485, 218);
frmLeaderboards.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
HashMap<String, Float> leaderboard_map = MainWindow.get_leaderboard_map();
int map_size = leaderboard_map.size();
Object[][] data = new Object[map_size][3];
// Sort the map
LinkedHashMap<String, Float> sorted = new LinkedHashMap<>();
leaderboard_map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEachOrdered(x -> sorted.put(x.getKey(), x.getValue()));
// Write the map data into a matrix
int i = 0;
for(String key:sorted.keySet()) {
data[i][0] = i + 1;
data[i][1] = key;
data[i++][2] = sorted.get(key);
}
String[] column_names = {
"Rank",
"Name",
"Time"
};
leaderboard_table = new JTable(new DefaultTableModel(data, column_names) {
boolean[] columnEditables = new boolean[] { false, false, false };
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
});
DefaultTableModel model = getTableModel(data, column_names);
leaderboard_table.setModel(model);
leaderboard_table.setFont(new Font("Consolas", Font.PLAIN, 12));
// ScrollPane
JScrollPane scrollPane = new JScrollPane(leaderboard_table);
scrollPane.setBounds(36, 37, 407, 79);
frmLeaderboards.add(scrollPane);
}
@SuppressWarnings("serial")
private DefaultTableModel getTableModel(Object[][] data, String[] column_names) {
return new DefaultTableModel(data, column_names) {
boolean[] columnEditables = new boolean[] { false, false, false };
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
};
}
}
试试这个,也许它会对你有所帮助
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class TableExample extends JFrame {
private JFrame frmLeaderboards;
private JTable leaderboard_table;
public static void main(String[] args) {
TableExample leaderboardTable = new TableExample();
leaderboardTable.show_table_screen();
}
public void show_table_screen() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frmLeaderboards.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public TableExample() {
initialize();
}
@SuppressWarnings("serial")
private void initialize() {
frmLeaderboards = new JFrame();
frmLeaderboards.setTitle("Leaderboards");
frmLeaderboards.setBounds(100, 100, 485, 218);
frmLeaderboards.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object[][] data = getData();
String[] column_names = {
"Rank",
"Name",
"Time"
};
leaderboard_table = new JTable(data, column_names);
DefaultTableModel model = getTableModel(data, column_names);
leaderboard_table.setModel(model);
leaderboard_table.setFont(new Font("Consolas", Font.PLAIN, 12));
// ScrollPane
JScrollPane scrollPane = new JScrollPane(leaderboard_table);
scrollPane.setBounds(36, 37, 407, 79);
frmLeaderboards.add(scrollPane);
}
private DefaultTableModel getTableModel(Object[][] data, String[] column_names) {
return new DefaultTableModel(data, column_names) {
boolean[] columnEditables = new boolean[] { false, false, false };
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
};
}
private Object[][] getData() {
return new Object[][] {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
}
}
我一直在尝试制作一个简单的游戏,其中一个按钮会弹出一个带有玩家排行榜的 window,但在搜索了一段时间并尝试了所有方法之后,我的专栏标题现在出现了。
我使用的代码是:
package hr.tvz.programiranje.java.windows;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.BorderLayout;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.Font;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.awt.Color;
import javax.swing.border.MatteBorder;
import javax.swing.table.DefaultTableModel;
public class LeaderboardTable extends JFrame {
private JFrame frmLeaderboards;
private JTable leaderboard_table;
public void show_table_screen() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frmLeaderboards.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public LeaderboardTable() {
initialize();
}
@SuppressWarnings("serial")
private void initialize() {
frmLeaderboards = new JFrame();
frmLeaderboards.setTitle("Leaderboards");
frmLeaderboards.setBounds(100, 100, 485, 218);
frmLeaderboards.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
HashMap<String, Float> leaderboard_map = MainWindow.get_leaderboard_map();
int map_size = leaderboard_map.size();
Object[][] data = new Object[map_size][3];
// Sort the map
LinkedHashMap<String, Float> sorted = new LinkedHashMap<>();
leaderboard_map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEachOrdered(x -> sorted.put(x.getKey(), x.getValue()));
// Write the map data into a matrix
int i = 0;
for(String key:sorted.keySet()) {
data[i][0] = i + 1;
data[i][1] = key;
data[i++][2] = sorted.get(key);
}
String[] column_names = {
"Rank",
"Name",
"Time"
};
leaderboard_table = new JTable(new DefaultTableModel(data, column_names) {
boolean[] columnEditables = new boolean[] { false, false, false };
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
});
// ScrollPane
JScrollPane scrollPane = new JScrollPane(leaderboard_table);
scrollPane.setBounds(36, 37, 407, 79);
getContentPane().add(scrollPane);
leaderboard_table.setFont(new Font("Consolas", Font.PLAIN, 12));
GroupLayout groupLayout = new GroupLayout(frmLeaderboards.getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(leaderboard_table, GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE)
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(leaderboard_table, GroupLayout.DEFAULT_SIZE, 461, Short.MAX_VALUE)
);
frmLeaderboards.getContentPane().setLayout(groupLayout);
}
}
根据我的阅读,我需要将它附加到 JScrollPane,但这没有用。我的 window 的设计如下所示:
这就是我不断得到的:
编辑:问题已解决,现在新代码为:
package hr.tvz.programiranje.java.windows;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.BorderLayout;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import java.awt.Font;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.awt.Color;
import javax.swing.border.MatteBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.BevelBorder;
public class LeaderboardTable extends JFrame {
private JFrame frmLeaderboards;
private JTable leaderboard_table;
public void show_table_screen() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frmLeaderboards.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public LeaderboardTable() {
initialize();
}
@SuppressWarnings("serial")
private void initialize() {
frmLeaderboards = new JFrame();
frmLeaderboards.setTitle("Leaderboards");
frmLeaderboards.setBounds(100, 100, 485, 218);
frmLeaderboards.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
HashMap<String, Float> leaderboard_map = MainWindow.get_leaderboard_map();
int map_size = leaderboard_map.size();
Object[][] data = new Object[map_size][3];
// Sort the map
LinkedHashMap<String, Float> sorted = new LinkedHashMap<>();
leaderboard_map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEachOrdered(x -> sorted.put(x.getKey(), x.getValue()));
// Write the map data into a matrix
int i = 0;
for(String key:sorted.keySet()) {
data[i][0] = i + 1;
data[i][1] = key;
data[i++][2] = sorted.get(key);
}
String[] column_names = {
"Rank",
"Name",
"Time"
};
leaderboard_table = new JTable(new DefaultTableModel(data, column_names) {
boolean[] columnEditables = new boolean[] { false, false, false };
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
});
DefaultTableModel model = getTableModel(data, column_names);
leaderboard_table.setModel(model);
leaderboard_table.setFont(new Font("Consolas", Font.PLAIN, 12));
// ScrollPane
JScrollPane scrollPane = new JScrollPane(leaderboard_table);
scrollPane.setBounds(36, 37, 407, 79);
frmLeaderboards.add(scrollPane);
}
@SuppressWarnings("serial")
private DefaultTableModel getTableModel(Object[][] data, String[] column_names) {
return new DefaultTableModel(data, column_names) {
boolean[] columnEditables = new boolean[] { false, false, false };
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
};
}
}
试试这个,也许它会对你有所帮助
import java.awt.EventQueue;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class TableExample extends JFrame {
private JFrame frmLeaderboards;
private JTable leaderboard_table;
public static void main(String[] args) {
TableExample leaderboardTable = new TableExample();
leaderboardTable.show_table_screen();
}
public void show_table_screen() {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
frmLeaderboards.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public TableExample() {
initialize();
}
@SuppressWarnings("serial")
private void initialize() {
frmLeaderboards = new JFrame();
frmLeaderboards.setTitle("Leaderboards");
frmLeaderboards.setBounds(100, 100, 485, 218);
frmLeaderboards.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object[][] data = getData();
String[] column_names = {
"Rank",
"Name",
"Time"
};
leaderboard_table = new JTable(data, column_names);
DefaultTableModel model = getTableModel(data, column_names);
leaderboard_table.setModel(model);
leaderboard_table.setFont(new Font("Consolas", Font.PLAIN, 12));
// ScrollPane
JScrollPane scrollPane = new JScrollPane(leaderboard_table);
scrollPane.setBounds(36, 37, 407, 79);
frmLeaderboards.add(scrollPane);
}
private DefaultTableModel getTableModel(Object[][] data, String[] column_names) {
return new DefaultTableModel(data, column_names) {
boolean[] columnEditables = new boolean[] { false, false, false };
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
};
}
private Object[][] getData() {
return new Object[][] {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
}
}