簡體   English   中英

JScrollPanel JPanel和布局

[英]JScrollPanel JPanel and Layouts

我所擁有的:拆分面板,右側帶有滾動面板。 在此滾動面板中,我有一個JPanel。 我想在這個JPanel中有一系列其他的JPanel,一個堆疊在另一個之下。 我將布局設置為BoxLayout。 現在,它堆疊了多個JPanels,但是我有兩個問題:如果我從JPanel獲得的內容占用的空間少於我的框架,那么Jpanels之間的空間將很大。 在此處輸入圖片說明

如果我從JPanel獲得的內容比我的框架大,則Pannels將彼此重疊,而我來自scrollPanel的滾動不會激活。

在此處輸入圖片說明

frame = new Frame();
splitPane = new SplitPane();
scrollPane = new ScrollPane();
frame.add(splitPane);
scrollPane.setViewportView(new Lesson());
splitPane.setRightComponent(scrollPane);
splitPane.setLeftComponent(new JTree());

其中Frame,SplitPane,ScrollPane()是擴展JFrame,JSplitPane,JScrollPane的類。 Atm他們只有一個構造函數,在它可以工作之后,我想在那里進行一些自定義。

public class Lesson extends JPanel {

  private static final long serialVersionUID = 1L;

  public Lesson() {
    customize();
    String text = "text from pictures";
    add(new Paragraph(text));
    add(new Paragraph(text));

  }

  private void customize() {
    BoxLayout boxLayout = new BoxLayout(this, BoxLayout.PAGE_AXIS);
    setLayout(boxLayout);
  }

}

public class Paragraph extends JPanel {

  private static final long serialVersionUID = 1L;

  public Paragraph(String text) {
    setLayout(new FlowLayout(FlowLayout.LEFT));
    setPreferredSize(new Dimension());
    StringTokenizer splitStringTokenizer = new StringTokenizer(text, " ");
    while(splitStringTokenizer.hasMoreTokens()){
      add(label(splitStringTokenizer.nextToken().toString()));
    }
  }

  private JLabel label(String string){
    JLabel jlabel= new JLabel(string);
    return jlabel;
  }

}

關於如何解決此問題的任何提示? 提前輸入。

BoxLayout遵循添加到其中的組件的最大和最小大小。 您正在使用FlowLayout或Paragraph面板。 首選大小始終是一行組件。

面板將縮小,直到僅顯示一行為止,或者增長到占據所有空間。

當有更多空間時,允許面板增長。

覆蓋“段落”面板的getMaximum / MinimumSize()以返回首選大小。

問題是為什么要使用標簽面板顯示文本。 為什么不使用文本區域。

或者另一個選擇是使用WrapLayout ,它將自動包裝組件並根據包裝重新計算首選大小。 您仍將要覆蓋getMinimum / Maximum大小計算以返回首選大小。

稍后我想向一些jlabel添加鼠標偵聽器。

為什么? 同樣,如果您使用文本區域,則可以將MouseListener直接添加到文本區域,然后可以使用插入符號位置(或將鼠標位置轉換為文本區域中的偏移量)來確定鼠標懸停在哪個單詞上,然后做你的處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM