對於我的應用程序,我設計了一個腳本編輯器。目前,我有一個JPanel
,其中包含另一個JPanel
,其中包含行號(位於左側)和一個JTextArea
,用於允許用戶鍵入他們的代碼(位於右側)。使JScrollPane控制多個組件
目前,我已在JTextArea
上實施JScrollPane
以允許用戶滾動瀏覽其代碼。
對於包含行號的JPanel
,每當用戶按下回車鍵時它們都會遞增。
但是,問題是我想要相同的JScrollPane(在JTextArea
上實現的JScrollPane)來控制行號JPanel的滾動;即當用戶在JTextArea上滾動時,行號JPanel也應該滾動。但由於行號保存在JPanel中,因此我無法將該組件添加到JTextArea。
用於容納所述的JTextArea和行號的JPanel JPanel類的構造函數:
private ScriptEditor() {
setBackground(Color.WHITE);
lineNumPanel = new LineNumberPanel();
scriptArea = new JTextArea();
scriptArea.setLineWrap(true);
scriptArea.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 15));
scriptArea.setMargin(new Insets(3, 10, 0, 10));
JScrollPane scrollPane = new JScrollPane(scriptArea);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setPreferredSize(new Dimension(width, height));
scriptArea.addKeyListener(this);
add(lineNumPanel);
add(scrollPane);
}
爲行號的JPanel這增加了在其自身內的JLabel來表示行號的構造:
public LineNumberPanel() {
setPreferredSize(new Dimension(width, height));
box = Box.createVerticalBox();
add(box);
//setup the label
label = new JLabel(String.valueOf(lineCount));
label.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 15));
//setup the label alignment
label.setVerticalAlignment(JLabel.TOP);
label.setHorizontalAlignment(JLabel.CENTER);
label.setVerticalTextPosition(JLabel.TOP);
setAlignmentY(TOP_ALIGNMENT);
box.add(label);
}
看看使用[文本組件行號(HTTP:// tips4java。來自Rob Camick博客的wordpress.com/2009/05/23/text-component-line-number/)。這是一個可用作包含文本區域的滾動窗格的行標題的組件。 –