java - JTable 大小问题

标签 java swing jtable gridbaglayout

我在使用 JTables 时遇到问题 我知道我的代码有点难以理解,而且也有点困惑,因为它来自一个相当大的程序。是的,我刚刚了解了 Java 命名约定,其中变量不能以大写字母开头。

final JFrame Menu = new JFrame("Crime Database 2013");
    Dimension screenSize0 = Menu.getToolkit().getScreenSize();
    Menu.setBounds(screenSize0.width / 4, screenSize0.height / 4,
            screenSize0.width / 2, screenSize0.height / 2);
    Menu.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Menu.setVisible(true);
    JPanel options = new JPanel(new GridBagLayout());
    GridBagConstraints a = new GridBagConstraints();
    Menu.add(options);
    JButton show = new JButton("Show all records");
    a.gridx = 0;
    a.gridy = 1;
    options.add(show, a);

    final JFrame Show = new JFrame("Crime Database 2013 - Show Records");
        Dimension screenSize3 = Show.getToolkit().getScreenSize();
        Show.setBounds(screenSize3.width/3 - 250, screenSize3.height/7,
                screenSize3.width - 150, screenSize3.height-200);
        Show.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Show.setLayout(new GridBagLayout());
        GridBagConstraints g = new GridBagConstraints();
        final JPanel data = new JPanel(new FlowLayout());
        JPanel sortselect = new JPanel(new GridBagLayout());
        GridBagConstraints h = new GridBagConstraints();
        g.gridx = 0;
        g.gridy = 2;
        Show.add(sortselect, g);
        g.gridx = 0;
        g.gridy = 0;
        g.gridheight = 2;
        g.gridwidth = 5;
        Show.add(data, g);
        JLabel label = new JLabel("Sort options");
        JRadioButton none = new JRadioButton("No Sort",true);
        JLabel frname = new JLabel("By First Name");
        JRadioButton frnameup = new JRadioButton("First name - Alphabetical");
        JRadioButton frnamedn = new JRadioButton("First name - Reverse-Alphabetical");
        JLabel lsname = new JLabel("By Last Name");
        JRadioButton lsnameup = new JRadioButton("Last name - Alphabetical");
        JRadioButton lsnamedn = new JRadioButton("Last name - Reverse-Alphabetical");
        JLabel byage = new JLabel("By Age");
        JRadioButton ageup = new JRadioButton("Age - Increasing");
        JRadioButton agedn = new JRadioButton("Age - Decreasing");
        JLabel bycrime = new JLabel("By Crime");
        JRadioButton crimeup = new JRadioButton("Crime - Alhabetically");
        JRadioButton crimedn = new JRadioButton("Crime - Reverse-Alphabetical");
        JLabel year = new JLabel("By Year of release");
        JRadioButton yearup = new JRadioButton("Expected Year of Release - First");
        JRadioButton yeardn = new JRadioButton("Expected Year of Release - Last");
        ButtonGroup sortgroup = new ButtonGroup();
        sortgroup.add(none);
        sortgroup.add(frnameup);
        sortgroup.add(frnamedn);
        sortgroup.add(lsnameup);
        sortgroup.add(lsnamedn);
        sortgroup.add(ageup);
        sortgroup.add(agedn);
        sortgroup.add(crimeup);
        sortgroup.add(crimedn);
        sortgroup.add(yearup);
        sortgroup.add(yeardn);
        h.insets = new Insets(10,10,10,10);
        h.gridx = 0;
        h.gridy = 2;
        sortselect.add(frname, h);
        h.gridx = 0;
        h.gridy = 3;
        sortselect.add(frnameup, h);
        h.gridx = 0;
        h.gridy = 4;
        sortselect.add(frnamedn, h);
        h.gridx = 1;
        h.gridy = 2;
        sortselect.add(lsname, h);
        h.gridx = 1;
        h.gridy = 3;
        sortselect.add(lsnameup, h);
        h.gridx = 1;
        h.gridy = 4;
        sortselect.add(lsnamedn, h);
        h.gridx = 2;
        h.gridy = 2;
        sortselect.add(byage, h);
        h.gridx = 2;
        h.gridy = 3;
        sortselect.add(ageup, h);
        h.gridx = 2;
        h.gridy = 4;
        sortselect.add(agedn, h);
        h.gridx = 3;
        h.gridy = 2;
        sortselect.add(bycrime, h);
        h.gridx = 3;
        h.gridy = 3;
        sortselect.add(crimeup, h);
        h.gridx = 3;
        h.gridy = 4;
        sortselect.add(crimedn, h);
        h.gridx = 4;
        h.gridy = 2;
        sortselect.add(year, h);
        h.gridx = 4;
        h.gridy = 3;
        sortselect.add(yearup, h);
        h.gridx = 4;
        h.gridy = 4;
        sortselect.add(yeardn, h);
        h.gridwidth = 5;
        h.gridheight = 1;
        h.gridx = 0;
        h.gridy =0;
        sortselect.add(label, h);
        h.gridx = 0;
        h.gridy = 1;
        sortselect.add(none, h);
            show.addActionListener(
                    new ActionListener() {
                        public void actionPerformed(ActionEvent e1) {
                            Menu.setVisible(false);
                            int entries = 0;
                            BufferedReader lines = null;
                            try {
                                lines = new BufferedReader(new FileReader("L:\\workspace\\new java\\sources\\c-database.txt"));
                            } catch (FileNotFoundException e) {
                                e.printStackTrace();
                            }
                            try {
                                while (lines.readLine() != null) {
                                    entries++;
                                }
                            } catch (IOException e2) {
                                e2.printStackTrace();
                            }
                            BufferedReader crimeinfo = null;
                            try {
                                crimeinfo = new BufferedReader(new FileReader("L:\\workspace\\new java\\sources\\c-database.txt"));
                            } catch (FileNotFoundException e) {
                                e.printStackTrace();
                            }
                            String namelist[] = new String[entries];
                            String agelist[] = new String[entries] ;
                            String crimelist[] = new String[entries];
                            String release[] = new String[entries];
                            for (int i = 0; i < entries; i++) {
                                String full = null;
                                try {
                                    full = crimeinfo.readLine();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                                String split[] = full.split(",");
                                namelist[i] = split[0];
                                agelist[i] = split[1];
                                crimelist[i] = split[2];
                                release[i] = split[3];
                            }
                            String firstnamelist[] = new String[entries];
                            String lastnamelist[] = new String[entries];
                            for (int i = 0; i < entries; i++) {
                                String namesplit[] = namelist[i].split(" ");
                                firstnamelist[i] = namesplit[0];
                                lastnamelist[i] = namesplit[1];
                            }
                            final String[] headers = {"First Name",
                                                "Last Name",
                                                "Age",
                                                "Crime committed",
                                                "Expected Year of Release"
                            };
                            final String[][] crimedata = new String[entries][5];
                            for (int i = 0; i < entries; i++) {
                                crimedata[i][0] = firstnamelist[i];
                                crimedata[i][1] = lastnamelist[i];
                                crimedata[i][2] = agelist[i];
                                crimedata[i][3] = crimelist[i];
                                crimedata[i][4] = release[i];
                                };
                            for (int i = 0; i < entries; i++) {
                                for (int j = 0; j < 5; j++) {
                                    System.out.println(headers[j]);
                                    System.out.println(crimedata[i][j]);
                                }
                            }
                            final JTable crimetable = new JTable(crimedata, headers);
                            JScrollPane scrollpane = new JScrollPane(crimetable);
                            crimetable.setAutoCreateRowSorter(true);
                            data.add(scrollpane);
                            Show.setVisible(true);
                        }
                    }
                );

我只是将这段代码放入 eclipse 中,然后取出所有单选按钮,它就工作了。虽然我不知道为什么

最佳答案

  1. JTable无法返回正确的DimensionPreferredSize,有三种方法

  2. table.setPreferredScrollableViewportSize(table.getPreferredSize()); 但请注意 small JTables with a few Rows and Columns too

  3. 要计算(部分)列和(部分)行的所需大小,然后以 table.setPreferredScrollableViewportSize(new Dimension(x, y) 形式传递此Dimension );

  4. 覆盖 JScrollPanegetPreferredSize

  5. 然后JFrame.pack(before JFrame.setVisible(true))计算屏幕上所需的大小

  6. JPanel在API中实现了FlowLayout,我建议更改为BorderLayout,然后CENTER区域的JScrollPane可以填充整个(可用)区域并且将使用 JFrame 调整大小,无法调整 FlowLayout 放置的 JComponent(及其容器)的大小

  7. 必须调用 data.revalidate()data.repaint()Show.pack() 作为最后的代码行而不是(删除此代码行)Show.setVisible(true);

  8. Show 重命名为 myFrame,将 show 重命名为 myButton

关于java - JTable 大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16067350/

相关文章:

java - 如何从 servlet 设置或访问 Tomcat 中的 JspCompilationContext?

java - 无法使用(开始事务)方法删除 SQLite 列

java - JTextArea 转移焦点

java - 将注释插入 JTree 时出现问题

java - 为复选框过滤 JTable 的按钮被选中

Java-数组索引越界异常

java - SQL和Java的日期比较

java - 将对象保存在 JTree 中但更改显示的名称(java swing)?

java - 列表选择监听器 valuechanged 触发超过 2 次

java - 如何在 JTable 单元格中使用 JLists?