2017-10-03 5 views
0

私はこのようになります簡単なフォーム作った:詳細の表示]ボタンはこのような追加のパネルやフォームを表示させる方法JFrameのサイズを変更し、JPanelやそのコントロールをボタンで表示するにはどうすればよいですか?

し、ボタンを再度クリックすると、コントロールとパネルが非表示になります。

+0

それほど難しいことではありません。このサイトでJFrameのサイズを変更する方法については、おおよその質問と回答があります。おそらく、新しいサイズに適応できるようにLayoutManagerをリロードする必要がありますが、それ以外は完全にうまく動作するはずです。より洗練された方法は、テーブルを最小限にして、あなたの詳細のために得られたスペースを使用することです。 –

+0

簡単なフォームをどのように作成しましたか?拡張フォームをどのように作成しましたか? – matt

+0

@mattそのサンプルのみ、this.pack()を使用してコントロールmanualy – kusnendi

答えて

1

詳細パネルを表示/非表示にした後、pack()を呼び出してフレームのサイズを変更する必要があります。それぞれ正確に位置を決めるにはsetLocationRelativeTo()です。ここ

は一例で

Main.java

import javax.swing.*; 

public class Main { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> new MainFrame("Test Frame").setVisible(true)); 
    } 
} 

MainFrame.java

import javax.swing.*; 
import java.awt.*; 

public class MainFrame extends JFrame { 

    private DetailsPanel detailsPanel; 

    public MainFrame(String title) throws HeadlessException { 
     super(title); 
     createGUI(); 
    } 

    private void createGUI() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     setLayout(new BorderLayout()); 

     detailsPanel = new DetailsPanel(); 

     add(new MainPanel(this), BorderLayout.CENTER); 
     add(detailsPanel, BorderLayout.LINE_END); 

     pack(); 
     setLocationRelativeTo(null); 
    } 

    public void showDetails(boolean show) { 
     detailsPanel.setVisible(show); 

     pack(); 
     setLocationRelativeTo(null); 
    } 
} 

MainPanel.java

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 

public class MainPanel extends JPanel { 

    private MainFrame owner; 
    private JButton showDetailsButton; 

    private boolean details = false; 

    public MainPanel(MainFrame owner) { 
     super(); 
     this.owner = owner; 

     createGUI(); 
    } 

    private void createGUI() { 
     showDetailsButton = new JButton("Details >>>"); 
     showDetailsButton.addActionListener(this::showDetais); 

     JPanel contentPanel = new JPanel(); 
     contentPanel.setPreferredSize(new Dimension(400, 400)); 
     contentPanel.setBackground(Color.CYAN); 

     JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); 
     buttonsPanel.add(showDetailsButton); 

     setLayout(new BorderLayout()); 
     setPreferredSize(new Dimension(400, 400)); 
     setMinimumSize(getPreferredSize()); 


     add(contentPanel, BorderLayout.CENTER); 
     add(buttonsPanel, BorderLayout.PAGE_END); 
    } 

    private void showDetais(ActionEvent event) { 
     showDetailsButton.setText(details ? "Details >>>" : "<<< Details"); 

     details = !details; 
     owner.showDetails(details); 
    } 
} 

DetailsPanel.java

import javax.swing.*; 
import java.awt.*; 

public class DetailsPanel extends JPanel { 

    public DetailsPanel() { 
     super(); 
     createGUI(); 
    } 

    private void createGUI() { 
     setBackground(Color.BLUE); 
     setPreferredSize(new Dimension(200, 800)); 
     setVisible(false); 
    } 
} 
+0

を追加し、パネルの可視性を切り替えて問題を解決します。ありがとうございました – kusnendi

0

これは、使用するLayoutManagerのビットによって異なる場合があります。しかし、一般的に、Detailsパネルは常にDialogに追加されますが、最初は表示されません。 [詳細を表示]ボタンを押すと、詳細パネルの表示を切り替え、必要な追加スペースに対応するようにダイアログのサイズを変更します。

1

のは、Filterからコントロールを仮定しましょうダウンShow Detailsによるシングル(永久に閲覧可能 - PV)にある表示/非表示にするパネル、およびコントロールであります秒(非表示または表示 - HS hideOrShowPanel)パネル。 PVパネルをBorderLayoutCENTERに入れ、HSパネルをLINE_ENDに入れます。ボタンのトグルで

、呼び出し...

private void changePanelVisibility(Boolean visible) { 
    hideOrShowPanel.setVisible(visible); 
    topLevelContainer.pack(); // revalidate layout and size the GUI to fit the controls 
} 

topLevelContainerJFrameかもしれませんが、このGUIはJDialogに表示されるのに適していそうです。特にこれは、ダイアログがデフォルトである固定サイズ(ユーザがサイズ変更できない)の最上位のコンテナで最もよく見えるからです。

関連する問題