0

我在使用 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 中,然后取出所有单选按钮,它有点工作。虽然我不知道为什么

4

2 回答 2

3
  1. JTable不能正确返回Dimensionor PreferredSize,有三种方式

  2. table.setPreferredScrollableViewportSize(table.getPreferredSize());但也要注意带有几行和几列的小型 JTable

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

  4. 覆盖getPreferredSizeJScrollPane

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

  6. JPanel已经FlowLayout在API中实现了,我建议改成BorderLayout,然后CENTER区域的JScrollPane可以填满整个(可用)区域,并且可以用JFrame调整大小,不能调整FlowLayout铺设的JComponent(连同它的容器)的大小

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

  8. 重命名ShowmyFrame_showmyButton

于 2013-04-17T18:39:42.447 回答
2

具体是setPreferredScrollableViewportSize做什么的?它只是强迫桌子总是那么大吗?什么是整包东西?

getPreferredScrollableViewportSize()方法在Scrollable接口中定义,在实现 Scrolling-Savvy 客户端中进行了讨论。您可以覆盖以更改默认值,而不是设置首选大小。此处说明getPreferredScrollableViewportSize()了将高度设为倍数。更多关于首选尺寸的信息可以在这里找到。方便的是,该方法“使其大小适合其子组件的首选大小和布局”。getRowHeight()pack()Window

于 2013-04-17T20:52:13.363 回答