Java JTable列标题不会显示,即使我有一个JScrollPane

Java JTable列标题不会显示,即使我有一个JScrollPane,java,swing,user-interface,jtable,jscrollpane,Java,Swing,User Interface,Jtable,Jscrollpane,我一直在尝试制作一个简单的游戏,其中一个按钮弹出一个包含玩家排行榜的窗口,但在搜索了一段时间并尝试了所有操作之后,我的专栏标题现在显示出来了 我使用的代码是: package hr.tvz.programiranje.java.windows; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import java

我一直在尝试制作一个简单的游戏,其中一个按钮弹出一个包含玩家排行榜的窗口,但在搜索了一段时间并尝试了所有操作之后,我的专栏标题现在显示出来了

我使用的代码是:

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);
    }
}
包hr.tvz.programiranje.java.windows;
导入java.awt.EventQueue;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入java.awt.BorderLayout;
导入javax.swing.GroupLayout;
导入javax.swing.GroupLayout.Alignment;
导入java.awt.Font;
导入java.util.HashMap;
导入java.util.LinkedHashMap;
导入java.util.Map;
导入java.awt.Color;
导入javax.swing.border.MatteBorder;
导入javax.swing.table.DefaultTableModel;
公共类排行榜表扩展JFrame{
私有JFrame FRMLEADERBARDS;
私人JTable排行榜_表;
公共作废显示表格屏幕(){
invokeLater(新的Runnable(){
公开募捐{
试一试{
FRMLEADERBARDS.setVisible(真);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
公共排行榜表(){
初始化();
}
@抑制警告(“串行”)
私有void初始化(){
frmLeaderboards=新JFrame();
frmLeaderboards.setTitle(“排行榜”);
FRMLEADERBORDS.立根(100100485,218);
frmLeaderboards.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
HashMap Leadboard_map=MainWindow.get_Leadboard_map();
int map_size=排行榜_map.size();
对象[][]数据=新对象[地图大小][3];
//对地图进行排序
LinkedHashMap sorted=新LinkedHashMap();
排行榜\地图入口集()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEachOrdered(x->sorted.put(x.getKey(),x.getValue());
//将地图数据写入矩阵
int i=0;
for(字符串键:sorted.keySet()){
数据[i][0]=i+1;
数据[i][1]=键;
数据[i++][2]=排序的.get(键);
}
字符串[]列名称={
“等级”,
“姓名”,
“时间”
};
排行榜表格=新的JTable(新的DefaultTableModel(数据、列名称){
boolean[]columnEditables=新的boolean[]{false,false,false};
公共布尔值可编辑(int行,int列){
返回columnEditables[列];
}
});
//滚动窗格
JScrollPane scrollPane=新的JScrollPane(排行榜表格);
滚动窗格.立根(36,37,407,79);
getContentPane().add(滚动窗格);
排行榜_table.setFont(新字体(“Consolas”,Font.PLAIN,12));
GroupLayout GroupLayout=新的GroupLayout(frmLeaderboards.getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(排行榜表格,GroupLayout.DEFAULT\u大小,434,Short.MAX\u值)
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(排行榜表格,GroupLayout.DEFAULT\u大小,461,Short.MAX\u值)
);
frmLeaderboards.getContentPane().setLayout(groupLayout);
}
}
从我所读到的内容来看,我需要将其附加到JScrollPane中,但这不起作用。我的窗口的设计如下所示:

这就是我一直得到的:

编辑:问题已解决,新代码为:

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];
            }
        };
    }
}
包hr.tvz.programiranje.java.windows;
导入java.awt.EventQueue;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入java.awt.BorderLayout;
导入javax.swing.GroupLayout;
导入javax.swing.GroupLayout.Alignment;
导入java.awt.Font;
导入java.util.HashMap;
导入java.util.LinkedHashMap;
导入java.util.Map;
导入java.awt.Color;
导入javax.swing.border.MatteBorder;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.ScrollPaneConstants;
导入javax.swing.border.BevelBorder;
公共类排行榜表扩展JFrame{
私有JFrame FRMLEADERBARDS;
私人JTable排行榜_表;
公共作废显示表格屏幕(){
invokeLater(新的Runnable(){
公开募捐{
试一试{
FRMLEADERBARDS.setVisible(真);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
公共排行榜表(){
初始化();
}
@抑制警告(“串行”)
私有void初始化(){
frmLeaderboards=新JFrame();
frmLeaderboards.setTitle(“排行榜”);
FRMLEADERBORDS.立根(100100485,218);
frmLeaderboards.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
HashMap Leadboard_map=MainWindow.get_Leadboard_map();
int map_size=排行榜_map.size();
对象[][]数据=新对象[地图大小][3];
//对地图进行排序
LinkedHashMap sorted=新LinkedHashMap();
排行榜\地图入口集()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEachOrdered(x->sorted.put(x.getKey(),x.getValue());
//将地图数据写入矩阵
int i=0;
for(字符串键:sorted.keySet()){
数据[i][0]=i+1;
数据[i][1]=键;
数据[i++][2]=排序的.get(键);
}
字符串[]列名称={
“等级”,
“姓名”,
“时间”
};
排行榜表格=新的JTable(新的DefaultTableModel(数据、列名称){
boolean[]columnEditables=新的boolean[]{false,false,false};
公共布尔isCel
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)}
            };
    }
}