2012-08-10 108 views
1

我正在尝试创建一个应用程序,它可以让你创建和播放和危险!板。在创建GUI时,我似乎碰到了路障。 JPanel(scrollPanel1)似乎没有出现在我的JScrollPane(scrollPanel1)中。我非常肯定JScrollPane在那里,因为当我将滚动条策略设置为始终显示滚动条时,滚动条是可见的。但我不认为JPanel会在内部显示。我希望得到一些帮助。JPanel不显示在JScrollPane中

下面的代码:

import java.awt.*; 
import javax.swing.*; 

public class CreateNewBoardGUI { 
    private JFrame mainFrame; 
    private JPanel mainPanel; 
    private JPanel boardInfo; 
    private JLabel boardNameLabel; 
    private JTextField boardNameField; 
    private JTabbedPane catTab; 
    private JPanel tabPanel1; 
    private JPanel catNamePanel1; 
    private JLabel catNameLabel1; 
    private JTextField catNameField1; 
    private JScrollPane scrollPane1; 
    private JPanel scrollPanel1; 
    private JPanel qPanel1; 
    private JLabel qLabel1; 
    private JTextField qField1; 

    public void CreateNewBoardGUI(){ 
     mainFrame = new JFrame("Create new Jeopardy! board"); 
     mainPanel = new JPanel(); 
     boardInfo = new JPanel(); 
     boardNameLabel = new JLabel("What would you like this board to be called?"); 
     boardNameField = new JTextField(); 
     catTab = new JTabbedPane(); 
     tabPanel1 = new JPanel(); 
     catNamePanel1 = new JPanel(); 
     catNameLabel1 = new JLabel("What would you like the category to be called?"); 
     catNameField1 = new JTextField(); 
     scrollPane1 = new JScrollPane(); 
     scrollPanel1 = new JPanel(); 
     qPanel1 = new JPanel(); 
     qLabel1 = new JLabel("200 Point Question"); 
     qField1 = new JTextField(); 

     mainPanel.setLayout(new BorderLayout()); 
     boardInfo.setLayout(new BorderLayout()); 
     tabPanel1.setLayout(new BorderLayout()); 
     catNamePanel1.setLayout(new BorderLayout()); 
     scrollPanel1.setLayout(new BorderLayout()); 
     mainFrame.setSize(700, 900); 
     mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainFrame.setResizable(false); 
     mainFrame.setLocationRelativeTo(null); 
     mainFrame.setVisible(true); 

     qPanel1.add(qLabel1); 
     qPanel1.add(qField1); 
     scrollPanel1.add(qPanel1, BorderLayout.NORTH); 
     scrollPane1.add(scrollPanel1); 
     tabPanel1.add(scrollPane1, BorderLayout.CENTER); 
     catNamePanel1.add(catNameField1, BorderLayout.CENTER); 
     catNamePanel1.add(catNameLabel1, BorderLayout.NORTH); 
     tabPanel1.add(catNamePanel1, BorderLayout.NORTH); 
     mainPanel.add(catTab, BorderLayout.CENTER); 
     boardInfo.add(boardNameField, BorderLayout.CENTER); 
     boardInfo.add(boardNameLabel, BorderLayout.NORTH); 
     mainPanel.add(boardInfo, BorderLayout.NORTH); 
     mainFrame.add(mainPanel); 

     catTab.addTab("Category 1", tabPanel1); 





    } 
} 

在此先感谢。

+0

我有一个建议,不完全回答你的问题:要么JPanel的子类,要么将你的代码分隔成每个面板的方法。当你问这样的问题时,这会使你的代码更具可读性。 – 2012-08-10 23:00:37

回答

2

取出scrollPane1 = new JScrollPane();

,并添加这个代替(创建scrollPanel1实例后):

scrollPane1 = new JScrollPane(scrollPanel1);

这将迫使scrollPane1有scrollPanel1作为其 '视窗'。

看到的东西是怎么回事,你应该设置背景颜色: scrollPanel1.setBackground(Color.red);
添加不同颜色的潘内尔学习他们的行为。

它应该在您将其拉出标签面板后立即添加滚动条。

注:查看'空白布局'。应该更容易处理。

让我知道这是否有帮助,或者如果您仍然有任何麻烦。

0
package com.test; 

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

import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.ScrollPaneLayout; 
import javax.swing.border.LineBorder; 

public class MainGrid { 

    public static JPanel addPanel(int count) { 
     JPanel newPanel = new JPanel(); 
     newPanel.setLayout(new GridLayout(1, 5)); 
     JButton jb1 = new JButton("Button 1" + count); 
     jb1.setSize(200, 10); 
     newPanel.add(jb1); 
     JButton jb2 = new JButton("Button 2" + count); 
     jb2.setSize(200, 10); 
     newPanel.add(jb2); 
     JButton jb3 = new JButton("Button 3" + count); 
     jb3.setSize(200, 10); 
     newPanel.add(jb3); 
     JButton jb4 = new JButton("Button 4" + count); 
     jb4.setSize(200, 10); 
     newPanel.add(jb4); 
     JButton jb5 = new JButton("Button 5" + count); 
     jb5.setSize(200, 10); 
     newPanel.add(jb5); 
     newPanel.setBorder(new LineBorder(Color.black, 2)); 
     newPanel.setVisible(true); 
     return newPanel; 
    } 

    public static void main(String[] args) { 
     JFrame.setDefaultLookAndFeelDecorated(true); 
     JFrame frame = new JFrame("BoxLayout Test"); 
     JPanel mainPanel = new JPanel(); 
     mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.PAGE_AXIS)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JScrollPane scrollPane = new JScrollPane(mainPanel); 
     scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
     scrollPane.setLayout(new ScrollPaneLayout()); 
     mainPanel.add(addPanel(1)); 
     mainPanel.add(addPanel(2)); 
     mainPanel.add(addPanel(3)); 
     mainPanel.add(addPanel(4)); 
     mainPanel.add(addPanel(5)); 
     mainPanel.add(addPanel(6)); 
     mainPanel.add(addPanel(7)); 
     mainPanel.add(addPanel(8)); 
     mainPanel.add(addPanel(9)); 
     mainPanel.add(addPanel(10)); 
     mainPanel.add(addPanel(11)); 
     mainPanel.add(addPanel(12)); 
     mainPanel.add(addPanel(13)); 
     mainPanel.add(addPanel(14)); 
     mainPanel.add(addPanel(15)); 
     mainPanel.add(addPanel(1)); 
     mainPanel.add(addPanel(2)); 
     mainPanel.add(addPanel(3)); 
     mainPanel.add(addPanel(4)); 
     mainPanel.add(addPanel(5)); 
     mainPanel.add(addPanel(6)); 
     mainPanel.add(addPanel(7)); 
     mainPanel.add(addPanel(8)); 
     mainPanel.add(addPanel(9)); 
     mainPanel.add(addPanel(10)); 
     mainPanel.add(addPanel(11)); 
     mainPanel.add(addPanel(12)); 
     mainPanel.add(addPanel(13)); 
     mainPanel.add(addPanel(14)); 
     mainPanel.add(addPanel(15)); 
     scrollPane.setViewportBorder(
       BorderFactory.createLineBorder(Color.red)); 
     frame.add(scrollPane); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
}