Java 将JList添加到JPanel
我正在尝试将JList添加到JPanel。具体来说,我有两个JPanel,一个右JPanel和一个左JPanel。右边有两个按钮。在左侧,我想要JList mySpriteOptions,请参见下面的代码。不幸的是,当我运行代码时,这个JList从未出现。我不是挥杆专家事实上我是一个巨大的新手,所以我不明白为什么会这样 这是我的密码:Java 将JList添加到JPanel,java,swing,jframe,jpanel,jlist,Java,Swing,Jframe,Jpanel,Jlist,我正在尝试将JList添加到JPanel。具体来说,我有两个JPanel,一个右JPanel和一个左JPanel。右边有两个按钮。在左侧,我想要JList mySpriteOptions,请参见下面的代码。不幸的是,当我运行代码时,这个JList从未出现。我不是挥杆专家事实上我是一个巨大的新手,所以我不明白为什么会这样 这是我的密码: import java.awt.*; import java.swing.* public class SpriteEditorLau
import java.awt.*;
import java.swing.*
public class SpriteEditorLauncher extends JFrame {
private JLabel mySearchBoxLabel;
private JList mySpriteOptions;
private JPanel myLeft;
private JPanel myRight;
private JScrollPane myScrollPane;
private JTextField mySearchBox;
private JButton myNewEditLauncher;
private JButton myEditLauncher;
private static final long serialVersionUID = 1L;
private static final String FONT_TYPE = "Times New Roman";
private static final int FONT_SIZE = 12;
private static final int FONT_STYLE = 1;
private static final Font FONT = new Font(FONT_TYPE, FONT_STYLE, FONT_SIZE);
private static final int NUMBER_OF_ROWS = 1;
private static final int NUMBER_OF_COLUMNS = 2;
private static final int FRAME_WIDTH = 600;
private static final int FRAME_HEIGHT = 400;
public SpriteEditorLauncher () {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
initializeComponents();
createLayout();
}
private void initializeComponents () {
myLeft = new JPanel();
myRight = new JPanel();
myNewEditLauncher = new JButton();
myEditLauncher = new JButton();
myScrollPane = new JScrollPane();
mySpriteOptions = new JList();
mySearchBox = new JTextField();
mySearchBoxLabel = new JLabel();
}
private void setPanelBorder (JPanel toSetBorderFor) {
toSetBorderFor.setBorder(BorderFactory
.createTitledBorder(null, "Options", TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, FONT));
}
private void setButtonLabel (JButton button, Font font, String label) {
button.setFont(font);
button.setText(label);
}
private void setFrameLayout () {
GridLayout myLayout = new GridLayout(NUMBER_OF_ROWS, NUMBER_OF_COLUMNS);
setLayout (myLayout);
setPreferredSize(new Dimension(FRAME_WIDTH, FRAME_HEIGHT));
setResizable(false);
}
private void addPanelsToFrame () {
add(myLeft);
add(myRight);
}
private void addButtonsToPanel (JPanel panel) {
panel.add(myNewEditLauncher);
panel.add(myEditLauncher);
}
private void createLayout () {
setFrameLayout();
setPanelBorder(myRight);
setButtonLabel(myNewEditLauncher, FONT, "New");
setButtonLabel(myEditLauncher, FONT, "Edit");
addPanelsToFrame();
addButtonsToPanel(myRight);
mySpriteOptions.setModel(new AbstractListModel() {
private static final long serialVersionUID = 1L;
String[] strings = { "Item 1", "Item 2"};
public int getSize () {
return strings.length;
}
public Object getElementAt (int i) {
return strings[i];
}
});
myLeft.add(mySpriteOptions);
myScrollPane.setViewportView(mySpriteOptions);
mySearchBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed (ActionEvent arg0) {
// TODO Auto-generated method stub
}
});
mySearchBoxLabel.setFont(FONT);
mySearchBoxLabel.setLabelFor(mySearchBox);
mySearchBoxLabel.setText("Search:");
pack();
setVisible(true);
}
}
您从未将myScrollPane添加到JPanel myLeft:
虽然您已将mySpriteOptions添加到myLeft,但它也被设置为myScrollPane的ViewportView
组件只能在其连接到的最后一个容器上涂漆
-so将仅出现在JScrollPane中,但尚未添加
现在,不需要这样的陈述:
myLeft.add(mySpriteOptions);
您从未将myScrollPane添加到JPanel myLeft:
虽然您已将mySpriteOptions添加到myLeft,但它也被设置为myScrollPane的ViewportView
组件只能在其连接到的最后一个容器上涂漆
-so将仅出现在JScrollPane中,但尚未添加
现在,不需要这样的陈述:
myLeft.add(mySpriteOptions);
JPanel的默认布局是FlowLayout
FlowLayout喜欢使用其组件的首选大小来进行布局
空JList的默认大小可能是0x0,这意味着它永远不会显示
尝试使用BorderLayout myRight=newjpanelnewborderlayout创建右侧面板;并将JList添加到其中,包装在JScrollPane中
看看
有关详细信息,JPanel的默认布局为FlowLayout
FlowLayout喜欢使用其组件的首选大小来进行布局
空JList的默认大小可能是0x0,这意味着它永远不会显示
尝试使用BorderLayout myRight=newjpanelnewborderlayout创建右侧面板;并将JList添加到其中,包装在JScrollPane中
看看
有关详细信息感谢MadProgrammer,我一定会查看这些链接。我使用OverlyLayout在滚动窗格中处理JPanel中的JList。感谢MadProgrammer,我一定会查看这些链接。我使用OverlyLayout在滚动窗格中处理JPanel中的JList。
private void addPanelsToFrame () {
add(myLeft);
add(new JScrollPane(myRight));
}