2015-06-16 6 views
1

Итак, я пытаюсь создать настраиваемый компонент, чтобы установить размер области прокрутки. Вот часть с панелью прокрутки:Пользовательский JComponent для установки предпочтительного размера прокручиваемого видового экрана

JScrollPane scrollPane = new JScrollPane(leftTop); 
customScroll t1 = new customScroll(); 
scrollPane.add(t1); 
left.add(scrollPane); 

leftTop - это вложенная панель внутри слева. Вот мой класс для customScroll который является пользовательским компонентом я делаю, так что я могу установить размер панели скроллинга:

public class customScroll extends JComponent implements Scrollable { 

    public customScroll() { 
     getPreferredScrollableViewportSize(); 
    } 

    @Override 
    public Dimension getPreferredScrollableViewportSize() { 
     return(new Dimension(266,300)); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
    } 

    @Override 
    public int getScrollableBlockIncrement(Rectangle visibleRect, 
      int orientation, int direction) { 
     return 0; 
    } 

    @Override 
    public boolean getScrollableTracksViewportHeight() { 
     return false; 
    } 

    @Override 
    public boolean getScrollableTracksViewportWidth() { 
     return false; 
    } 

    @Override 
    public int getScrollableUnitIncrement(Rectangle visibleRect, 
      int orientation, int direction) { 
     return 0; 
    } 
} 

Как установить предпочтительный прокручивать размер?

+0

Пожалуйста, обратите внимание на Java именования - http://www.oracle.com/technetwork/java/codeconventions -135099.html - особенно названия классов; Также укажите, с какими конкретными проблемами вы сталкиваетесь? –

ответ

1

Обеспечить сеттера ...

public void setPreferredScrollableViewportSize(Dimension size) { 
    this.preferredScrollableViewportSize = size; 
} 

Теперь, очевидно, ваш getPreferredScrollableViewportSize нужно будет возвращать это значение ...

public class CustomScroll extends JComponent implements Scrollable { 

    private Dimension preferredScrollableViewportSize = new Dimension(266, 300); 

    public CustomScroll() { 
    } 

    public void setPreferredScrollableViewportSize(Dimension size) { 
     this.preferredScrollableViewportSize = size; 
    } 

    @Override 
    public Dimension getPreferredScrollableViewportSize() { 
     return preferredScrollableViewportSize; 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
    } 

    @Override 
    public int getScrollableBlockIncrement(Rectangle visibleRect, 
        int orientation, int direction) { 
     return 64; 
    } 

    @Override 
    public boolean getScrollableTracksViewportHeight() { 
     return false; 
    } 

    @Override 
    public boolean getScrollableTracksViewportWidth() { 
     return false; 
    } 

    @Override 
    public int getScrollableUnitIncrement(Rectangle visibleRect, 
        int orientation, int direction) { 
     return 64; 
    } 
} 

Следует также установить это, прежде чем завернуть в вашем JScrollPane, это будет просто легче управлять, иначе вам понадобится invalidate контейнер, в котором находится JScrollPane

Yo у хотели бы иметь чтения через Code Conventions for the Java TM Programming Language, он будет делать это проще для людей, чтобы читать ваш код и для вас, чтобы читать другие

Но это все равно будет просто получить предпочтительный размер

Нет это не будет, он будет использовать preferredScrollableViewportSize (если вы упаковку в пределах JScrollPane

моя прокрутка панель подстраивается, что в нем так просто растет с кнопками добавили

Тогда вы делаете что-то неправильно

JScrollPane scrollPane = new JScrollPane(leftTop);  
customScroll t1 = new customScroll(); 
// This is wrong... 
scrollPane.add(t1); 
left.add(scrollPane); 

Вы никогда не должны ничего добавлять к JScrollPane, это не то, как они работают, вместо этого, вы должны заключить компонент в ней

leftTop t1 = new CustomScroll(); 
JScrollPane scrollPane = new JScrollPane(leftTop);  
left.add(scrollPane); 

или некоторые такие ...

Я хочу, чтобы он оставался фиксированным, поэтому мне нужно явно указать размер, который он может ВЗ отклоняются от

Да, это то, что preferredScrollableViewportSize делает

ExampleLayout

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.Rectangle; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.Scrollable; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class JavaApplication57 { 

    public static void main(String[] args) { 
     new JavaApplication57(); 
    } 

    public JavaApplication57() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      CustomScroll comp = new CustomScroll(); 
      comp.setPreferredScrollableViewportSize(new Dimension(100, 100)); 

      comp.setLayout(new GridBagLayout()); 
      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridwidth = GridBagConstraints.REMAINDER; 
      gbc.weightx = 1; 
      gbc.insets = new Insets(5, 10, 10, 5); 
      for (int index = 0; index < 100; index++) { 

       JButton btn = new JButton("Hello world " + index); 
       comp.add(btn, gbc); 

      } 

      add(new JScrollPane(comp)); 
     } 

    } 

    public class CustomScroll extends JComponent implements Scrollable { 

     private Dimension preferredScrollableViewportSize = new Dimension(266, 300); 

     public CustomScroll() { 
     } 

     public void setPreferredScrollableViewportSize(Dimension size) { 
      this.preferredScrollableViewportSize = size; 
     } 

     @Override 
     public Dimension getPreferredScrollableViewportSize() { 
      return preferredScrollableViewportSize; 
     } 

     @Override 
     public void paintComponent(Graphics g) { 
      super.paintComponent(g); 
     } 

     @Override 
     public int getScrollableBlockIncrement(Rectangle visibleRect, 
         int orientation, int direction) { 
      return 64; 
     } 

     @Override 
     public boolean getScrollableTracksViewportHeight() { 
      return false; 
     } 

     @Override 
     public boolean getScrollableTracksViewportWidth() { 
      return false; 
     } 

     @Override 
     public int getScrollableUnitIncrement(Rectangle visibleRect, 
         int orientation, int direction) { 
      return 64; 
     } 
    } 
} 
+0

Но это все равно будет иметь желаемый размер, моя панель прокрутки настраивается на то, что в нем, поэтому оно просто растет с добавленными кнопками. Я хочу, чтобы он оставался фиксированным размером, поэтому мне нужно явно указать размер, от которого он не может отклониться. –

+0

nvm Я отставлен и не могу прочитать страницу документов. +1 за ваш ответ, хотя LOL. –

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

  • Нет связанных вопросов^_^