Hinzufügen JList zu JPanel
Ich versuche, fügen Sie eine JList auf einem JPanel. Speziell, ich habe zwei JPanels, eine Rechte und eine linke. Das Recht hat man zwei Tasten. Auf der linken Seite möchte ich die JList mySpriteOptions (siehe code unten). Leider, wenn ich meinen code, dieser JList nie auftaucht. Ich bin kein swing-Experte (eigentlich bin ich ein großer Anfänger), so dass ich kann nicht herausfinden, warum das so ist.
Hier ist mein code:
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);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nie
myScrollPane
zu denJPanel
myLeft
:Obwohl Sie Hinzugefügt haben
mySpriteOptions
zumyLeft
es ist auch alsViewportView
vonmyScrollPane
.Einer Komponente wird immer nur gemalt werden, auf die letzten container aus, in dem es angebracht wurde
—so wird nur erscheinen in der
JScrollPane
, aber das hat nicht Hinzugefügt wurde.Nun, diese Anweisung ist nicht erforderlich:
Dem Standard-layout für eine
JPanel
istFlowLayout
.FlowLayout
mag die bevorzugte Größe der Komponenten, um das layout Sie.Ist die Standard-Größe einer leeren
JList
ist wahrscheinlich 0x0, was bedeutet, dass es nie auftaucht.Versuchen, die Schaffung von rechts-panel mit einer
BorderLayout
(myRight = new JPanel(new BorderLayout());
) und fügen Sie dieJList
es, eingewickelt inJScrollPane
...Werfen Sie einen Blick auf
Weitere Informationen