私はこのようになります簡単なフォーム作った:詳細の表示]ボタンはこのような追加のパネルやフォームを表示させる方法JFrameのサイズを変更し、JPanelやそのコントロールをボタンで表示するにはどうすればよいですか?
:
し、ボタンを再度クリックすると、コントロールとパネルが非表示になります。
私はこのようになります簡単なフォーム作った:詳細の表示]ボタンはこのような追加のパネルやフォームを表示させる方法JFrameのサイズを変更し、JPanelやそのコントロールをボタンで表示するにはどうすればよいですか?
:
し、ボタンを再度クリックすると、コントロールとパネルが非表示になります。
詳細パネルを表示/非表示にした後、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);
}
}
を追加し、パネルの可視性を切り替えて問題を解決します。ありがとうございました – kusnendi
これは、使用するLayoutManagerのビットによって異なる場合があります。しかし、一般的に、Detailsパネルは常にDialogに追加されますが、最初は表示されません。 [詳細を表示]ボタンを押すと、詳細パネルの表示を切り替え、必要な追加スペースに対応するようにダイアログのサイズを変更します。
のは、Filter
からコントロールを仮定しましょうダウンShow Details
によるシングル(永久に閲覧可能 - PV)にある表示/非表示にするパネル、およびコントロールであります秒(非表示または表示 - HS hideOrShowPanel
)パネル。 PVパネルをBorderLayout
のCENTER
に入れ、HSパネルをLINE_END
に入れます。ボタンのトグルで
、呼び出し...
private void changePanelVisibility(Boolean visible) {
hideOrShowPanel.setVisible(visible);
topLevelContainer.pack(); // revalidate layout and size the GUI to fit the controls
}
topLevelContainer
はJFrame
かもしれませんが、このGUIはJDialog
に表示されるのに適していそうです。特にこれは、ダイアログがデフォルトである固定サイズ(ユーザがサイズ変更できない)の最上位のコンテナで最もよく見えるからです。
それほど難しいことではありません。このサイトでJFrameのサイズを変更する方法については、おおよその質問と回答があります。おそらく、新しいサイズに適応できるようにLayoutManagerをリロードする必要がありますが、それ以外は完全にうまく動作するはずです。より洗練された方法は、テーブルを最小限にして、あなたの詳細のために得られたスペースを使用することです。 –
簡単なフォームをどのように作成しましたか?拡張フォームをどのように作成しましたか? – matt
@mattそのサンプルのみ、this.pack()を使用してコントロールmanualy – kusnendi