Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在更改我的JScrollPanel上的大小时会更改JPanel中的对象(JPanel)?_Java_Swing_Jpanel_Jscrollpane - Fatal编程技术网

Java 为什么在更改我的JScrollPanel上的大小时会更改JPanel中的对象(JPanel)?

Java 为什么在更改我的JScrollPanel上的大小时会更改JPanel中的对象(JPanel)?,java,swing,jpanel,jscrollpane,Java,Swing,Jpanel,Jscrollpane,每当我更改这行代码时: scrollPane.setSize(new Dimension(500, 500)); 到 我的JPanel中的我的对象(JPanel)发生了变化 查看结构的一种方法是: Objects: JScrollPanel( JPanel ( JPanel( ) ) ); names: scrollPanel ( tableCollection ( table1( ) ) ) 对象:JScrollPanel(J

每当我更改这行代码时:

scrollPane.setSize(new Dimension(500, 500));

我的JPanel中的我的对象(JPanel)发生了变化

查看结构的一种方法是:

Objects: JScrollPanel( JPanel ( JPanel( ) ) ); names: scrollPanel ( tableCollection ( table1( ) ) ) 对象:JScrollPanel(JPanel(JPanel()); 名称:scrollPanel(tableCollection(table1()))
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Insets;
导入java.awt.Toolkit;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
公共类测试扩展了javax.swing.JFrame{
公共测试(){
初始化组件();
setMainFrameSize();
添加滚动窗格();
addTables();
}
@抑制警告(“未选中”)
//                           
私有组件(){
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addComponentListener(新java.awt.event.ComponentAdapter(){
public void ComponentResistized(java.awt.event.ComponentEvent evt){
FormComponentResistized(evt);
}
});
javax.swing.GroupLayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,400,短。最大值)
);
layout.setVerticalGroup(
createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,300,短。最大值)
);
包装();
}//                         
私有void formComponentResistized(java.awt.event.ComponentEvent evt){
setScrollPaneSize();
setTableSize();
}                                     
公共静态void main(字符串参数[]){
//
/*如果Nimbus(在JavaSE6中引入)不可用,请使用默认的外观。
*详情请参阅http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
*/
试一试{
for(javax.swing.UIManager.LookAndFeelInfo:javax.swing.UIManager.getInstalledLookAndFeels()){
if(“Nimbus”.equals(info.getName())){
setLookAndFeel(info.getClassName());
打破
}
}
}捕获(ClassNotFoundException ex){
getLogger(testing.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}catch(实例化异常){
getLogger(testing.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}捕获(非法访问例外){
getLogger(testing.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}catch(javax.swing.UnsupportedLookAndFeelException ex){
getLogger(testing.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}
//
invokeLater(new Runnable()){
公开募捐{
新测试().setVisible(真);
}
});
}
JPanel tableCollection=新的JPanel();
JScrollPane scrollPane=新的JScrollPane(tableCollection,JScrollPane.VERTICAL\u SCROLLBAR\u根据需要,
JScrollPane.水平滚动条(根据需要);
//变量声明-不修改
//变量结束声明
void setMainFrameSize(){
此设置最小尺寸(新尺寸(800600));
维度scnDimension=Toolkit.getDefaultToolkit().getScreenSize();
Insets scninets=Toolkit.getDefaultToolkit().getScreenInsets(getGraphicsConfiguration());
此.setSize(scnDimension.width,scnDimension.height-(scnSets.bottom+scnSets.top));
}
void addScrollPane(){
滚动窗格。背景(颜色。红色);
setScrollPaneSize();
添加(滚动窗格);
addTableCollection();
}
void setScrollPaneSize(){
滚动窗格。设置大小(新尺寸(500500));
滚动窗格。设置位置(0,条形高度);
}
void addTableCollection(){
tableCollection.setBackground(新颜色(189195199));
setTableCollectionSize();
}
void setTableCollectionSize(){
setPreferredSize(新维度(550550));
}
void addTables(){
表1.挫折背景(新颜色(52152219));
tableCollection.add(表1);
}
void setTableSize(){
int tableHeight=tableCollection.getHeight()-tableHeightOffset*2;
表1.设置尺寸(350,桌面高度);
表1.设置位置(0,0);
}
int barHeight=50;
int TABLEHIGHTOFFSET=50;
int tableWidthOffset=50;
int-nTables=5;
JPanel table1=新的JPanel();
}

只需添加
tableCollection.setLayout(null)
因此它可以在JPanel中处理定制大小的JPanel

谢谢你,乔纳斯

停止尝试使用
setLocation
setMinimum/Preferred/MaximumSize
,您的容器应该在适当的布局管理器的控制下。我也会避免
GroupLayout
,因为手动修改并不容易,但这就是我“为什么在JScrollPanel上滚动JPanel时会更改JPanel中的对象?”因为您正在与布局管理器斗争OK,我需要完全控制布局中的对象,我无法避免。。。我将修改代码,使其更具可读性,并重新制定问题。。。感谢4你的快速响应像素完美的布局在现代用户界面的是一个幻想。您无法控制渲染过程,该过程会更改不同系统或不同字体之间组件的大小“我的JPanel中的my object(JPanel)发生了更改?”这是怎么回事 Objects: JScrollPanel( JPanel ( JPanel( ) ) ); names: scrollPanel ( tableCollection ( table1( ) ) )
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.Toolkit;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class testing extends javax.swing.JFrame {

    public testing () {
        initComponents();

        setMainFrameSize();
        addScrollPane();
        addTables();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                formComponentResized(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    private void formComponentResized(java.awt.event.ComponentEvent evt) {                                      
        setScrollPaneSize();
        setTableSize();
    }                                     

    public static void main(String args[]) {
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(testing.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(testing.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(testing.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(testing.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new testing().setVisible(true);
            }
        });
    }

    JPanel tableCollection = new JPanel();
    JScrollPane scrollPane = new JScrollPane(tableCollection, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                                             JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

    // Variables declaration - do not modify                     
    // End of variables declaration                   

    void setMainFrameSize() {
        this.setMinimumSize(new Dimension(800, 600));
        Dimension scnDimension = Toolkit.getDefaultToolkit().getScreenSize();
        Insets scnInsets = Toolkit.getDefaultToolkit().getScreenInsets(getGraphicsConfiguration());
        this.setSize(scnDimension.width, scnDimension.height-(scnInsets.bottom+scnInsets.top));
    }

    void addScrollPane() {
        scrollPane.setBackground(Color.red);
        setScrollPaneSize();
        this.add(scrollPane);

        addTableCollection();
    }
    void setScrollPaneSize() {
        scrollPane.setSize(new Dimension(500, 500));
        scrollPane.setLocation(0, barHeight);
    }

    void addTableCollection() {
        tableCollection.setBackground(new Color(189, 195, 199));
        setTableCollectionSize();
    }
    void setTableCollectionSize() {
        tableCollection.setPreferredSize(new Dimension(550, 550));
    }

    void addTables() {
        table1.setBackground(new Color(52, 152, 219));

        tableCollection.add(table1);

    }
    void setTableSize() {

        int tableHeight = tableCollection.getHeight()-tableHeightOffset*2;
        table1.setSize(350, tableHeight);
        table1.setLocation(0, 0);
    }

    int barHeight = 50;
    int tableHeightOffset = 50;
    int tableWidthOffset = 50;
    int nTables = 5;

    JPanel table1 = new JPanel();

}