Row und ColumnHeader in ScrollPane werden "verwischt&qu

Status
Nicht offen für weitere Antworten.
K

Klaus(x)

Gast
Hallo ,
eine Frage zu repaint() bzw. revalidate().
Wenn ich in meiner Swing Anwendung verschiedene Dialoge über der ScollPane bzw. über deren Header aufpoppen lasse, dort meine Daten eingebe und anschließend den Dialog schließe bzw das Fenster hin und her schiebe, sind immer die Balken der Header 'verwischt'. Ich vermute mal, das hängt mit den obigen beiden Methoden zusammen. Wann bzw. wo muss ich die denn setzen, damit sie grundsätzlich nicht mehr von darüber liegenden Komponenten oder zB beim Aufklappen einer JComboBox, welche sich über den ColumnHeader erstreckt, zerschossen werden ?


Gruß aus Hamburg.
 
G

Guest

Gast
Hallo,
hier ein Beispiel. Wie verhinder ich, dass beim Auswählen meiner leckeren Mahlzeit, ein Teil des darunterliegenden ScrollPane Headers verwischt (einige Balken des Headers verschwinden und werden erst nach einem erneuten Scrollen wieder angezeigt) wird ?

Code:
package repaint;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.border.EmptyBorder;
import javax.swing.border.SoftBevelBorder;

public class ScrollPaneTest extends JFrame {
	public static void main(String args[]) {

		final JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		tabbedPane.setPreferredSize(new Dimension(280, 700));
		tabbedPane.addTab("Tab 1", null);
		tabbedPane.addTab("Tab 2", null);

		JPanel spPanel = new JPanel();		
		spPanel.setPreferredSize(new Dimension(700,700));		
		JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
				tabbedPane, new CustomScrollPane(spPanel));

		JPanel boxPanel = new JPanel();		
		JComboBox box = new JComboBox(new Object[]{"sülze","schmalz","zwiebelgrütze","sauerkraut","knödel","speck","gurken"});
		boxPanel.add(box);
        box.setPreferredSize(new Dimension(200,20));
		f.add(boxPanel,BorderLayout.NORTH);
		f.add(split, BorderLayout.CENTER);
		f.setSize(800, 600);
		f.setVisible(true);
	}

}

class CustomScrollPane extends JScrollPane {

	private JPanel layerpanel;

	private static final Font f = new Font("SansSerif", Font.PLAIN, 10);

	private static final Color black = Color.BLACK;

	private static final SoftBevelBorder headerBorder = new SoftBevelBorder(0);

	public CustomScrollPane(JPanel component) {

		super(component);
        this.layerpanel = component;
        
        setBorder(new EmptyBorder(50,50,50,50));
		JLabel rowheader = new JLabel() {

			public void paintComponent(Graphics g) {

				super.paintComponent(g);
				Rectangle r = g.getClipBounds();
				g.setFont(f);
				g.setColor(black);

				for (int j = 10; j < 50; j += 10)
					for (int i = 50 - (r.y % 50); i <= r.height; i += 50) {

						g.drawLine(getWidth(), r.y + i - j, 30, r.y + i - j);
						g.drawLine(getWidth(), r.y + i, 25, r.y + i);

						if (r.y + i < 1000)
							g.drawString("" + (r.y + i), 5, r.y + i + 5);
						else
							g.drawString("" + (r.y + i), 0, r.y + i + 5);
					}
			}

			public Dimension getPreferredSize() {
				return new Dimension(35, (int) layerpanel.getSize().getHeight());
			}
		};

		JLabel columnheader = new JLabel() {

			public void paintComponent(Graphics g) {

				super.paintComponent(g);
				Rectangle r = g.getClipBounds();
				g.setFont(f);
				g.setColor(black);

				for (int j = 10; j < 50; j += 10) {
					for (int i = 50 - (r.x % 50); i <= r.width; i += 50) {
						g.drawLine(r.x + i - j, getHeight(), r.x + i - j, 30);
						g.drawString("" + (r.x + i), r.x + i - 10, 15);
						g.drawLine(r.x + i, getHeight(), r.x + i, 20);
					}
				}
			}

			public Dimension getPreferredSize() {
				return new Dimension((int) layerpanel.getSize().getWidth(), 35);
			}
		};

//		 rowheader.setOpaque(true);
//		 rowheader.setBorder(headerBorder);
//		 columnheader.setOpaque(true);
//		 columnheader.setBorder(headerBorder);
		setRowHeaderView(rowheader);
		setColumnHeaderView(columnheader);
	}

}
 
S

SlaterB

Gast
du malst nur in dem aktuellen Cliping-Rectangle, in dem Bereich, der von der ComoBox überdeckt wurde,

und darin rechnest du ja etwas rum, % 50, <= r.width usw,
das führt dazu, dass du nicht über den rechten Rand hinausmalst,
also auch nicht das letzte Stück bis zum Rand hin,

wie genau deine Schleife aussehen sollte kannst du nun erstmal selber überlegen,
ganz grob reichte bei mir ein Sicherheitspuffer:
for (int i = 50 - (r.x % 50); i <= (r.width+100); i += 50) {

einfach bisschen weitermalen, wenn es außehalb des Cliping liegt, stört das ja nicht (oder doch? ;) )
 
G

Guest

Gast
Ah ok, das ist doch schonmal was. hatte es nun so gelöst, ist wohl aber auch nicht so optimal ???:L

Code:
...
box.addActionListener(this);
...
public void actionPerformed(ActionEvent e){			
		scrollpane.repaint();
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G ColumnHeader und Column-Indizes AWT, Swing, JavaFX & SWT 4
B Sortierung der ColumnHeader AWT, Swing, JavaFX & SWT 8
G JTable Zeilenumbruch innerhalb einer Zelle bzw. columnHeader AWT, Swing, JavaFX & SWT 1
E GridLayout auf ScrollPane AWT, Swing, JavaFX & SWT 4
N Einer TextArea ein ScrollPane hinzufügen AWT, Swing, JavaFX & SWT 8
TheWhiteShadow JavaFX ScrollPane nimmt nicht genug platz ein AWT, Swing, JavaFX & SWT 3
J Gridpane Breite in Scrollpane automatisch anpassen AWT, Swing, JavaFX & SWT 2
E JavaFX Cursor-Position im ScrollPane AWT, Swing, JavaFX & SWT 0
E Swing Liste in Scrollpane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
C JavaFX ScrollPane schießt über das Ziel hinaus... AWT, Swing, JavaFX & SWT 1
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
T JavaFX Zoom in ScrollPane AWT, Swing, JavaFX & SWT 1
L Java FX Scrollpane automatisch resizen AWT, Swing, JavaFX & SWT 3
P Java ScrollPane und ViewPort AWT, Swing, JavaFX & SWT 2
M JavaFX Scrollpane: Style von Contentpanel default AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
V Netbeans: TabbedPane, ScrollPane und Graphics AWT, Swing, JavaFX & SWT 4
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
O ScrollPane AWT, Swing, JavaFX & SWT 2
W JavaFX Scrollpane elementweise scrollen AWT, Swing, JavaFX & SWT 4
M SWT ScrollPane Größe zu klein AWT, Swing, JavaFX & SWT 6
Z Swing Welcher Layoutmanager bei ScrollPane? AWT, Swing, JavaFX & SWT 4
S ScrollPane in Textarea und auf Panel AWT, Swing, JavaFX & SWT 4
Bluedaishi Synchrone ScrollPane trennen AWT, Swing, JavaFX & SWT 2
G JTable als fixierte Spalte in Scrollpane scrollt nicht mit... AWT, Swing, JavaFX & SWT 1
M MouseListener auf table oder scrollPane AWT, Swing, JavaFX & SWT 11
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
W Swing Zum Ende einer Scrollpane scrollen AWT, Swing, JavaFX & SWT 2
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0
Kenan89 Vertikal und horizontal zentrierter Pane in ScrollPane AWT, Swing, JavaFX & SWT 5
Kenan89 Java FX ScrollPane Content mittig setzen AWT, Swing, JavaFX & SWT 5
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
O Swing GroupLayout und Scrollpane AWT, Swing, JavaFX & SWT 3
T scrollpane taucht nicht auf AWT, Swing, JavaFX & SWT 6
D Zoom zur Mouseposition in ScrollPane AWT, Swing, JavaFX & SWT 5
F AWT ScrollPane Problem AWT, Swing, JavaFX & SWT 3
S Swing Bild in JPanel in ScrollPane neu zeichnen AWT, Swing, JavaFX & SWT 2
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
D JTable in Scrollpane AWT, Swing, JavaFX & SWT 3
H ScrollPane AWT, Swing, JavaFX & SWT 3
0 JTable im ScrollPane AWT, Swing, JavaFX & SWT 3
S Swing Scrollpane und JTables AWT, Swing, JavaFX & SWT 6
D Swing JList: ScrollPane auf JPanel ansprechen AWT, Swing, JavaFX & SWT 7
Spin JTable Header wird nicht angezeigt ohne ScrollPane AWT, Swing, JavaFX & SWT 3
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
_dp Swing ScrollPane unterschlägt Großteil der Tabelle AWT, Swing, JavaFX & SWT 7
T ScrollPane Lösgelöst vom JPanel?!? AWT, Swing, JavaFX & SWT 4
D Panel zu Scrollpane adden AWT, Swing, JavaFX & SWT 8
T LayoutManager Panel in Scrollpane mittig ausrichten AWT, Swing, JavaFX & SWT 2
E JList in ScrollPane auf größe bringen AWT, Swing, JavaFX & SWT 5
A ScrollPane + internalFrame AWT, Swing, JavaFX & SWT 2
H ScrollPane scrollt ungefragt drauf los! AWT, Swing, JavaFX & SWT 5
T ScrollPane scrollt nicht einwandfrei AWT, Swing, JavaFX & SWT 3
G ScrollPane: getPreferredSize() AWT, Swing, JavaFX & SWT 11
M Labels in ScrollPane mit Linie verbinden AWT, Swing, JavaFX & SWT 2
P ScrollPane klappt zusammen beim verkleinern des Frames AWT, Swing, JavaFX & SWT 2
S Swing JTree in ScrollPane einen ToolTip geben AWT, Swing, JavaFX & SWT 2
T ScrollBar aus ScrollPane verstecken AWT, Swing, JavaFX & SWT 2
N ScrollPane in ein Fenster einfügen AWT, Swing, JavaFX & SWT 2
N ScrollPane passt sich nicht an AWT, Swing, JavaFX & SWT 4
D ScrollPane Anpassungen AWT, Swing, JavaFX & SWT 7
M Problem mit jPanel (FlowLayout) in ScrollPane AWT, Swing, JavaFX & SWT 4
K TextArea auf Scrollpane AWT, Swing, JavaFX & SWT 3
G Tabellenköpfe trotz Scrollpane ausschalten AWT, Swing, JavaFX & SWT 5
P Automatisches Mitscrollen der ScrollPane AWT, Swing, JavaFX & SWT 2
M Problem beim Einsatz von ScrollPane (Fenster spielt verrückt AWT, Swing, JavaFX & SWT 2
R ImageViewer - Bild mit ScrollPane AWT, Swing, JavaFX & SWT 4
F Resize in ScrollPane AWT, Swing, JavaFX & SWT 4
M Swing: ScrollPane Button mit Pfeil ändern wie? AWT, Swing, JavaFX & SWT 2
F Scrollpane scrollt immer zur TextArea AWT, Swing, JavaFX & SWT 8
vogella JTable und JScrollPane - ScrollPane immer in der Mitte AWT, Swing, JavaFX & SWT 2
B Komponenten über ScrollPane hinaus angezeigt. AWT, Swing, JavaFX & SWT 3
S JTable (Scrollpane und ColumnNames) und JComboBox AWT, Swing, JavaFX & SWT 2
T Warum keine ScrollBars in diesem ScrollPane? AWT, Swing, JavaFX & SWT 3
A Scrollspeed bei Scrollpane erhöhen? AWT, Swing, JavaFX & SWT 2
A Scrollpane verschmiert beim scrollen AWT, Swing, JavaFX & SWT 5
P Resize von ScrollPane Inhalten AWT, Swing, JavaFX & SWT 2
S ScrollPane zeigt scrollbalken nicht an AWT, Swing, JavaFX & SWT 12
S Problem mit Scrollpane & Bild AWT, Swing, JavaFX & SWT 3
A JTable in ScrollPane scrollt nicht horizontal AWT, Swing, JavaFX & SWT 2
M JMenu verschwindet unter ScrollPane AWT, Swing, JavaFX & SWT 3
G jTable + ScrollPane (+ TableModel) AWT, Swing, JavaFX & SWT 7
G ScrollPane anfärben AWT, Swing, JavaFX & SWT 2
E Ärger mit ScrollPane, JTable und der Resize-Einstellung AWT, Swing, JavaFX & SWT 2
J Inhalt eines Scrollpane speichern AWT, Swing, JavaFX & SWT 3
M Eigen gemaltes JPanel im ScrollPane. klappt nicht. :-( AWT, Swing, JavaFX & SWT 10
M Wo bleibt mein ScrollPane? AWT, Swing, JavaFX & SWT 3
D Probleme mit TableLayoutManager und ScrollPane AWT, Swing, JavaFX & SWT 3
M Problem bei Verbinden v. jTable, ScrollPane u. JLabel AWT, Swing, JavaFX & SWT 5
G Anwendung um Scrollpane erweitern AWT, Swing, JavaFX & SWT 2
G Scrollpane in null-Layout einfügen AWT, Swing, JavaFX & SWT 5
N Frame in ScrollPane einfügen AWT, Swing, JavaFX & SWT 5
J Balken von ScrollPane immer unten AWT, Swing, JavaFX & SWT 6
Z Probleme mit eigenem Canvas und ScrollPane AWT, Swing, JavaFX & SWT 8
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3
melaniemueller JavaFX Beispiel kann nicht ausgeführt werden AWT, Swing, JavaFX & SWT 4
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
W Können Animationen in JavaFX "verschluckt" werden? AWT, Swing, JavaFX & SWT 8
M Umwandlung in den HSV-Farbraum lässt die Grafik pixelig werden AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben