我写了一个java程序,每张卡都有CardLayout
一个JPanel
。
包含长JPanel
文本,我只需要实现一个小“搜索栏”,它只搜索已查看的指定文本JPanel
。
它只需要突出显示JPanel
.
为了更清楚,我说的是类似于 Chrome 的 Firefox 搜索栏(ctrl-f),但这仅适用JPanel
于我的程序中的一个。
这是一张图片。
可能吗?我怎样才能做到这一点?
谢谢
最简单的方法是创建一个JPanel
位于文本上方的小型搜索JPanel
。两个JPanel
s 都在另一个 s 内JPanel
。我会使用 aJTextField
和 a JButton
,因为我喜欢用户控制何时搜索。
这是我的一个带有搜索的 GUI JPanel
。
这是创建搜索的代码JPanel
。请注意,我使用了JPanel
. 仅当您想要覆盖组件方法之一时才扩展 Swing 组件。
package gov.bop.cobol.paragraph.structure.view;
import gov.bop.cobol.paragraph.structure.model.ParagraphStructureModel;
import gov.bop.cobol.paragraph.structure.thread.SearchActionThread;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class SearchPanel {
protected JPanel panel;
protected JTextField findTextField;
protected ParagraphStructureFrame frame;
protected ParagraphStructureModel model;
public SearchPanel(ParagraphStructureFrame frame,
ParagraphStructureModel model) {
this.frame = frame;
this.model = model;
createPartControl();
}
protected void createPartControl() {
panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
JLabel findLabel = new JLabel("Search:");
panel.add(findLabel);
panel.add(Box.createRigidArea(new Dimension(6, 0)));
findTextField = new JTextField(30);
panel.add(findTextField);
panel.add(Box.createRigidArea(new Dimension(6, 0)));
JButton findButton = new JButton("Search");
findButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
String s = findTextField.getText().toUpperCase().trim();
if (!s.equals("")) {
findTextField.setText(s);
Thread thread = new Thread(new SearchActionThread(frame,
model, s));
thread.start();
}
}
});
panel.add(findButton);
}
public JPanel getPanel() {
return panel;
}
}