Ich habe eine Jpanel
, die Komponenten in zwei Ansichten anzeigen wird. Rasteransicht und Kartenansicht.GridLayout Inhalt nicht angezeigt
Die Kartenansicht funktioniert einwandfrei. Aber wenn gridView gewählt wird, werden die Komponenten nicht angezeigt.
MCVE
SourceContainer.java
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Box.Filler;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
public class SourceContainer extends JPanel implements ActionListener {
JPanel sourceMainPanel;
SourceCardPanel sourceCardPanel;
SourceGridPanel sourceGridPanel;
List<JComponent> components;
Boolean cardView = true;
public SourceContainer() {
init();
components = new ArrayList<>();
}
private void init() {
setLayout(new BorderLayout());
loadTitleComp();
loadBodyPanel();
}
private void loadTitleComp() {
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
toolBar.add(new Filler(new Dimension(), new Dimension(), new Dimension(10000, 10000)));
toolBar.add(new Filler(new Dimension(35, 0), new Dimension(35, 0), new Dimension(10000, 10000)));
JLabel label = new JLabel("Source");
label.setFont(label.getFont().deriveFont(Font.BOLD, 14));
toolBar.add(label);
toolBar.add(new Filler(new Dimension(), new Dimension(), new Dimension(10000, 10000)));
JButton button = new JButton("Switch");
button.setActionCommand("SwitchView");
button.addActionListener(this);
toolBar.add(button);
add(toolBar, BorderLayout.NORTH);
}
private void loadBodyPanel() {
sourceMainPanel = new JPanel(new CardLayout());
sourceCardPanel = new SourceCardPanel();
sourceGridPanel = new SourceGridPanel();
sourceMainPanel.add(sourceCardPanel, "Card");
sourceMainPanel.add(sourceGridPanel, "Grid");
add(sourceMainPanel, BorderLayout.CENTER);
}
public void addSourceComp(String name, JComponent comp) {
JScrollPane scrollPane = new JScrollPane(comp);
scrollPane.setName(name);
components.add(scrollPane);
}
public void load() {
switchView();
}
@Override
public void actionPerformed(ActionEvent ae) {
switch (ae.getActionCommand()) {
case "SwitchView":
cardView = !cardView;
switchView();
break;
default:
throw new UnsupportedOperationException();
}
}
private void switchView() {
CardLayout layout = (CardLayout) sourceMainPanel.getLayout();
String cardName;
if (cardView) {
cardName = "Card";
sourceCardPanel.loadCards();
} else {
sourceGridPanel.loadGrid();
cardName = "Grid";
}
layout.show(sourceMainPanel, cardName);
}
class SourceCardPanel extends JPanel implements ActionListener {
JPanel sourcePanel;
CardLayout cardLayout;
JLabel sourceLabel;
public SourceCardPanel() {
setLayout(new BorderLayout());
cardLayout = new CardLayout();
sourcePanel = new JPanel(cardLayout);
sourceLabel = new JLabel("Soruce Project");
init();
}
private void init() {
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
toolBar.add(new Filler(new Dimension(), new Dimension(), new Dimension(10000, 10000)));
JButton lbutton = new JButton("<<<");
// IconUtils.getIconByResourceName("goPrevious"));
lbutton.setActionCommand("GoToLeft");
lbutton.addActionListener(this);
toolBar.add(lbutton);
toolBar.add(sourceLabel);
JButton rbutton = new JButton(">>>");
// IconUtils.getIconByResourceName("goNext"));
rbutton.setActionCommand("GoToRight");
rbutton.addActionListener(this);
toolBar.add(rbutton);
toolBar.add(new Filler(new Dimension(), new Dimension(), new Dimension(10000, 10000)));
add(toolBar, BorderLayout.NORTH);
add(sourcePanel, BorderLayout.CENTER);
}
public void addCard(JComponent comp) {
sourcePanel.add(comp, comp.getName());
}
private JComponent getCurrentCard() {
for (Component comp : sourcePanel.getComponents()) {
if (comp.isVisible()) {
return (JComponent) comp;
}
}
return null;
}
public void loadCards() {
sourcePanel.removeAll();
for (JComponent component : components) {
addCard(component);
}
sourceLabel.setText(components.get(0).getName());
}
@Override
public void actionPerformed(ActionEvent ae) {
switch (ae.getActionCommand()) {
case "GoToLeft":
cardLayout.previous(sourcePanel);
break;
case "GoToRight":
cardLayout.next(sourcePanel);
break;
}
sourceLabel.setText(getCurrentCard().getName());
}
}
class SourceGridPanel extends JPanel {
JPanel gridpanel;
public SourceGridPanel() {
setLayout(new BorderLayout());
gridpanel = new JPanel(new GridLayout());
add(new JScrollPane(gridpanel), BorderLayout.CENTER);
}
public void loadGrid() {
gridpanel.removeAll();
for (int i = 0; i < components.size(); i++) {
create(components.get(i), i);
}
}
private void create(JComponent comp, int index) {
JPanel panel = new JPanel(new BorderLayout());
JToolBar toolBar = new JToolBar();
toolBar.setFloatable(false);
toolBar.add(new JLabel(comp.getName()));
panel.add(toolBar, BorderLayout.NORTH);
panel.add(comp, BorderLayout.CENTER);
gridpanel.add(panel, index);
}
}
}
Test.java
import java.awt.BorderLayout;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import merge.container.SourceContainer;
public class Test extends JFrame {
public Test() {
init();
}
private void init() {
SourceContainer sc = new SourceContainer();
for (int i = 0; i < 5; i++) {
sc.addSourceComp("Sample " + i, new JTree(new Object[]{i}));
}
sc.load();
add(sc, BorderLayout.CENTER);
}
public static void main(String[] args) {
setUpUI("Nimbus");
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Test samp = new Test();
samp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
samp.setTitle("Tree Test");
samp.setSize(600, 500);
samp.setLocationRelativeTo(null);
samp.setVisible(true);
}
});
}
private static void setUpUI(String ui) {
try {
for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if (ui.equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
welche Komponente ist nicht sichtbar? –
Die jtrees, die in der Rasteransicht hinzugefügt wurden – Madhan
@FastSnail Überprüfen Sie die Screenshots, die ich angehängt habe – Madhan