現時点では、小さなクライアントアプリケーションを作成しています。JTextArea(サーバー出力の表示領域)とユーザーリストのあるウィンドウがあります。
このユーザーリストをメニュー項目の上に表示/非表示にする予定ですが、方法がわかりません。私の考え:
BorderLayoutを使用します:リストにJScrollPaneを使用しません。動作しますが、ユーザーリストの幅を変更できません(BorderLayout.WESTとBorderLayout.EASTは幅を無視するため)
ユーザーリストにJScrollPaneでBorderLayoutを使用し、JScrollPaneを表示/非表示にします->機能しません。理由を聞かないでください...とにかく、この方法は良い解決策ではありません
JSplitPaneを使用して、サイズ変更の重みを0.9に設定します。ユーザーリストが表示されなくなったら、適切なコンポーネント(ユーザーリスト)を最小化します->どのように?
現時点での私のコード:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
public class SplitPaneTest extends JFrame implements ActionListener
{
private JSplitPane splitPane;
private JTextArea textDisplay;
private JList<String> listUser;
private JScrollPane scrollTextDisplay;
private JScrollPane scrollListUser;
private JCheckBox itemShowUser;
public static void main(String[] args)
{
new SplitPaneTest();
}
public SplitPaneTest()
{
setTitle("Chat Client");
setMinimumSize(new Dimension(800, 500));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
textDisplay = new JTextArea();
listUser = new JList<>();
DefaultListModel<String> modelUser = new DefaultListModel<>();
listUser.setModel(modelUser);
modelUser.addElement(new String("User 1"));
modelUser.addElement(new String("User 2"));
modelUser.addElement(new String("User 3"));
scrollTextDisplay = new JScrollPane(textDisplay);
scrollListUser = new JScrollPane(listUser);
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setLeftComponent(scrollTextDisplay);
splitPane.setRightComponent(scrollListUser);
splitPane.setResizeWeight(0.9);
setContentPane(splitPane);
JMenuBar menubar = new JMenuBar();
JMenu menuWindow = new JMenu("Window");
itemShowUser = new JCheckBox("Show user list");
itemShowUser.addActionListener(this);
itemShowUser.setSelected(true);
menuWindow.add(itemShowUser);
menubar.add(menuWindow);
setJMenuBar(menubar);
setVisible(true);
}
public boolean isUserListEnabled()
{
return itemShowUser.isSelected();
}
public void setUserListEnabled(boolean status)
{
scrollListUser.setVisible(status);
}
@Override
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == itemShowUser)
{
boolean status = isUserListEnabled();
setUserListEnabled(status);
}
}
}
そして結果は次のとおりです。
そして隠されたJScrollPanescrollListUserで:
誰かが私にヒントを与えることができますか?ユーザーリストはまだ表示されています(JSplitPaneが再描画されると思いました。)。私はQt(C ++)から来ており、Qtではドックウィジェットを使用できますが、Swingにはドックウィジェットがなく、3番目のライブラリを使用します。わかりません-解決策があるかもしれません。