2016-12-26 6 views
-2

私は、contentPaneにするJScrollPaneを追加し、JScrollPaneにするのJPanelを追加しようとしましたが、それは働いたdoesntの、私はここの周りに読んで、jpanelをスクロールするjava-how?

enter image description here

...ほとんどのpepleは、JScrollPaneにするのJPanelを追加すると言うが、私はまだそれをスクロールカントそれが今、このおかげで、そのサイズを変更することはできません、これはスクロールからそれを防ぐことができます -
package org.redeagle.growtopiamarket; 

import java.awt.EventQueue; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.awt.Image; 
import java.io.IOException; 
import java.net.URL; 
import java.net.URLConnection; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.SwingConstants; 
import javax.swing.border.EmptyBorder; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import javax.swing.ScrollPaneConstants; 

public class Main extends JFrame { 

    private JPanel contentPane; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        Main frame = new Main(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public Main() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 461, 540); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 
     contentPane.setLayout(new GridLayout(0, 1, 0, 0)); 

     JPanel panel = new JPanel(); 
     panel.setBounds(0, 0, 436, 493); 
     panel.setLayout(new GridLayout(0,1)); 

     JScrollPane sp = new JScrollPane(panel); 
     sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
     sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
     contentPane.add(sp); 
     setLocationRelativeTo(null); 
     setResizable(false); 
     try { 
      URL urls = new URL("https://growtopiajson.000webhostapp.com/gtpost.xml"); 
      URLConnection conn = urls.openConnection(); 
      DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
      Document doc = dBuilder.parse(conn.getInputStream()); 
      doc.getDocumentElement().normalize(); 

      NodeList nList = doc.getElementsByTagName("post"); 

      System.out.println("----------------------------"); 

      for (int temp = 0; temp < nList.getLength(); temp++) { 
       Node nNode = nList.item(temp); 

       System.out.println("\nCurrent Element :" + nNode.getNodeName()); 

       if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
        Element eElement = (Element) nNode; 
        String strImageURL = eElement.getElementsByTagName("imageurl").item(0).getTextContent(); 
        String strItemName = eElement.getElementsByTagName("itemname").item(0).getTextContent(); 
        String strItemDesc = eElement.getElementsByTagName("itemdesc").item(0).getTextContent(); 
        String strItemPrice = eElement.getElementsByTagName("itemprice").item(0).getTextContent(); 
        String strItemSeller = eElement.getElementsByTagName("itemseller").item(0).getTextContent(); 

        JPanel postPanel = new JPanel(); 
        postPanel.setBounds(10, 11, 425, 94); 
        panel.add(postPanel); 
        postPanel.setLayout(null); 

        JLabel image = new JLabel(""); 
        image.setBounds(0, 0, 90, 94); 
        Image images = null; 
        try { 
         URL urlss = new URL("http://www.growtopia.in/images/seeds/seed-info/house-entrance-block.png"); 
         images = ImageIO.read(urlss); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        image.setIcon(new ImageIcon(new ImageIcon(images).getImage().getScaledInstance(image.getWidth(), image.getHeight(), Image.SCALE_DEFAULT))); 
        postPanel.add(image); 

        JLabel itemName = new JLabel(strItemName); 
        itemName.setFont(new Font("Trebuchet MS", Font.BOLD, 21)); 
        itemName.setHorizontalAlignment(SwingConstants.CENTER); 
        itemName.setBounds(100, 0, 315, 32); 
        postPanel.add(itemName); 

        JLabel itemDesc = new JLabel("<html><p>" + strItemDesc + "</p></html>"); 
        itemDesc.setHorizontalAlignment(SwingConstants.LEFT); 
        itemDesc.setBounds(100, 28, 315, 40); 
        postPanel.add(itemDesc); 

        JLabel itemPrice = new JLabel(strItemPrice); 
        itemPrice.setBounds(100, 69, 138, 14); 
        postPanel.add(itemPrice); 

        JLabel itemSeller = new JLabel(strItemSeller); 
        itemSeller.setHorizontalAlignment(SwingConstants.RIGHT); 
        itemSeller.setBounds(248, 69, 167, 14); 
        postPanel.add(itemSeller); 

        panel.add(postPanel); 
       } 
      }  
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

答えて

1

あなたはいくつかの問題あなたはJPanelのの境界を設定しているあなたに

  • を敵に群がるを持っています。
  • nullレイアウトを使用しており、setBounds(...)はスウィングGUIとは危険で問題のあることですが、特にスクロール作業をしようとすると、スクロールを妨げる可能性があるコンポーネントの優先サイズが増えません。

JScrollPaneが正常に動作するためには、含まれるコンポーネントのサイズがJScrollPaneのビューポートより大きくなければならず、この状況では発生していません。

ヌルレイアウトを取り除いて、スクロールしたJPanelのサイズを制限しないようにしてから、もう一度やり直すことをお勧めします。

その他の問題:

  • あなたが無駄と不要な何か、についてループ内で再び同じ画像何度も再読み込みされているように見えます。 の画像を一度に読み込んでImageIconを作成し、変数に格納します。 Iconは、多くのJLabelで再利用できます。
  • 収集したデータを表示するためにJTableを使用することを検討することをお勧めします。
関連する問題