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);
}
}