我写了一个java程序,每张卡都有一个CardLayout
JPanel
。
JPanel
包含长文字,我只需要实现一个只在搜索JPanel
上搜索指定文字的“搜索栏”。
只需突出显示JPanel
内的搜索文字。
为了更清楚,我说的是类似Firefox的Firefox搜索栏(ctrl-f),但在我的程序中仅适用于JPanel
。
这是一张照片。
有可能吗?我怎么能这样做?
由于
答案 0 :(得分:1)
最简单的方法是创建位于文本JPanel
上方的小型搜索JPanel
。两个JPanel
都在另一个JPanel
内。我使用JTextField
和JButton
,因为我喜欢用户控制何时搜索。
这是我的一个带搜索JPanel
的GUI。
这是创建搜索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;
}
}