我有一个带有两个框的GUI:一个文本区域和一个标签
带有工作滚动条的第一个框:
public class ResultView {
private JTextArea resultsTextArea;
private JPanel resultsPanel;
private JScrollPane scrollPane;
public ResultView() {
createGUI();
connectPanel();
}
private void createGUI() {
resultsTextArea = new JTextArea("Command results:");
resultsTextArea.setPreferredSize(new Dimension(380, 2000));
resultsTextArea.setBackground(Color.BLACK);
resultsTextArea.setForeground(Color.WHITE);
resultsTextArea.setEditable(false);
scrollPane = new JScrollPane(resultsTextArea);
scrollPane.setPreferredSize(new Dimension(400, 300));
}
private void connectPanel() {
resultsPanel = new JPanel();
resultsPanel.add(scrollPane);
}
不显示滚动条的第二个框:
public class DrawView {
private JLabel drawView;
private JPanel drawViewPanel;
private JPanel drawViewPaintPanel;
private int currentNumWagons;
private int currentTrain = -1;
private int OFFSET = 100;
private int TRAINLENGTH = 100;
private JScrollPane scrollPane;
public DrawView() {
createGUI();
connectPanel();
}
private void createGUI() {
drawView = new JLabel("DrawView:");
drawView.setPreferredSize(new Dimension(800,20));
drawViewPaintPanel = new JPanel();
drawViewPaintPanel.setPreferredSize(new Dimension(790, 280));
scrollPane = new JScrollPane(drawView);
scrollPane.setPreferredSize(new Dimension(800,300));
}
private void connectPanel() {
drawViewPanel = new JPanel(new BorderLayout());
drawViewPanel.add(drawView, BorderLayout.NORTH);
drawViewPanel.add(drawViewPaintPanel, BorderLayout.CENTER);
drawViewPanel.add(scrollPane);
}
任何想法如何解决此问题?我需要解决此问题,因为操作按钮正在将火车添加到标签中,当添加两个以上的火车时,第三列火车将位于标签下方。我将在下面添加我的GUI的图片,以让您了解我的GUI的设计方式:
答案 0 :(得分:1)
drawView.setPreferredSize(new Dimension(800,20));
摆脱所有setPreferredSize()语句。
布局管理器的工作是根据添加到面板中的组件确定面板的大小。
当组件的首选大小大于组件的大小时,将显示滚动条。因此,在将组件添加到面板时,首选大小需要能够动态更改。
drawViewPanel.add(drawViewPaintPanel, BorderLayout.CENTER);
drawViewPanel.add(scrollPane);
如果在将组件添加到BorderLayout时未指定约束,则将放置在CENTER中。但是,只能在中心显示一个组件,因此scrollPane替换了drawViewPaintPanel。
resultsTextArea = new JTextArea("Command results:");
resultsTextArea.setPreferredSize(new Dimension(380, 2000));
对于JTextArea,您可以使用以下方法建议首选大小:
resultsTextArea = new JTextArea(5, 30);
resultsTextArea.setText("Command results:");
//resultsTextArea.setPreferredSize(new Dimension(380, 2000));
文本区域现在将包含5行文本。 5行后,滚动条将出现。