2015-08-26 4 views
0

Я пытаюсь создать интерфейс с переменным размером. Однако в настоящее время, если размер всех компонентов больше размера окна, тогда они начинаются с
Извините! Поэтому я хотел бы добавить JScrollPane для отображения, когда размер окна больше не достаточен, чтобы избежать этого искажения. Я только начал с добавления JScrollPane (как показано на следующем рисунке), но он не работает, и я не уверен, что теперь менять.Добавление JScrollPane в мое окно

JScrollPane myScrollPane = new JScrollPane(); 
myWindow.getContentPane().add(myScrollPane, BorderLayout.CENTER); 

Вот простой пример того, что я пробовал:

static void one(String[] ari, JLabel sess_nb, Box boxy, long[] res){ 
    int p; 
    int length = ari.length; 
    Border cadre = BorderFactory.createLineBorder(Color.black); 
    Font police = new Font("Monospaced 13", Font.BOLD, 18); 
    Font police1 = new Font("Monospaced 13", Font.BOLD, 15); 
    Font font = new Font("Monospaced 13", Font.ITALIC, 13); 
    for (p=0;p<length;p++){ 
     Box boxz = Box.createVerticalBox(); 
     JLabel Rate = new JLabel("Rating Group "+r); 
     JLabel rg_reser = new JLabel(); 
     JLabel switsh = new JLabel("1"); 
     JLabel reser = new JLabel(); //in this label the resrvation for each update and each rating group will be stocked 
     JLabel consump = new JLabel(); //in this label will be stocked the consumption 
     //---------------------------------------------------- 

     //choice of MB or kB 
     JComboBox combo = new JComboBox(); 
     combo.addItem("Megabytes"); 
     combo.addItem("Bytes"); 
     combo.addItem("kilobytes"); 
     combo.addItem("Gigabytes"); 
     JLabel upload = new JLabel("Upload consumption:"); 
     JTextField upload_entry = new JTextField("7.5"); 
     JLabel download = new JLabel("Download consumption:"); 
     JTextField download_entry = new JTextField("7.5"); 
     JTextField total_entry = new JTextField(); 
     JLabel total = new JLabel("Total consumption:"); 
     JButton rg = new JButton("Next"); 
     JLabel update = new JLabel("Result here"); 
     boxz.add(Rate); 
     boxz.add(total); 
     boxz.add(total_entry); 
     boxz.add(upload); 
     boxz.add(upload_entry); 
     boxz.add(download); 
     boxz.add(download_entry); 
     boxz.add(combo); 
     boxz.add(rg); 
     boxz.add(update); 
     boxy.add(boxz); 
     scrollPane1.add(boxy);   
    } 

EDIT Вот новый тестовый код, который я попробовал, но он также не работает:

public Fenetre(){ 
    this.setTitle("Data Simulator"); 
    this.setSize(300, 300); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setLocationRelativeTo(null); 
    String hello = "hello"; 
    int number = 69; 
    JPanel content = new JPanel(); 
    content.setBackground(Color.LIGHT_GRAY); 
    //Box imad = Box.createHorizontalBox(); 
    JTextArea textArea = new JTextArea(10, 10); 
    JLabel imad = new JLabel(); 
    imad.setText(hello + " your favorite number is " + number + "\nRight?"); 
    JScrollPane scrollPane = new JScrollPane(); 
    setPreferredSize(new Dimension(450, 110)); 

    scrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_ALWAYS); 
    scrollPane.setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_ALWAYS); 
    scrollPane.setEnabled(true); 
    scrollPane.setWheelScrollingEnabled(true); 
    scrollPane.setViewportView(textArea); 
    scrollPane.setViewportView(imad); 
    add(scrollPane, BorderLayout.CENTER); 
    //--------------------------------------------- 
    //On ajoute le conteneur 
    content.add(imad); 
    content.add(textArea); 
    content.add(scrollPane); 
    this.setContentPane(content); 
    this.setVisible(true); 
    this.setResizable(false); 
} 

Появляется небольшая белая паника (я думаю, что это полоса прокрутки или панель прокрутки?), А компоненты в окне превышают размер окна, но ничего не происходит, когда я пытаюсь прокручивать (используя мышь или звон на белом пугании). Я не знаю, что не так.

+1

Завершите многопоставку с тем же вопросом и прекратите публикацию одного и того же вопроса под двумя идентификаторами пользователей: http://stackoverflow.com/questions/32218224/jscrollpane-in-java – camickr

ответ

1

Прокрутка может содержать только один компонент. Каждый раз, когда вы вызываете setViewportView(), вы заменяете ранее установленный компонент. Кроме того, компоненты могут иметь только один родитель. Когда вы позже позвоните content.add(textArea);, вы удалите компонент из прокрутки и поместите его в панель.

Итак, удалите неправильный код, сделать content быть иллюминатор ScrollPane и добавить ScrollPane к раме:

scrollPane.setHorizontalScrollBarPolicy(HORIZONTAL_SCROLLBAR_ALWAYS); 
scrollPane.setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_ALWAYS); 
scrollPane.setEnabled(true); 
scrollPane.setWheelScrollingEnabled(true); 
scrollPane.setViewportView(content); 
add(scrollPane, BorderLayout.CENTER); 
this.setVisible(true); 
this.setResizable(false); 
0

Как говорит DSH, JScrollPane может иметь только один вид. В качестве примечания к использованию Swing я всегда предпочитаю создавать панели наизнанку: создайте дочерние компоненты, затем выложите их в новый контейнер (init, затем макет). В противном случае вы можете потерять информацию о том, где компоненты добавлены слишком легко.

Я обновил свой пример (возможно) работать

public Fenetre(){ 
    super("Data Simulator"); 
    setSize(300, 300); 
    setPreferredSize(new Dimension(450, 110)); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 

    String hello = "hello"; 
    int number = 69; 

    // Create and initialise the child components - smallest details first 
    //Box imad = Box.createHorizontalBox(); 
    JTextArea textArea = new JTextArea(10, 10); 
    JLabel imad = new JLabel(); 
    imad.setText(hello + " your favorite number is " + number + "\nRight?"); 

    // Layout the content panel 
    JPanel content = new JPanel(); 
    content.setBackground(Color.LIGHT_GRAY); 
    content.add(imad); 
    content.add(textArea); 
    content.add(scrollPane); 

    JScrollPane scrollPane = new JScrollPane(content, HORIZONTAL_SCROLLBAR_ALWAYS, VERTICAL_SCROLLBAR_ALWAYS); 
    scrollPane.setEnabled(true); 
    scrollPane.setWheelScrollingEnabled(true); 

    add(scrollPane, BorderLayout.CENTER); 

    //--------------------------------------------- 
    // probably call "pack()" to fit the window to the content based on their preferred sizes 
    setVisible(true); 
    setResizable(false); 
} 

Я взял на себя смелость использовать (Component, INT, INT) конструктор JScrollPane и несколько других изменений.

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