2016-10-26 3 views
1

Also habe ich dieses Panel auf der Oberseite (NORTH) Seite meines Frames namens Menupanel positioniert. In diesem Panel habe ich zwei weitere Panels - topPanel und botPanel (rot und schwarz). In diesen beiden Panels befinden sich mehrere Buttons (in diesem Beispiel Labels). Ich würde gerne Schriftrollen (horizontal) auf den beiden Panels (Bot und Top) hinzufügen.2 JPanels mit Schriftrollen

// creating the frame 
    JFrame frame; 
    frame = new JFrame("Test"); 
    frame.setVisible(true); 
    frame.setLayout(new BorderLayout()); 
    frame.setSize(600, 400); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    // creating labels 

      JLabel label1 = new JLabel("TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT"); 
      JLabel label2 = new JLabel("TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2"); 
      JLabel label3 = new JLabel("TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3"); 

      JLabel label4 = new JLabel("TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT"); 
      JLabel label5 = new JLabel("TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2 TEXT2"); 
      JLabel label6 = new JLabel("TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3 TEXT3"); 

    // creating the main and menu panel 

    JPanel menupanel,topPanel,botPanel,mainpanel; 
    mainpanel = new JPanel(); 
    menupanel = new JPanel(new BorderLayout()); 
    topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); 
    botPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); 

    topPanel.setPreferredSize(new Dimension(300, 100)); 
    botPanel.setPreferredSize(new Dimension(300, 100)); 

    topPanel.add(label1); 
    topPanel.add(label2); 
    topPanel.add(label3); 

    botPanel.add(label4); 
    botPanel.add(label5); 
    botPanel.add(label6); 

    topPanel.setBackground(Color.RED); 
    botPanel.setBackground(Color.BLACK); 
    mainpanel.setBackground(Color.BLUE); 


    JScrollPane scrollT,scrollB; 
    scrollT = new JScrollPane(topPanel); 
    scrollT.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
    scrollB = new JScrollPane(botPanel); 
    scrollB.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
    menupanel.add(scrollT); 
    menupanel.add(scrollB); 

    menupanel.add(topPanel, BorderLayout.NORTH); 
    menupanel.add(botPanel, BorderLayout.SOUTH); 


    frame.add(mainpanel, BorderLayout.CENTER); 
    frame.add(menupanel, BorderLayout.NORTH); 
    frame.pack(); 

You can see an image here

Antwort

2

Sie Komponenten mehr als ein Behälter Zugabe:

scrollT = new JScrollPane(topPanel); // topPanel added to scroll pane 
scrollT.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
scrollB = new JScrollPane(botPanel); // botPanel added to scroll pane 
scrollB.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
menupanel.add(scrollT); // scrollpanes added to menupanel -- without Borderlayout constants? 
menupanel.add(scrollB); 

menupanel.add(topPanel, BorderLayout.NORTH); // topPanel added to menupanel 
menupanel.add(botPanel, BorderLayout.SOUTH); 

des Dies ist nicht erlaubt Für Swing-GUI.

Fügen Sie stattdessen topPanel und botPanel zu den JScrollPanes und den JScrollPanes zum Rest der GUI hinzu, aber fügen Sie topPanel und botPanel nicht erneut hinzu.

Ein weiteres Problem - Sie beschränken die Größe von topPanel und botPanel, so dass sie nicht scrollen können - vermeiden Sie dies. Wenn Sie die Größe eines Objekts einschränken möchten, führen Sie das Bildfenster oder die Bildlaufleiste des Bildlauffelds selbst aus.

z.B.

import java.awt.Dimension; 
import java.awt.GridLayout; 

import javax.swing.*; 

public class ScrollPaneFun2 extends JPanel { 

    private static final int PREF_W = 500; 

    public ScrollPaneFun2() { 
     JPanel topPanel = new JPanel(new GridLayout(0, 1)); 
     JPanel botPanel = new JPanel(new GridLayout(0, 1)); 

     for (int i = 0; i < 3; i++) { 
      JPanel innerTopPanel = new JPanel(new GridLayout(1, 0, 3, 0)); 
      JPanel innerBotPanel = new JPanel(new GridLayout(1, 0, 3, 0)); 
      for (int j = 0; j < 50; j++) { 
       innerTopPanel.add(new JLabel("Text " + (i + 1))); 
       innerBotPanel.add(new JLabel("Text " + (i + 1))); 
      } 
      topPanel.add(innerTopPanel); 
      botPanel.add(innerBotPanel); 
     } 

     JScrollPane topScrollPane = new JScrollPane(topPanel); 
     JScrollPane botScrollPane = new JScrollPane(botPanel); 
     topScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     botScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 

     setLayout(new GridLayout(0, 1)); 
     add(topScrollPane); 
     add(botScrollPane); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     if (isPreferredSizeSet()) { 
      return super.getPreferredSize(); 
     } 
     int height = super.getPreferredSize().height; 
     return new Dimension(PREF_W, height); 
    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("ScrollPaneFun2"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(new ScrollPaneFun2()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 
+0

in Ordnung Mann Dank ... jetzt es funktioniert ^^ – Rafail

+0

über was Sie über Ändern der Größe .. wie genau kann ich das scrollpane der Ansichtsfenster ändern? – Rafail

+0

die Höhe ist, was ich angeben muss – Rafail