Java 带标尺的JScrollPane';行不通
我尝试运行JavaSwing2ndEdition 7.1.3ScrollPanelLayout中的示例。图像和卷轴工作正常,但标尺没有。这是我的密码:Java 带标尺的JScrollPane';行不通,java,swing,jscrollpane,Java,Swing,Jscrollpane,我尝试运行JavaSwing2ndEdition 7.1.3ScrollPanelLayout中的示例。图像和卷轴工作正常,但标尺没有。这是我的密码: public class ScrollPaneLayoutDemo extends JFrame{ JLabel label = new JLabel(new ImageIcon("img.jpg")); public ScrollPaneLayoutDemo() { super("ScrollPaneLayou
public class ScrollPaneLayoutDemo extends JFrame{
JLabel label = new JLabel(new ImageIcon("img.jpg"));
public ScrollPaneLayoutDemo() {
super("ScrollPaneLayout Demo");
JScrollPane jsp = new JScrollPane(label);
JLabel[] corners = new JLabel[4];
for(int i=0; i<4; i++)
{
corners[i] = new JLabel();
corners[i].setBackground(Color.YELLOW);
corners[i].setOpaque(true);
corners[i].setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2), BorderFactory.createLineBorder(Color.RED, 1)));
}
JLabel rowheader = new JLabel() {
Font f = new Font("Serif", Font.ITALIC | Font.BOLD, 10);
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Rectangle r = g.getClipBounds();
g.setFont(f);
g.setColor(Color.RED);
for (int i = 50 - (r.y % 50); i < r.height; i += 50) {
g.drawLine(0, r.y + i, 3, r.y + i);
g.drawString("" + (r.y + i), 6, r.y + i + 3);
}
}
public Dimension getPreferredSize()
{
return new Dimension(25, (int) label.getPreferredSize().getHeight());
}
};
rowheader.setBackground(Color.YELLOW);
rowheader.setOpaque(true);
JLabel columnheader = new JLabel() {
Font f = new Font("Serif", Font.ITALIC | Font.BOLD, 10);
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Rectangle r = g.getClipBounds();
g.setFont(f);
g.setColor(Color.RED);
for (int i = 50 - (r.x % 50); i < r.width; i += 50)
{
g.drawLine(r.x + i, 0, r.x + i, 3);
g.drawString("" + (r.x + i), r.x + i - 10, 16);
}
}
public Dimension getPreferredSize()
{
return new Dimension((int) label.getPreferredSize().getWidth(),25);
}
};
columnheader.setBackground(Color.YELLOW);
columnheader.setOpaque(true);
jsp.setRowHeaderView(rowheader);
jsp.setColumnHeaderView(columnheader);
jsp.setCorner(JScrollPane.LOWER_LEFT_CORNER, corners[0]);
jsp.setCorner(JScrollPane.LOWER_RIGHT_CORNER, corners[1]);
jsp.setCorner(JScrollPane.UPPER_LEFT_CORNER, corners[2]);
jsp.setCorner(JScrollPane.UPPER_RIGHT_CORNER, corners[3]);
getContentPane().add(jsp, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setVisible(true);
}
public static void main(String[] args) {
new JScrollPaneDemo();
}
}
公共类ScrollPaneLayoutDemo扩展JFrame{
JLabel标签=新JLabel(新图像图标(“img.jpg”);
公共ScrollPaneLayoutDemo(){
超级(“滚动面板布局演示”);
JScrollPane jsp=新的JScrollPane(标签);
JLabel[]拐角=新的JLabel[4];
对于(int i=0;i
- 子对象的维度必须大于JViewports维度(JScrollPane中的可见矩形),然后JScrollBars或自定义装饰可以可见,更多信息请参见Oracle教程如何使用滚动窗格
- 搜索@annotation
e、 g
不知道为什么,但我不能在这里添加图像:-)
从
import java.awt.*;
导入javax.swing.*;
公共类ScrollPaneLayoutDemo扩展了JFrame{
私有静态最终长serialVersionUID=1L;
专用JLabel标签=新JLabel(新图像图标(“img.jpg”)){
@凌驾
公共维度getPreferredSize(){
返回新维度(新维度(800600));/*icon.getIconWidth(),icon.getIconHeight()*/
}
};
公共ScrollPaneLayoutDemo(){
超级(“滚动面板布局演示”);
标签。设置首选尺寸(新尺寸(800600));
JScrollPane jsp=新的JScrollPane(标签);
JLabel[]拐角=新的JLabel[4];
对于(int i=0;i<4;i++){
角点[i]=新的JLabel();
角[i].退根地面(颜色.黄色);
角[i].setOpaque(真);
corners[i].setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2,2,2,2),BorderFactory.createLineBorder(Color.RED,1));
}
JLabel rowheader=新的JLabel(){
私有静态最终长serialVersionUID=1L;
Font f=新字体(“衬线”,Font.ITALIC | Font.BOLD,10);
@凌驾
公共组件(图形g){
超级组件(g);
矩形r=g.getClipBounds();
g、 setFont(f);
g、 setColor(Color.RED);
对于(int i=50-(r.y%50);i
- 子对象的维度必须大于JViewports维度(JScrollPane中的可见矩形),然后JScrollBars或自定义装饰可以可见,更多信息请参见Oracle教程如何使用滚动窗格
- 搜索@annotation
e、 g
不知道为什么,但我不能在这里添加图像:-)
从
import java.awt.*;
导入javax.swing.*;
公共类ScrollPaneLayoutDemo扩展了JFrame{
私有静态最终长serialVersionUID=1L;
专用JLabel标签=新JLabel(新图像图标(“img.jpg”)){
@凌驾
公共维度getPreferredSize(){
返回新维度(新维度(800600));/*icon.getIconWidth(),icon.getIconHeight()*/
}
};
公共ScrollPaneLayoutDemo(){
超级(“滚动面板布局演示”);
标签。设置首选尺寸(新尺寸(800600));
JScrollPane jsp=新的JScrollPane(标签);
JLabel[]拐角=新的JLabel[4];
对于(int i=0;i<4;i++){
角点[i]=新的JLabel();
角[i].退根地面(颜色.黄色);
角[i].setOpaque(真);
corners[i].setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2,2,2,2),BorderFactory.createLineBorder(Color.RED,1));
}
JLabel rowheader=新的JLabel(){
私有静态最终长serialVersionUID=1L;
Font f=新字体(“衬线”,Font.ITALIC | Font.BOLD,10);
@凌驾
公共组件(图形g){
超级组件(g);
import java.awt.*;
import javax.swing.*;
public class ScrollPaneLayoutDemo extends JFrame {
private static final long serialVersionUID = 1L;
private JLabel label = new JLabel(new ImageIcon("img.jpg")) {
@Override
public Dimension getPreferredSize() {
return new Dimension(new Dimension(800, 600));/*icon.getIconWidth(), icon.getIconHeight()*/
}
};
public ScrollPaneLayoutDemo() {
super("ScrollPaneLayout Demo");
label.setPreferredSize(new Dimension(800, 600));
JScrollPane jsp = new JScrollPane(label);
JLabel[] corners = new JLabel[4];
for (int i = 0; i < 4; i++) {
corners[i] = new JLabel();
corners[i].setBackground(Color.YELLOW);
corners[i].setOpaque(true);
corners[i].setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2), BorderFactory.createLineBorder(Color.RED, 1)));
}
JLabel rowheader = new JLabel() {
private static final long serialVersionUID = 1L;
Font f = new Font("Serif", Font.ITALIC | Font.BOLD, 10);
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Rectangle r = g.getClipBounds();
g.setFont(f);
g.setColor(Color.RED);
for (int i = 50 - (r.y % 50); i < r.height; i += 50) {
g.drawLine(0, r.y + i, 3, r.y + i);
g.drawString("" + (r.y + i), 6, r.y + i + 3);
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(25, (int) label.getPreferredSize().getHeight());
}
};
rowheader.setBackground(Color.YELLOW);
rowheader.setOpaque(true);
JLabel columnheader = new JLabel() {
private static final long serialVersionUID = 1L;
Font f = new Font("Serif", Font.ITALIC | Font.BOLD, 10);
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Rectangle r = g.getClipBounds();
g.setFont(f);
g.setColor(Color.RED);
for (int i = 50 - (r.x % 50); i < r.width; i += 50) {
g.drawLine(r.x + i, 0, r.x + i, 3);
g.drawString("" + (r.x + i), r.x + i - 10, 16);
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension((int) label.getPreferredSize().getWidth(), 25);
}
};
columnheader.setBackground(Color.YELLOW);
columnheader.setOpaque(true);
jsp.setRowHeaderView(rowheader);
jsp.setColumnHeaderView(columnheader);
jsp.setCorner(JScrollPane.LOWER_LEFT_CORNER, corners[0]);
jsp.setCorner(JScrollPane.LOWER_RIGHT_CORNER, corners[1]);
jsp.setCorner(JScrollPane.UPPER_LEFT_CORNER, corners[2]);
jsp.setCorner(JScrollPane.UPPER_RIGHT_CORNER, corners[3]);
getContentPane().add(jsp, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new ScrollPaneLayoutDemo();
}
});
}
}