изменить размер дочерней панели при изменении размера родительского JFrame - PullRequest
0 голосов
/ 24 сентября 2010

У меня есть JFrame, который содержит JPanel. Размер рамки может быть изменен пользователем с помощью мыши. Когда ширина рамки> 400, внутренняя ширина jpanel устанавливается равной 10; в противном случае 1080.

Между рамой и панелью находится также JScrollBar.

Вот мой код:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ComponentEvent;
import javax.swing.*;
import javax.swing.table.*;
/**
 *
 * @author Administrator
 */
public class TableFrame extends javax.swing.JFrame {
public JScrollPane jScrollPane1 = new JScrollPane();
public JTable table;
public JScrollPane getScrollPane(){
    return this.jScrollPane1;
}

JPanel inFrame = new JPanel();
public TableFrame() {
    initComponents();

    jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    //this.jScrollPane1.setViewportView(inFrame);
    this.getContentPane().setLayout(new BorderLayout());
    this.addComponentListener(new java.awt.event.ComponentAdapter() {
        public void componentResized(ComponentEvent e) {
                    setSize();
            }
    });
    this.getContentPane().add(this.jScrollPane1);

    this.jScrollPane1.setViewportView(this.inFrame);

}

public void setSize(){
    int w = this.getWidth();
    int width = 0;
    int height = 1000;
    if(w < 400){
        width = 10;
        this.inFrame.setBackground(Color.blue);
    }else{
        width = 1080;
        this.inFrame.setBackground(Color.red);
    }
    this.inFrame.setPreferredSize(new Dimension(width, height));
    this.jScrollPane1.revalidate();
}

/** 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() {

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    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>

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
    TableFrame frame = new TableFrame();

    frame.setVisible(true);


}

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

}

Однако полоса прокрутки JScrollPane работает не так, как ожидалось. Когда я изменяю размер рамки с ширины больше 400 до меньше 400, полоса прокрутки не обновляется правильно. Что мне нужно, так это то, что когда ширина рамки меньше порога, панель должна изменить размер до постоянного значения, в противном случае другое значение.

1 Ответ

3 голосов
/ 24 сентября 2010

полоса прокрутки не обновляется правильно.

Вы должны пройти повторную проверку панели, а не полосы прокрутки:

// this.jScrollPane1.revalidate();
this.inFrame.revalidate();
...