Java 边界布局隐藏JPane
我使用的是一个边框布局,它似乎隐藏了一个JScrollPane,其中包含一个位于中间的JTextPane。如何强制显示中心JScrollPaneJava 边界布局隐藏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
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
并不真正关心最大/最小大小。在我的