2011-10-19 20 views
1

私は垂直分割ペインを含む水平分割ペインを持っています。ウィンドウが表示されたら、水平の分割ペインの上部にある垂直の分割ペインを中央に分割します。私は、水平の仕切りを中央にしたい。水平分割ペインウィンドウでのサイズ変更

しかし、私はウィンドウを最大化したときに水平分割ペインでサイズを変更したいと思っています。 (現在はありません)

また、横枠の下にボタンボックスがあり、サイズ変更時に常に表示されるようにしたいと考えています。現在のところ、ウィンドウが起動すると、私は水平分割のすべてを見ることができます。私はボタンがウィンドウの望ましいサイズ(800,600)に収まらないので、ボタンを見ることができません。しかし、私はすべてが自動的にウィンドウに表示され、サイズ変更されるときにウィンドウの境界にGlue'dを残したいと思います...

どうすればいいですか?

ありがとうございます!

以下は現在使用しているコードです。私はコントローラ内でcreateメソッドを呼び出します。 createViewは最初に呼び出され、残りは順番に呼び出されます。


public void createView() { 
     dialog = new JFrame(); 
     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
     dialog.setVisible(true); 
     dialog.setAlwaysOnTop(true); 
     dialog.setBounds(0, 0, 800, 600); 
     dialog.setMinimumSize(new Dimension(800, 600)); 
     dialog.setPreferredSize(new Dimension(800, 600)); 
     dialog.setResizable(true); 
     dialog.setTitle("MJLA Class Control Panel"); 

     contentPanel = new JPanel(); 
//  contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS)); 
     contentPanel.setLayout(new BorderLayout()); 
     contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     dialog.getContentPane().add(contentPanel, BorderLayout.CENTER); 

     classQuizSRTSplit = new JSplitPane(JSplitPane.VERTICAL_SPLIT); 
     contentPanel.add(classQuizSRTSplit, BorderLayout.NORTH); 

     classQuizSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); 
     classQuizSRTSplit.setTopComponent(classQuizSplit); 




//  classQuizHBox = Box.createHorizontalBox(); 
//  contentPanel.add(classQuizHBox); 

     sRTHBox = Box.createHorizontalBox(); 
     contentPanel.add(sRTHBox); 

     buttonBox = Box.createHorizontalBox(); 
     contentPanel.add(buttonBox, BorderLayout.SOUTH); 

     refreshButton = new JButton("Refresh"); 
     buttonBox.add(refreshButton); 

     doneButton = new JButton("Done"); 
     buttonBox.add(doneButton); 

     this.validateView(); 
    } 

public void createClassTablePanel() { 
     this.classTablePanel = new JPanel(); 
     this.classTablePanel.setBorder(BorderFactory.createLineBorder(Color.black, 3)); 
     this.classTablePanel.setPreferredSize(new Dimension(300, 300)); 
     this.classTablePanel.setLayout(new BorderLayout()); 

//  this.classQuizHBox.add(classTablePanel); 

     this.classQuizSplit.setLeftComponent(classTablePanel); 
     classTableModel = cPModel.getClassTableModel(); 

     classTable = new JTable(this.classTableModel); 

     classTable.getSelectionModel().addListSelectionListener(this); 
     JScrollPane scrollPane = new JScrollPane(classTable); 
     scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

     classTablePanel.add(scrollPane, BorderLayout.CENTER); 

     this.validateView(); 
    } 

public void createQuizTablePanel() { 
     this.quizTablePanel = new JPanel(); 
     this.quizTablePanel.setBorder(BorderFactory.createLineBorder(Color.black, 3)); 
     this.quizTablePanel.setPreferredSize(new Dimension(300, 300)); 
     this.quizTablePanel.setLayout(new BorderLayout()); 

//  this.classQuizHBox.add(quizTablePanel); 

     this.classQuizSplit.setRightComponent(quizTablePanel); 

     quizTableModel = cPModel.getQuizTableModel(); 
     this.quizSorter = new TableRowSorter<DefaultTableModel>(quizTableModel); 

     quizTable = new JTable(this.quizTableModel); 
     quizTable.getSelectionModel().addListSelectionListener(this); 
     quizTable.setRowSorter(quizSorter); 
     JScrollPane scrollPane = new JScrollPane(quizTable); 
     scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

     quizTablePanel.add(scrollPane, BorderLayout.CENTER); 

     Box buttonHBox = Box.createHorizontalBox(); 
     quizTablePanel.add(buttonHBox, BorderLayout.SOUTH); 

     addQuizButton = new JButton("Add Quiz"); 
     buttonHBox.add(addQuizButton); 

     removeQuizButton = new JButton("Remove Quiz"); 
     buttonHBox.add(removeQuizButton); 

     editQuizButton = new JButton("Edit Quiz"); 
     buttonHBox.add(editQuizButton); 

     this.validateView(); 
    } 

public void createStudentRecordTablePanel() { 
     this.studentRecordTablePanel = new JPanel(); 
     this.studentRecordTablePanel.setBorder(BorderFactory.createLineBorder(Color.black, 3)); 
     this.studentRecordTablePanel.setLayout(new BorderLayout()); 

//  this.sRTHBox.add(studentRecordTablePanel); 

     this.classQuizSRTSplit.setBottomComponent(studentRecordTablePanel); 

     this.studentRecordTableModel = cPModel.getStudentRecordTableModel(); 
     this.sRTSorter = new TableRowSorter<DefaultTableModel>(studentRecordTableModel); 

     sRTTable = new JTable(this.studentRecordTableModel); 
     sRTTable.setRowSorter(sRTSorter); 
     JScrollPane scrollPane = new JScrollPane(sRTTable); 
     scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
     scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 

     studentRecordTablePanel.add(scrollPane, BorderLayout.CENTER); 

     Box buttonHBox = Box.createHorizontalBox(); 
     studentRecordTablePanel.add(buttonHBox, BorderLayout.SOUTH); 

     editGradeButton = new JButton("Edit Grade"); 
     buttonHBox.add(editGradeButton); 

     generateReportButton = new JButton("Generate Report"); 
     buttonHBox.add(generateReportButton); 

     this.validateView(); 
    } 

別の問題。

@TrashGodの問題を修正しました。しかし、水平分割区画のサイズを変更して、完了したボタンとリフレッシュボタンとの間の大きなギャップではなく、水平分割ペインの底部ではなく、新しいサイズのウィンドウに合わせてコンポーネントをサイズ変更できますか?

ウィンドウサイズが変更されたときにイベントを聞いてから、pack()メソッドを呼び出す必要があると思っていたのですが、それが唯一の方法ですか、それとも機能するのでしょうか? (ちょうどこれを試して、それは動作しませんでした...すべての適切なサイズに戻してください)


初期の見た目。最大化したウィンドウの後 enter image description here


enter image description here

+1

問題を示すSSCCEを投稿してください。 – camickr

+0

イベントを聴いたり、pack()を行う必要はありません。適切なレイアウトマネージャを使用する必要があります。あなたは正しいSSCCEを投稿していないので、私たちは読者を気にしないので、あなたの車輪を回転させる楽しみがあります。 – camickr

答えて

4

setResizeWeight()をご覧ください。 0.5の値は、スペースを均等に分散する必要があります。

pack()メソッド "このWindowは、そのサブコンポーネントの好ましいサイズとレイアウトに適合するようにサイズ変更されます。" BorderLayout.NORTHBorderLayout.SOUTHは、仕切りを使用するのに適したレイアウトのようです。

さらに詳しいヘルプについては、問題が発生しているsscceを入力してください。

+0

しかし、それは私のサイズ変更の問題を解決しませんでした。私はいくつかのスクリーンショットとサイズ変更の問題の説明を追加しました。ありがとう – prolink007

+2

@ prolink007あなたはこのアイデアを試すことができますhttp://stackoverflow.com/questions/7625762/setting-divider-location-on-a-jsplitpane-doesnt-work/7625843#7625843 – mKorbel

+0

これを少しテストします。結果をお知らせします。 – prolink007

関連する問題