Java 边界布局隐藏JPane

Java 边界布局隐藏JPane,java,swing,layout,netbeans,border-layout,Java,Swing,Layout,Netbeans,Border Layout,我使用的是一个边框布局,它似乎隐藏了一个JScrollPane,其中包含一个位于中间的JTextPane。如何强制显示中心JScrollPane package net.bounceme.dur.usenet.swing; import java.util.Observable; import java.util.Observer; import java.util.logging.Logger; import javax.mail.Folder; import javax.swing.Lis

我使用的是一个边框布局,它似乎隐藏了一个JScrollPane,其中包含一个位于中间的JTextPane。如何强制显示中心JScrollPane

package net.bounceme.dur.usenet.swing;

import java.util.Observable;
import java.util.Observer;
import java.util.logging.Logger;
import javax.mail.Folder;
import javax.swing.ListModel;
import net.bounceme.dur.usenet.controller.Controller;
import net.bounceme.dur.usenet.controller.MessageBean;
import net.bounceme.dur.usenet.controller.MessagesDefaultListModel;

public class MessageSelect extends javax.swing.JPanel implements Observer {

    private static final Logger LOG = Logger.getLogger(MessageSelect.class.getName());
    private Controller controller = Controller.getInstance();
    private ListModel messages = new MessagesDefaultListModel();
    private MessageBean messageBean = new MessageBean();

    public MessageSelect() {
        controller.addObserver(this);
        initComponents();
        messageContent.setText("hello world");
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        center = new javax.swing.JScrollPane();
        messageContent = new javax.swing.JTextPane();
        south = new javax.swing.JPanel();
        commentJButton = new javax.swing.JButton();
        west = new javax.swing.JScrollPane();
        messagesJList = new javax.swing.JList();

        setLayout(new java.awt.BorderLayout());

        messageContent.setContentType("text/html"); // NOI18N
        center.setViewportView(messageContent);

        add(center, java.awt.BorderLayout.CENTER);

        south.setLayout(new java.awt.BorderLayout());

        commentJButton.setText("comment");
        commentJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                commentJButtonActionPerformed(evt);
            }
        });
        south.add(commentJButton, java.awt.BorderLayout.CENTER);

        add(south, java.awt.BorderLayout.SOUTH);

        messagesJList.setModel(new javax.swing.AbstractListModel() {
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            public int getSize() { return strings.length; }
            public Object getElementAt(int i) { return strings[i]; }
        });
        messagesJList.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                messagesJListMouseReleased(evt);
            }
        });
        messagesJList.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                messagesJListKeyReleased(evt);
            }
        });
        west.setViewportView(messagesJList);

        add(west, java.awt.BorderLayout.WEST);
    }// </editor-fold>

    private void commentJButtonActionPerformed(java.awt.event.ActionEvent evt) {                                               
        LOG.fine("button clicked" + messageBean);
    }                                              

    private void messagesJListKeyReleased(java.awt.event.KeyEvent evt) {                                          
        userSelectedRow();
    }                                         

    private void messagesJListMouseReleased(java.awt.event.MouseEvent evt) {                                            
        userSelectedRow();
    }                                           
    // Variables declaration - do not modify
    private javax.swing.JScrollPane center;
    private javax.swing.JButton commentJButton;
    private javax.swing.JTextPane messageContent;
    private javax.swing.JList messagesJList;
    private javax.swing.JPanel south;
    private javax.swing.JScrollPane west;
    // End of variables declaration

    @Override
    @SuppressWarnings("unchecked")
    public void update(Observable o, Object arg) {
        LOG.fine("trying folder:  " + arg);
        //Folder folder = null;
        try {
            Folder folder = (Folder) arg;
            messages = new MessagesDefaultListModel(folder);
            LOG.fine("how many messages? " + messages.getSize());
            messagesJList.setModel(messages);
            LOG.fine("loaded messages..");
        } catch (Exception e) {  //err, class cast exception?
            LOG.fine("not a valid folder " + arg);
        }
    }

    private void userSelectedRow() {
        messageBean = (MessageBean) messagesJList.getSelectedValue();
        LOG.fine(messageBean.toString());
        messageContent.setText(messageBean.getContent());
        LOG.fine("..gotMessageBean: " + messageBean);
    }
}
package net.bounceme.dur.usenet.swing;
导入java.util.Observable;
导入java.util.Observer;
导入java.util.logging.Logger;
导入javax.mail.Folder;
导入javax.swing.ListModel;
导入net.bounceme.dur.usenet.controller.controller;
导入net.bounceme.dur.usenet.controller.MessageBean;
导入net.bounceme.dur.usenet.controller.MessagesDefaultListModel;
公共类MessageSelect扩展了javax.swing.JPanel实现了Observer{
私有静态最终记录器LOG=Logger.getLogger(MessageSelect.class.getName());
private Controller=Controller.getInstance();
private ListModel messages=新消息DefaultListModel();
私有MessageBean MessageBean=新MessageBean();
公共消息选择(){
controller.addObserver(this);
初始化组件();
setText(“你好世界”);
}
/**
*从构造函数中调用此方法来初始化表单。
*警告:不要修改此代码。此方法的内容始终为
*由表单编辑器重新生成。
*/
@抑制警告(“未选中”)
// 
私有组件(){
center=newjavax.swing.JScrollPane();
messageContent=newjavax.swing.JTextPane();
south=newjavax.swing.JPanel();
commentJButton=newjavax.swing.JButton();
west=newjavax.swing.JScrollPane();
messagesJList=newjavax.swing.JList();
setLayout(新java.awt.BorderLayout());
messageContent.setContentType(“text/html”);//NOI18N
center.setViewportView(messageContent);
添加(center,java.awt.BorderLayout.center);
setLayout(新java.awt.BorderLayout());
setText(“comment”);
commentJButton.addActionListener(新java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
commentJButtonActionPerformed(evt);
}
});
add(commentJButton,java.awt.BorderLayout.CENTER);
添加(south,java.awt.BorderLayout.south);
messagesJList.setModel(新的javax.swing.AbstractListModel(){
字符串[]字符串={“项目1”、“项目2”、“项目3”、“项目4”、“项目5”};
public int getSize(){return strings.length;}
公共对象getElementAt(inti){返回字符串[i];}
});
messagesJList.addMouseListener(新java.awt.event.MouseAdapter(){
public void mouseereleased(java.awt.event.MouseEvent evt){
消息ListMouseReleased(evt);
}
});
messagesJList.addKeyListener(新java.awt.event.KeyAdapter(){
public void keyReleased(java.awt.event.KeyEvent evt){
已发布消息ListKeyReleased(evt);
}
});
setViewportView(消息列表);
添加(west,java.awt.BorderLayout.west);
}// 
private void commentJButtonActionPerformed(java.awt.event.ActionEvent evt){
LOG.fine(“点击按钮”+messageBean);
}                                              
私有无效消息ListKeyReleased(java.awt.event.KeyEvent evt){
userSelectedRow();
}                                         
私有无效消息ListMouseReleased(java.awt.event.MouseEvent evt){
userSelectedRow();
}                                           
//变量声明-不修改
私有javax.swing.JScrollPane中心;
私有javax.swing.JButton commentJButton;
私有javax.swing.JTextPane messageContent;
私有javax.swing.JList消息列表;
私有javax.swing.JPanel south;
私有javax.swing.JScrollPane-west;
//变量结束声明
@凌驾
@抑制警告(“未选中”)
公共无效更新(可观察o,对象arg){
LOG.fine(“正在尝试文件夹:“+arg”);
//文件夹=null;
试一试{
文件夹=(文件夹)参数;
messages=新MessagesDefaultListModel(文件夹);
LOG.fine(“多少条消息?”+messages.getSize());
messagesJList.setModel(消息);
LOG.fine(“加载的消息…”);
}捕获(异常e){//err,类强制转换异常?
LOG.fine(“不是有效文件夹”+arg);
}
}
私有void userSelectedRow(){
messageBean=(messageBean)messagesJList.getSelectedValue();
LOG.fine(messageBean.toString());
messageContent.setText(messageBean.getContent());
LOG.fine(“…gotMessageBean:+messageBean”);
}
}
下面的第一个选项卡允许选择一个USENET组,一些组比其他组表现更好。android组的独特之处在于常规大小的窗口不显示中心JScrollPane:

但最大化窗口可以使中心JSCrollPane正确显示:


我认为是
JList
将自己的大小调整到了最长的行。试一试

messageList.setPrototypeCellValue("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

确定宽度。您还可以尝试为保存
JList
JScrollPane
设置首选宽度,并启用水平滚动。

我没有问题。确保在主机架上调用pack(如果尚未指定大小)。如果您真的被卡住了,请尝试设置
滚动窗格的
首选大小
属性。我已经尝试过使用JSCrollPane的最小大小,但我也会查看首选大小。有时,最大化Java窗口将允许显示中心JScrollPane,但这是100%。
BorderLayout
并不真正关心最大/最小大小。在我的