2016-10-21 4 views
2

にするJScrollPaneを追加I次のコードを持っている: メイン:はJListの

package PackageMain; 

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.WindowConstants; 

public class Main { 

public static JFrame frame = new JFrame("Window"); 
public static PanelOne p1; 
public static PanelTwo p2; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
       frame.setBounds(100, 100, 800, 600); 
       p1 = new PanelOne(); 
       p2 = new PanelTwo(); 
       frame.setVisible(true); 
      } catch(Exception e){ 

      } 
     } 
    }); 
} 

とクラス2:私が表示されるようにするJScrollPaneを取得するために原料の束を試した

package PackageMain; 

import java.awt.Color; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.DefaultListModel; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.ScrollPaneConstants; 
import javax.swing.event.ListSelectionEvent; 
import javax.swing.event.ListSelectionListener; 

public class PanelOne{ 

public PanelOne(){ 
    loadScreen(); 
} 

public void loadScreen(){ 
    JPanel p1 = new JPanel(); 
    DefaultListModel model = new DefaultListModel<String>(); 
    JList list = new JList<String>(model); 
    // 
    JScrollPane scroll = new JScrollPane(list); 
    list.setPreferredSize(null); 
      scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS; 
    scroll.setViewportView(list); 
    // 
    list.addListSelectionListener(new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent arg0) { 
      System.out.println("You selected " + list.getSelectedValue()); 
     } 
    }); 
    p1.add(list); 
    Main.frame.add(p1); 
    Main.frame.revalidate(); 
    Main.frame.repaint(); 
    for (int i = 0; i < 100; i++){ 
     model.addElement("test"); 
    } 
} 

をJList上で、しかしそれは欲しくない。私の最高の推測では、モデルは物事をねじ込んでいるということですが、これは単純化されたバージョンであり、モデルはそこに存在する必要があります。

答えて

2
JScrollPane scroll = new JScrollPane(list); 

あなたは正しいことにJScrollPaneにするJListを追加します。

p1.add(list); 

しかし、その後、あなたはJPanelの, which is incorrect. A component can only have a single parent, so the JListのis removed from the JScrollPane`にJListを追加します。

あなたはJPanelJScrollPaneを追加する必要があります。

p1.add(scroll); 
+0

偉大な心は似て考える1+ –

2

JScrollPaneのビューポートには、あまりにも多くのコンポーネントにリストを追加しています - OKですが、もp1 JPanelにはOKです。それをビューポートにのみ追加し、GUIにJScrollPaneを追加します(必要に応じてp1)。また

  • あなたがやっているようコンストラクタにビューポートビューで、二回にJScrollPaneにするJListを追加する必要はありません、一回で十分です。
  • list.setPreferredSize(null); ????
0

だけではなくListよりも、フレームにScroll Paneを追加します。

変更以下のコードを使用して行:

Main.frame.add(scroll);