Java 再次为不同的自定义列表重用JScrollPane时出现问题
我试图创建一个JScrollPane组件,该组件可以根据传递的字符串参数重用。。 我已经创建了以下代码,如果我使用JFrame将JScrollPane嵌入其中,它就可以工作, 但是当我试图在创建不同的JScrollPane时重用代码时,scrollPane根本不会显示。。 我正在java swing项目中实现它。。 请让我知道在这方面应该做些什么。任何建议都非常感谢 我对JComboBox也有同样的问题,它不显示Java 再次为不同的自定义列表重用JScrollPane时出现问题,java,swing,jlist,Java,Swing,Jlist,我试图创建一个JScrollPane组件,该组件可以根据传递的字符串参数重用。。 我已经创建了以下代码,如果我使用JFrame将JScrollPane嵌入其中,它就可以工作, 但是当我试图在创建不同的JScrollPane时重用代码时,scrollPane根本不会显示。。 我正在java swing项目中实现它。。 请让我知道在这方面应该做些什么。任何建议都非常感谢 我对JComboBox也有同样的问题,它不显示 public class ListComponent extends JScrol
public class ListComponent extends JScrollPane {
private String[] selectedNames;
private String[] listNames;
private JButton submit, reset;
private JPanel subPanel = new JPanel();
private JList list;
private JScrollPane scroll;
public String getFirstSelectionInList() {
return selectedNames[0];
}
ListComponent() {
/*submit = new JButton("Submit");
reset = new JButton("Reset");*/
subPanel.setLayout(new FlowLayout());
/*subPanel.add(submit);
subPanel.add(reset);*/
}
ListComponent(String[] listNames) {
this();
/*JFrame frame = new JFrame("Creating a JList Component");*/
this.listNames = new String[listNames.length];
this.listNames = listNames;
//this.setLayout(new BorderLayout());
//this.setLayout(new ScrollPaneLayout());
JPanel panel = new JPanel();
list = new JList(listNames);
scroll = new JScrollPane(list);
scroll.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
/*panel.add(scroll);
panel.add(subPanel,BorderLayout.SOUTH);*/
/*frame.add(panel);
frame.pack();
frame.setVisible(true);*/
this.setVisible(true);
list.addListSelectionListener(listSelectionListener);
}
ListSelectionListener listSelectionListener = new ListSelectionListener() {
public void valueChanged(ListSelectionEvent listSelectionEvent) {
boolean adjust = listSelectionEvent.getValueIsAdjusting();
//System.out.println(", Adjusting? " + adjust);
if (!adjust) {
JList list = (JList) listSelectionEvent.getSource();
int selections[] = list.getSelectedIndices();
Object selectionValues[] = list.getSelectedValues();
int n = selections.length;
selectedNames = new String[n];
for (int i = 0; i < n; i++) {
if (i == 0) {
System.out.print(" Selections: ");
}
selectedNames[i] = (String) selectionValues[i];
System.out.print(selectedNames[i]
+ "/" + selectionValues[i]);
}
}
}
};
/** @return the selectedNames */
public String[] getSelectedNames() {
return selectedNames;
}
/** @param selectedNames the selectedNames to set */
public void setSelectedNames(String[] selectedNames) {
this.selectedNames = selectedNames;
}
public static void main(String args[]) {
String subject[] = {"Math", "Computer", "Phisics", "Chemestry"};
new ListComponent(subject);
}
}
公共类ListComponent扩展了JScrollPane{
私有字符串[]所选名称;
私有字符串[]列表名;
私有JButton提交、重置;
private JPanel subPanel=new JPanel();
私人名单;
私有JScrollPane滚动条;
公共字符串GetFirstSelectionList(){
返回所选名称[0];
}
ListComponent(){
/*提交=新按钮(“提交”);
重置=新的按钮(“重置”)*/
子面板setLayout(新的FlowLayout());
/*子面板添加(提交);
子面板添加(重置)*/
}
ListComponent(字符串[]listNames){
这个();
/*JFrame=新JFrame(“创建JList组件”)*/
this.listNames=新字符串[listNames.length];
this.listNames=listNames;
//此.setLayout(新的BorderLayout());
//这个.setLayout(新的ScrollPaneLayout());
JPanel面板=新的JPanel();
列表=新的JList(列表名);
滚动=新的JScrollPane(列表);
scroll.setVerticalScrollBarPolicy(
JScrollPane.垂直滚动条(根据需要);
/*面板。添加(滚动);
面板。添加(子面板,边界布局。南部)*/
/*框架。添加(面板);
frame.pack();
frame.setVisible(true)*/
此.setVisible(true);
list.addListSelectionListener(listSelectionListener);
}
ListSelectionListener ListSelectionListener=新建ListSelectionListener(){
公共作废值已更改(ListSelectionEvent ListSelectionEvent){
boolean adjust=listSelectionEvent.getValueIsAdjusting();
//系统输出打印项次(“,调整?”+调整);
如果(!调整){
JList list=(JList)listSelectionEvent.getSource();
int selections[]=list.getSelectedIndices();
对象selectionValues[]=list.getSelectedValues();
int n=长度;
selectedNames=新字符串[n];
对于(int i=0;i
公共类ListComponent扩展了JScrollPane
什么?您不应该扩展JScrollPane。您没有向滚动窗格添加新功能
如果您试图将JList添加到JScrollPane中,那么我建议您阅读JListAPI,并按照Swing教程“如何使用列表”的链接进行操作
公共类ListComponent扩展了JScrollPane
什么?您不应该扩展JScrollPane。您没有向滚动窗格添加新功能
如果您试图将JList添加到JScrollPane中,那么我建议您阅读JList API并按照Swing教程“如何使用列表”的链接进行操作;是一个更好的“轻量级组件通用容器”。您可以将其他组件添加到下面示例中使用的BorderLayout
的其他区域。在计算机上构建GUI也是一个好习惯
@camickr是正确的;是一个更好的“轻量级组件通用容器”。您可以将其他组件添加到下面示例中使用的BorderLayout
的其他区域。在计算机上构建GUI也是一个好习惯
import java.awt.*;
import java.util.Arrays;
import javax.swing.*;
import javax.swing.event.*;
/** @see http://stackoverflow.com/questions/4176343 */
public class ListPanel extends JPanel {
private JList list;
public ListPanel(String[] data) {
super(new BorderLayout());
list = new JList(data);
list.addListSelectionListener(new SelectionHandler());
JScrollPane jsp = new JScrollPane(list);
this.add(jsp, BorderLayout.CENTER);
}
private class SelectionHandler implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
System.out.println(Arrays.toString(list.getSelectedValues()));
}
}
}
private void display() {
JFrame f = new JFrame("ListPanel");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
String[] data = {"Math", "Computer", "Physics", "Chemistry"};
new ListPanel(data).display();
}
});
}
}