2013-04-17 4 views
0

У меня проблема с JTables Я знаю, что мой код немного трудно понять, он также немного перепутался, потому что он исходит из довольно большой программы. И да, я только что узнал о соглашении об именах java, в котором вы не запускаете переменную с заглавной буквой.JTable вопрос о размере

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); 
         } 
        } 
       ); 

Я просто поставить этот код здесь в затмение, а затем вынул все кнопки радио, и Сорт работал. Хотя я не знаю, почему

+1

'И да, я только что узнал о соглашении об именах java, в котором вы не начинаете переменную с заглавной буквы', - и все же ваш код по-прежнему не соответствует соглашениям. Почему мы должны смотреть на него, когда вы не можете даже потратить 1 минуту на глобальное изменение всего кода? Мало того, что вы все еще не разместили SSCCE, как вы просили сделать это в своем последнем сообщении по этой теме. Поскольку вы не можете беспокоиться, чтобы сделать нашу жизнь проще, я буду продолжать игнорировать ваши вопросы. Я удивлен, что другие продолжают помогать. – camickr

ответ

3
  1. JTable не возвращает правильный Dimension или PreferredSize, есть три способа

  2. table.setPreferredScrollableViewportSize(table.getPreferredSize()); но уведомление для small JTables with a few Rows and Columns too

  3. для расчета требуемого размера для (часть) столбцов и (части) строк, затем передайте это Dimension в форме table.setPreferredScrollableViewportSize(new Dimension(x, y));

  4. переопределения getPreferredSize для JScrollPane

  5. затем JFrame.pack(before JFrame.setVisible(true)) для расчета требуемого размера на экране

  6. JPanel имеет FlowLayout реализованный в API, я бы предложить, чтобы изменить BorderLayout, то JScrollPane в центре площади может заполнить все (имеется) площадь и будет изменяемой с JFrame, не представляется возможным, чтобы изменить размер JComponent (вместе с его контейнером) уложена на FlowLayout

  7. должна позвонить data.revalidate(), data.repaint() и Show.pack() как последние строки кода вместо (удалить эту строку кода) Show.setVisible (true);

  8. переименования Show в myFrame и show к myButton

+0

Переопределить 'getPreferredScrollableViewportSize', для [пример] (http://stackoverflow.com/a/14429388/230513). – trashgod

+0

@trashgod Что именно делает setpreferredScrollableViewpotSize? Это просто заставляет таблицу всегда быть таким? что такое вся штука? Я этого раньше не видел. –

+0

И как я могу пересмотреть вещи? –

2

Что именно делает setPreferredScrollableViewportSize делать? Это просто заставляет таблицу всегда быть таким? Что такое вся штука?

Метод getPreferredScrollableViewportSize() определен в интерфейсе Scrollable, обсуждается в Implementing a Scrolling-Savvy Client. Вместо настройка предпочтительного размера, вы можете переопределить getPreferredScrollableViewportSize(), чтобы изменить значение по умолчанию. Показана высота, кратная getRowHeight(), here. Подробнее о предпочтительном размере можно найти here. Удобно, метод pack() «Заставляет этот размер Window соответствовать размерам и макетам своих подкомпонентов».

+0

Ohhhhhhhhhh спасибо, это замечательно! –

Смежные вопросы