Hallo nochmal...
ich hoffe, ich kann mein Problem am besten mit einem Bild verdeutlichen:
(falls ich es besser verlinken oder kleiner machen soll, gebe man Bescheid....und man sehe mal darüber hinweg, dass bei "Steine werfen" ein Messer ist, Grafik ist gerade meine geringste Sorge )
Bisher sieht es folgendermaßen aus, ich habe ein JFrame, mit einem JPanel namens "surface":
und darauf sollen sich zwei "CardSelectors" befinden, also links eine Auswahl an "Entities" (Einheiten, Gebäude, etc.) auf der einen Seite und rechts einer mit denen, die man sich schon ausgesucht hat.
Wenn ich die Farben ohne Transparenz benutze, ist alles in Ordnung.
Ich hätte es aber gerne so, dass das Hintergrundbild zwischen dne "Karten" durchscheint.
Stattdessen gibt es...Schlieren? Und man sieht Hintergründe anderer Elemente dahinter.
Vielleicht hilt noch der Selector-Code? Hier wären einmal der Konstruktor:
und die paintComponent-Methode:
Das Problem hatte ich schon ein paar mal und hatte es immer irgendwie gelöst bekommen, aber diesmal stehe ich irgendwie auf dem Schlauch..vllt. liegt es ja auch am ScrollPane (zumindest die Streifen beim Scrollen, die ich ja logischerweise sonst nie hatte), aber ein Schubs in die richtige Richtung wäre nett. :toll:
ich hoffe, ich kann mein Problem am besten mit einem Bild verdeutlichen:
Bisher sieht es folgendermaßen aus, ich habe ein JFrame, mit einem JPanel namens "surface":
Java:
public StartWindow(ImageHolder imageHolder) throws NoFullScreenException {
super(imageHolder);
LinkedList<Entity> entities = new LinkedList<>(FakeServer.getEntityList());
selector = new CardSelector(entities, holder);
LinkedList<Entity> test = new LinkedList<Entity>();
test.add(new Peasant());
selected = new CardSelector(test, holder);
background = new JLabel(new ImageIcon(holder.getImage("background_marching")));
background.setBounds((GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()
.getFullScreenWindow().getBounds()));
surface.add(background);
selector.setBounds(1, 200, GameCard.CARD_HOLDER_WIDTH + 100,
NECG004.ENTITY_SELECTOR_HEIGHT);
selected.setBounds(100 + selector.getWidth(), 200, GameCard.CARD_HOLDER_WIDTH + 100,
NECG004.ENTITY_SELECTOR_HEIGHT);
selector.setVisible(true);
selected.setVisible(true);
surface.add(selector);
surface.add(selected);
}
@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
background.repaint();
selector.repaint();
}
und darauf sollen sich zwei "CardSelectors" befinden, also links eine Auswahl an "Entities" (Einheiten, Gebäude, etc.) auf der einen Seite und rechts einer mit denen, die man sich schon ausgesucht hat.
Wenn ich die Farben ohne Transparenz benutze, ist alles in Ordnung.
Ich hätte es aber gerne so, dass das Hintergrundbild zwischen dne "Karten" durchscheint.
Stattdessen gibt es...Schlieren? Und man sieht Hintergründe anderer Elemente dahinter.
Vielleicht hilt noch der Selector-Code? Hier wären einmal der Konstruktor:
Java:
public CardSelector(List<Entity> entitiesToSelect, ImageHolder imageHolder) {
holder = imageHolder;
entities = new LinkedList<>(entitiesToSelect);
cards = new ArrayList<>(entities.size());
int heightGap = 70; //just for testing, should be under 10 later
container = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, heightGap), true);
container.setOpaque(false);
container.setPreferredSize(new Dimension(GameCard.CARD_HOLDER_WIDTH,
(GameCard.CARD_HOLDER_HEIGHT + heightGap) * entities.size()));
container.setBackground(new Color(150, 50, 0, 100));
scroller = new JScrollPane(container, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroller.setWheelScrollingEnabled(true);
scroller.setSize(GameCard.CARD_HOLDER_WIDTH + scroller.getVerticalScrollBar().getWidth() +10,
NECG004.ENTITY_SELECTOR_HEIGHT);
scroller.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
scroller.setVisible(true);
scroller.setBackground(new Color(100, 70, 40, 50));
scroller.getViewport().setOpaque(false);
add(scroller);
for(Entity entity : entities) {
GameCard nextCard = null;
if(entity instanceof Unit) nextCard = new UnitCard(entity, holder);
container.add(nextCard);
cards.add(nextCard);
nextCard.setVisible(true);
}
addMouseListener(this);
}
und die paintComponent-Methode:
Java:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
scroller.repaint();
container.repaint();
}
Das Problem hatte ich schon ein paar mal und hatte es immer irgendwie gelöst bekommen, aber diesmal stehe ich irgendwie auf dem Schlauch..vllt. liegt es ja auch am ScrollPane (zumindest die Streifen beim Scrollen, die ich ja logischerweise sonst nie hatte), aber ein Schubs in die richtige Richtung wäre nett. :toll: